@joshuafolkken/kit 1.1784.0 → 1.2116.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/reviewer-verification.md +19 -0
- package/.claude/agents/reviewer.md +19 -0
- package/.claude/settings.json +5 -6
- package/.claude/skills/dependency-update/SKILL.md +9 -10
- package/.claude/skills/workflow-commands/SKILL.md +6 -6
- package/.claude/skills/workflow-commands/background-commands.md +8 -5
- package/.claude/skills/workflow-commands/backlogrun-child.md +3 -1
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +1 -1
- package/.claude/skills/workflow-commands/backlogrun-park.md +5 -2
- package/.claude/skills/workflow-commands/backlogrun-progress.md +2 -3
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +1 -1
- package/.claude/skills/workflow-commands/backlogrun-steps.md +3 -2
- package/.claude/skills/workflow-commands/backlogrun.md +1 -1
- package/.claude/skills/workflow-commands/chain-rule.md +41 -32
- package/.claude/skills/workflow-commands/delegation.md +6 -6
- package/.claude/skills/workflow-commands/entry-sequence.md +2 -2
- package/.claude/skills/workflow-commands/followup.md +7 -5
- package/.claude/skills/workflow-commands/fullrun-steps.md +6 -6
- package/.claude/skills/workflow-commands/fullrun.md +1 -1
- package/.claude/skills/workflow-commands/issue-comments.md +9 -4
- package/.claude/skills/workflow-commands/issue-fold-existing.md +2 -1
- package/.claude/skills/workflow-commands/kickoff.md +2 -2
- package/.claude/skills/workflow-commands/observation-filing.md +1 -1
- package/.claude/skills/workflow-commands/observation-ledger.md +6 -4
- package/.claude/skills/workflow-commands/pre-gate-cut.md +9 -7
- package/.claude/skills/workflow-commands/prerequisite.md +3 -2
- package/.claude/skills/workflow-commands/retrospective.md +2 -2
- package/.claude/skills/workflow-commands/split-assessment.md +7 -5
- package/.codex/hooks.json +5 -5
- package/.github/actions/setup-pnpm/action.yml +9 -16
- package/.github/dependabot.yml +16 -0
- package/.github/workflows/auto-tag.yml +45 -0
- package/.github/workflows/ci.yml +155 -15
- package/.github/workflows/dependabot-auto-merge.yml +63 -4
- package/.github/workflows/production.yml +8 -0
- package/.github/workflows/publish.yml +60 -45
- package/.vscode/settings.json +19 -0
- package/CLAUDE.md +5 -12
- package/SECURITY.md +2 -2
- package/dist/CLAUDE.md +5 -12
- package/dist/commands/document-read-cli.js +2 -1
- package/dist/commands/document-section-main.js +2 -1
- package/dist/commands/read-set-cli.js +194 -134
- package/dist/commands/run-prep-main.js +9694 -10173
- package/dist/commands/run-step-cli.js +22138 -18285
- package/dist/hooks/audit-provision.js +23 -5
- package/dist/hooks/chunk-3GKE653K.js +6204 -0
- package/dist/hooks/chunk-45CJJOO7.js +1243 -0
- package/dist/hooks/{chunk-CWMBGKYW.js → chunk-5PM2JRGV.js} +2153 -856
- package/dist/hooks/{chunk-WR2KQAYZ.js → chunk-7SIUNQXK.js} +1207 -1470
- package/dist/hooks/{chunk-O2YBIDSI.js → chunk-CQD4LJE6.js} +1682 -1130
- package/dist/hooks/{chunk-VWWCFGWK.js → chunk-OPSRGWFU.js} +1 -1
- package/dist/hooks/{chunk-XGBNSWEI.js → chunk-UJ3FPMMM.js} +132 -49
- package/dist/hooks/chunk-VVNYJWEI.js +30 -0
- package/dist/hooks/chunk-Z6DQJKH3.js +2806 -0
- package/dist/hooks/codex-hook-adapter.js +8 -8
- package/dist/hooks/format-edited.js +4 -5
- package/dist/hooks/inputs.json +386 -360
- package/dist/hooks/pretool-guard.js +7 -6
- package/dist/hooks/session-lang.js +101 -258
- package/dist/hooks/stop-guard.js +1744 -2576
- package/dist/josh.js +7133 -6368
- package/dist/version/index.js +161 -1
- package/eslint/rules/comment-why-only.js +108 -0
- package/package.json +16 -9
- package/prompts/coding-standards.md +1 -1
- package/prompts/collaboration-workflow/file-edits.md +14 -11
- package/prompts/collaboration-workflow/issue-citation.md +0 -4
- package/prompts/collaboration-workflow/issue-template.md +40 -21
- package/prompts/collaboration-workflow/lane-instructions.md +3 -1
- package/prompts/collaboration-workflow/measurement.md +8 -1
- package/prompts/collaboration-workflow/operating-rules.md +11 -2
- package/prompts/collaboration-workflow/output-bounds.md +6 -2
- package/prompts/collaboration-workflow/plan-comment.md +1 -1
- package/prompts/collaboration-workflow/principles.md +9 -0
- package/prompts/collaboration-workflow/residency.md +3 -2
- package/prompts/collaboration-workflow/rule-delivery.md +13 -1
- package/prompts/collaboration-workflow/upstream-interrupt.md +2 -2
- package/prompts/collaboration-workflow/wip-cap.md +3 -1
- package/prompts/review-rubric.md +8 -0
- package/prompts/review.md +31 -22
- package/prompts/testing-guide.md +1 -0
- package/scripts/agent/agent-argv.ts +14 -16
- package/scripts/agent/agent-provider.ts +138 -0
- package/scripts/agent/agent-role-profile.ts +108 -156
- package/scripts/agent/agent-safe-text.ts +20 -5
- package/scripts/agent/api-usage-limit.ts +65 -0
- package/scripts/agent/claude-agent-argv.ts +19 -9
- package/scripts/agent/codex-agent-argv.ts +118 -22
- package/scripts/agent/usage-limit-reset.ts +179 -0
- package/scripts/auth/claude-token-output.ts +2 -2
- package/scripts/auto-ok/auto-ok-author.ts +53 -0
- package/scripts/auto-ok/auto-ok-cli.ts +20 -9
- package/scripts/backlog/backlog-defect-priority.ts +1 -1
- package/scripts/backlog/backlog-drive-cli.ts +6 -1
- package/scripts/backlog/backlog-drive-hold.ts +3 -3
- package/scripts/backlog/backlog-drive-idle.ts +10 -0
- package/scripts/backlog/backlog-drive-launch-pass.ts +90 -0
- package/scripts/backlog/backlog-drive-launch.ts +8 -2
- package/scripts/backlog/backlog-drive-named-offer.ts +73 -30
- package/scripts/backlog/backlog-drive-named.ts +28 -7
- package/scripts/backlog/backlog-drive-paused.ts +5 -4
- package/scripts/backlog/backlog-drive-restore.ts +11 -3
- package/scripts/backlog/backlog-drive.ts +21 -60
- package/scripts/backlog/backlog-gate-scope.ts +61 -0
- package/scripts/backlog/backlog-measure-close.ts +112 -0
- package/scripts/backlog/backlog-next.ts +39 -49
- package/scripts/backlog/backlog-occupied.ts +2 -2
- package/scripts/backlog/backlog-overlap.ts +42 -8
- package/scripts/backlog/backlog-plan-cli.ts +4 -1
- package/scripts/backlog/backlog-plan-comment.ts +81 -0
- package/scripts/backlog/backlog-plan-read.ts +19 -6
- package/scripts/backlog/backlog-pool.ts +50 -12
- package/scripts/backlog/backlog-rank.ts +60 -13
- package/scripts/backlog/backlog-stalled-detect.ts +2 -1
- package/scripts/backlog/backlog-waves.ts +17 -2
- package/scripts/backlog/backlogrun-launch.ts +7 -4
- package/scripts/cost-runtime/context-cut-payback.ts +27 -25
- package/scripts/cost-runtime/cost-cli.ts +37 -16
- package/scripts/cost-runtime/cost-pricing.ts +9 -0
- package/scripts/cost-runtime/cost-verdict.ts +4 -1
- package/scripts/delegation/delegation-policy.ts +2 -2
- package/scripts/delegation/duplicate-read-guard.ts +1 -0
- package/scripts/delegation/investigation-guard.ts +14 -2
- package/scripts/delegation/investigation-reads.ts +45 -23
- package/scripts/dependabot/dependabot-cooldown.ts +3 -2
- package/scripts/discovery/repo-party.ts +80 -20
- package/scripts/discovery/session-owner-pin.ts +51 -0
- package/scripts/document/capped-print.ts +1 -1
- package/scripts/document/command-reference-line-budget.ts +42 -0
- package/scripts/document/document-byte-budget.ts +17 -7
- package/scripts/document/document-checks.ts +20 -0
- package/scripts/document/document-ratchet-check.ts +101 -0
- package/scripts/document/document-section.ts +1 -0
- package/scripts/document/entry-read-budget.ts +7 -3
- package/scripts/document/issue-citation-budget.ts +94 -0
- package/scripts/epic/epic-cli-argv.ts +2 -2
- package/scripts/epic/epic-fetch.ts +4 -2
- package/scripts/epic/epic-graph.ts +7 -2
- package/scripts/epic/epic-issue.ts +3 -1
- package/scripts/epic/epic-rank.ts +5 -0
- package/scripts/exports/unused-members-check.ts +62 -0
- package/scripts/exports/unused-members-cli.ts +6 -51
- package/scripts/followup/followup-ci-path.ts +67 -0
- package/scripts/followup/followup-coderabbit-retrigger.ts +261 -0
- package/scripts/followup/followup-coderabbit-wait.ts +13 -10
- package/scripts/followup/followup-failed-tests.ts +160 -0
- package/scripts/followup/followup-job-needs.ts +100 -0
- package/scripts/followup/followup-job-rerun.ts +303 -0
- package/scripts/followup/followup-main-move.ts +113 -0
- package/scripts/followup/git-followup-finish.ts +43 -11
- package/scripts/followup/git-followup-pending.ts +3 -3
- package/scripts/followup/git-followup-stages.ts +41 -11
- package/scripts/followup/git-pr-followup-checks.ts +55 -16
- package/scripts/followup/git-pr-followup-wrapup.ts +24 -5
- package/scripts/followup/git-pr-followup.ts +62 -27
- package/scripts/fresh-machine/fresh-machine-script.ts +5 -9
- package/scripts/fresh-machine/specs/kit-test-backlogrun-python.json +2 -2
- package/scripts/fresh-machine/specs/kit-test-backlogrun.json +2 -2
- package/scripts/gate/busy-average.ts +34 -2
- package/scripts/gate/check-related-pinned.ts +43 -0
- package/scripts/gate/check-related-reuse.ts +64 -0
- package/scripts/gate/check-related-section.ts +57 -0
- package/scripts/gate/check-related-unplanned.ts +34 -0
- package/scripts/gate/check-related.ts +265 -0
- package/scripts/gate/command-memory.ts +1 -1
- package/scripts/gate/core-admission.ts +24 -6
- package/scripts/gate/core-budget-timing.ts +20 -6
- package/scripts/gate/core-budget.ts +40 -11
- package/scripts/gate/core-wait-record.ts +3 -2
- package/scripts/gate/core-wait.ts +25 -2
- package/scripts/gate/core-weights.ts +15 -7
- package/scripts/gate/gate-labels.ts +46 -0
- package/scripts/gate/gate-ledger.ts +14 -6
- package/scripts/gate/gate-plan.ts +103 -58
- package/scripts/gate/gate-report.ts +9 -7
- package/scripts/gate/gate-run-steps.ts +26 -3
- package/scripts/gate/gate-skip.ts +45 -6
- package/scripts/gate/gate-static-group.ts +60 -0
- package/scripts/gate/gate-steps.ts +2 -1
- package/scripts/gate/gate-tree.ts +4 -2
- package/scripts/gate/hook-gate-reuse.ts +19 -2
- package/scripts/gate/metrics-totals.ts +59 -0
- package/scripts/gate/scoped-green.ts +68 -15
- package/scripts/gate/since-green.ts +14 -6
- package/scripts/gate/structural-checks.ts +96 -0
- package/scripts/gate/verification-gate.ts +51 -16
- package/scripts/gate/verification-inputs.ts +21 -6
- package/scripts/gate/verification-tail.ts +52 -0
- package/scripts/gh/gh-author-association.ts +23 -2
- package/scripts/gh/git-ai-review-scan.ts +1 -1
- package/scripts/gh/git-gh-api-path.ts +12 -3
- package/scripts/gh/git-gh-comments-unreadable.ts +36 -0
- package/scripts/gh/git-gh-exec.ts +32 -2
- package/scripts/gh/git-gh-issue-read.ts +4 -2
- package/scripts/gh/git-gh-issue-rest.ts +1 -0
- package/scripts/gh/git-gh-issue-write.ts +8 -2
- package/scripts/gh/git-gh-issue.ts +12 -5
- package/scripts/gh/git-gh-pr-auto-merge.ts +13 -6
- package/scripts/gh/git-gh-pr-graphql-state.ts +56 -0
- package/scripts/gh/git-gh-pr-read.ts +74 -13
- package/scripts/gh/git-gh-pr-rest.ts +3 -1
- package/scripts/gh/git-gh-pr-snapshot.ts +22 -7
- package/scripts/gh/git-gh-pr-too-large.ts +20 -0
- package/scripts/gh/git-gh-pr.ts +21 -7
- package/scripts/gh/git-gh-retry.ts +141 -0
- package/scripts/gh/git-pr-ai-review.ts +15 -6
- package/scripts/gh/git-pr-checks-eval.ts +3 -0
- package/scripts/gh/git-pr-checks.ts +5 -5
- package/scripts/git/base-tree.ts +30 -0
- package/scripts/git/change-base.ts +4 -10
- package/scripts/git/changed-paths-sync.ts +63 -0
- package/scripts/git/changed-paths.ts +16 -1
- package/scripts/git/git-common-directory.ts +11 -1
- package/scripts/git/git-diff-reads.ts +66 -20
- package/scripts/git/git-error.ts +9 -2
- package/scripts/git/git-schemas.ts +13 -0
- package/scripts/git/git-worktree.ts +13 -0
- package/scripts/git/gone-branch.ts +4 -1
- package/scripts/git/main-merge-budget-conflict.ts +89 -0
- package/scripts/git/main-merge-guard.ts +55 -18
- package/scripts/git/main-merge-regenerate.ts +59 -25
- package/scripts/git/main-merge.ts +53 -5
- package/scripts/git/no-base-checkout.ts +127 -0
- package/scripts/git/stash/git-stash.ts +11 -2
- package/scripts/git/stash/stash-push-cli.ts +10 -0
- package/scripts/hooks/batch-guard.ts +40 -21
- package/scripts/hooks/edited-cspell.ts +37 -11
- package/scripts/hooks/format-edited-file.ts +22 -2
- package/scripts/hooks/lane-plan-guard.ts +50 -0
- package/scripts/hooks/pre-commit-lint-switch.ts +9 -0
- package/scripts/hooks/pre-commit-lint.ts +14 -1
- package/scripts/hooks/pre-push-related-switch.ts +10 -0
- package/scripts/hooks/pre-push-unit.ts +76 -10
- package/scripts/hooks/pretool-guard.ts +2 -0
- package/scripts/hooks/reserved-run.ts +14 -1
- package/scripts/hooks/run-hook.sh +23 -8
- package/scripts/hooks/step-zero-notice.ts +6 -1
- package/scripts/hooks/stop-actions.ts +3 -15
- package/scripts/hooks/stop-guard.ts +7 -6
- package/scripts/init/distributed-paths.ts +1 -0
- package/scripts/init/hook-command-rewrite.ts +5 -1
- package/scripts/init/hook-launch.ts +4 -2
- package/scripts/issue/aggregation-split.ts +52 -0
- package/scripts/issue/defect-origin-line.ts +19 -1
- package/scripts/issue/defect-rate-cli.ts +5 -102
- package/scripts/issue/defect-report.ts +4 -4
- package/scripts/issue/effect-audit-cli.ts +178 -0
- package/scripts/issue/effect-audit.ts +185 -0
- package/scripts/issue/expected-effect-lint.ts +64 -9
- package/scripts/issue/git-next-issues.ts +5 -0
- package/scripts/issue/issue-body-or-comment.ts +38 -4
- package/scripts/issue/issue-cite-cli.ts +1 -3
- package/scripts/issue/issue-classification.ts +1 -0
- package/scripts/issue/issue-closing-pr.ts +8 -1
- package/scripts/issue/issue-evidence-exit.ts +4 -2
- package/scripts/issue/issue-file-cap.ts +58 -0
- package/scripts/issue/issue-file-cli.ts +111 -38
- package/scripts/issue/issue-file-deferral.ts +52 -0
- package/scripts/issue/issue-file-fold.ts +29 -10
- package/scripts/issue/issue-file-interrupt.ts +85 -0
- package/scripts/issue/issue-file-lane-hint.ts +30 -0
- package/scripts/issue/issue-file.ts +43 -6
- package/scripts/issue/issue-labels.ts +19 -2
- package/scripts/issue/issue-lint-cli.ts +27 -2
- package/scripts/issue/issue-measured-cli.ts +13 -35
- package/scripts/issue/issue-measured-close.ts +58 -0
- package/scripts/issue/issue-not-before-label.ts +2 -2
- package/scripts/issue/issue-not-before.ts +4 -1
- package/scripts/issue/issue-priority-cli.ts +60 -0
- package/scripts/issue/issue-priority-raise.ts +55 -0
- package/scripts/issue/issue-priority.ts +174 -43
- package/scripts/issue/issue-rank.ts +21 -4
- package/scripts/issue/issue-read-cli.ts +32 -6
- package/scripts/issue/issue-read.ts +37 -12
- package/scripts/issue/issue-sample-gate.ts +95 -74
- package/scripts/issue/issue-sample-prime.ts +127 -0
- package/scripts/issue/issue-sample-required.ts +57 -0
- package/scripts/issue/issue-sample-source.ts +12 -11
- package/scripts/issue/issue-search.ts +124 -0
- package/scripts/issue/issue-state.ts +13 -1
- package/scripts/issue/issue-template-section.ts +43 -0
- package/scripts/issue/issue-watch-diff.ts +31 -1
- package/scripts/issue/issue-watch-hook.ts +11 -2
- package/scripts/issue/issue-watch.ts +55 -12
- package/scripts/issue/markdown-section.ts +1 -0
- package/scripts/issue/measure-declaration.ts +121 -0
- package/scripts/issue/measure-rerun-cli.ts +7 -70
- package/scripts/issue/plan-consumers-section.ts +22 -1
- package/scripts/issue/reproduction-measure.ts +3 -1
- package/scripts/issue/size-estimate.ts +90 -0
- package/scripts/issue/trusted-measure.ts +84 -0
- package/scripts/josh/command-usage.ts +3 -2
- package/scripts/josh/durable-state-migrate.ts +105 -0
- package/scripts/josh/durable-state.ts +112 -0
- package/scripts/josh/josh-aliases.ts +95 -0
- package/scripts/josh/josh-command-map.ts +1 -82
- package/scripts/josh/josh-commands-agent-hooks.ts +6 -6
- package/scripts/josh/josh-commands-ai.ts +5 -5
- package/scripts/josh/josh-commands-development.ts +59 -58
- package/scripts/josh/josh-commands-issue-write.ts +23 -4
- package/scripts/josh/josh-commands-issue.ts +32 -0
- package/scripts/josh/josh-commands-lane.ts +87 -4
- package/scripts/josh/josh-commands-lint.ts +16 -3
- package/scripts/josh/josh-commands-maintenance.ts +15 -0
- package/scripts/josh/josh-commands-review.ts +41 -6
- package/scripts/josh/josh-commands-ship.ts +56 -8
- package/scripts/josh/josh-commands-test-check.ts +80 -0
- package/scripts/josh/josh-commands-workflow.ts +1 -1
- package/scripts/josh/josh-environment-file.ts +43 -3
- package/scripts/josh/josh-in-process.ts +2 -2
- package/scripts/josh/josh-logic.ts +5 -3
- package/scripts/josh/josh-run.ts +19 -1
- package/scripts/josh/run-record-path.ts +15 -0
- package/scripts/josh/stamp-file.ts +11 -2
- package/scripts/lane/lane-adopt-cli.ts +98 -0
- package/scripts/lane/lane-adopt.ts +208 -0
- package/scripts/lane/lane-await.ts +5 -8
- package/scripts/lane/lane-baseline.ts +123 -0
- package/scripts/lane/lane-breakdown-cli.ts +64 -0
- package/scripts/lane/lane-breakdown-implement.ts +170 -0
- package/scripts/lane/lane-breakdown-laps.ts +107 -0
- package/scripts/lane/lane-breakdown-pinned.ts +76 -0
- package/scripts/lane/lane-breakdown-text.ts +145 -0
- package/scripts/lane/lane-breakdown.ts +239 -0
- package/scripts/lane/lane-check-stats.ts +29 -8
- package/scripts/lane/lane-child-invocation.ts +9 -2
- package/scripts/lane/lane-child-mark-keys.ts +12 -0
- package/scripts/lane/lane-child-marker.ts +20 -1
- package/scripts/lane/lane-ci-path-stats.ts +73 -0
- package/scripts/lane/lane-claim-stats.ts +84 -0
- package/scripts/lane/lane-close.ts +8 -3
- package/scripts/lane/lane-dispatch-log.ts +3 -3
- package/scripts/lane/lane-dispatch.ts +2 -2
- package/scripts/lane/lane-gap-stats.ts +7 -6
- package/scripts/lane/lane-guard-policy.ts +7 -1
- package/scripts/lane/lane-implement-stats.ts +207 -0
- package/scripts/lane/lane-implement-subagents.ts +90 -0
- package/scripts/lane/lane-investigation-switch.ts +16 -0
- package/scripts/lane/lane-ledger-kind.ts +31 -0
- package/scripts/lane/lane-ledger-schema-ship.ts +49 -0
- package/scripts/lane/lane-ledger-schema.ts +119 -36
- package/scripts/lane/lane-ledger-write.ts +257 -0
- package/scripts/lane/lane-ledger.ts +31 -177
- package/scripts/lane/lane-load.ts +1 -1
- package/scripts/lane/lane-measure-cli.ts +176 -59
- package/scripts/lane/lane-net-read.ts +44 -0
- package/scripts/lane/lane-net-time.ts +212 -0
- package/scripts/lane/lane-open.ts +16 -7
- package/scripts/lane/lane-output.ts +2 -4
- package/scripts/lane/lane-overrun-prompt.ts +147 -0
- package/scripts/lane/lane-overrun.ts +274 -0
- package/scripts/lane/lane-paths.ts +24 -1
- package/scripts/lane/lane-pause-cli.ts +4 -1
- package/scripts/lane/lane-paused-spans.ts +97 -0
- package/scripts/lane/lane-plan-check.ts +207 -0
- package/scripts/lane/lane-plan-cli.ts +41 -0
- package/scripts/lane/lane-plan.ts +144 -0
- package/scripts/lane/lane-registry.ts +14 -1
- package/scripts/lane/lane-relaunch.ts +1 -1
- package/scripts/lane/lane-round-one-stats.ts +51 -0
- package/scripts/lane/lane-sampler.ts +23 -4
- package/scripts/lane/lane-session-action.ts +93 -18
- package/scripts/lane/lane-session-broker.ts +49 -21
- package/scripts/lane/lane-session-reread-main.ts +14 -0
- package/scripts/lane/lane-session-reread.ts +51 -0
- package/scripts/lane/lane-ship-lap-stats.ts +74 -0
- package/scripts/lane/lane-sleep.ts +58 -0
- package/scripts/lane/lane-spent.ts +1 -1
- package/scripts/lane/lane-split-stats.ts +28 -0
- package/scripts/lane/lane-stage-stats.ts +13 -1
- package/scripts/lane/lane-state.ts +41 -9
- package/scripts/lane/lane-stats-tables.ts +58 -0
- package/scripts/lane/lane-stats.ts +21 -5
- package/scripts/lane/lane-stop-stats.ts +51 -19
- package/scripts/lane/lane-tail-stats.ts +32 -0
- package/scripts/lane/lane-transcript-calls.ts +67 -10
- package/scripts/lane/lane-transcript-stats.ts +44 -12
- package/scripts/lane/lane-value-cell.ts +72 -0
- package/scripts/lane/lane-value.ts +118 -0
- package/scripts/lane/lane-withdraw-closed.ts +124 -0
- package/scripts/lane/lane-withdraw.ts +108 -31
- package/scripts/lane/lane-yield.ts +85 -0
- package/scripts/lane/openai-lane-ship.ts +12 -11
- package/scripts/lane/openai-lane-supervisor-decision.ts +6 -8
- package/scripts/lane/openai-lane-supervisor-owner.ts +5 -8
- package/scripts/lane/openai-lane-supervisor.ts +5 -4
- package/scripts/lib/poll.ts +38 -9
- package/scripts/lib/settled-together.ts +10 -0
- package/scripts/lib/shell-quote.ts +21 -0
- package/scripts/lib/token-shape.ts +111 -0
- package/scripts/lint/eslint-daemon-sources.ts +79 -0
- package/scripts/lint/eslint-daemon.ts +45 -6
- package/scripts/lint/eslint-warm-cli.ts +7 -0
- package/scripts/lint/eslint-warm.ts +66 -0
- package/scripts/lint/import-graph.ts +141 -11
- package/scripts/lint/lint-gate-scope.ts +2 -2
- package/scripts/lint/lint-parallel.ts +54 -6
- package/scripts/lint/lint-related.ts +154 -33
- package/scripts/lint/rename-cli.ts +179 -0
- package/scripts/lint/rename-identifier.ts +192 -0
- package/scripts/lint/type-only-imports.ts +58 -0
- package/scripts/notify/telegram-notify.ts +12 -3
- package/scripts/observations/observation-record.ts +42 -16
- package/scripts/observations/observations-flush.ts +32 -9
- package/scripts/overrides/overrides-check.ts +9 -1
- package/scripts/release/release-approval-prune.ts +7 -1
- package/scripts/repo/required-checks-logic.ts +4 -1
- package/scripts/repo/ruleset-check.ts +4 -3
- package/scripts/report/markdown-shape.ts +28 -0
- package/scripts/report/report-format-reference.ts +15 -1
- package/scripts/report/report-labels.ts +12 -1
- package/scripts/report/report-lint-child-summary.ts +94 -0
- package/scripts/report/report-lint-cli.ts +26 -7
- package/scripts/report/report-lint.ts +2 -20
- package/scripts/review/prose-stale-cli.ts +88 -0
- package/scripts/review/prose-stale-scan.ts +152 -0
- package/scripts/review/review-attest.ts +73 -23
- package/scripts/review/review-brief-cli.ts +68 -19
- package/scripts/review/review-brief-paths.ts +22 -0
- package/scripts/review/review-brief.ts +14 -7
- package/scripts/review/review-comment-carry.ts +47 -0
- package/scripts/review/review-comment-round.ts +85 -22
- package/scripts/review/review-finding-ledger.ts +109 -7
- package/scripts/review/review-finding-text.ts +43 -0
- package/scripts/review/review-interaction.ts +11 -0
- package/scripts/review/review-lane-handover.ts +68 -0
- package/scripts/review/review-lint-cli.ts +57 -0
- package/scripts/review/review-lint-findings.ts +92 -0
- package/scripts/review/review-lint-sections.ts +80 -0
- package/scripts/review/review-lint.ts +221 -0
- package/scripts/review/review-prior-findings.ts +102 -0
- package/scripts/review/review-readers-scan.ts +4 -2
- package/scripts/review/review-record-cli.ts +177 -54
- package/scripts/review/review-record-code-round.ts +55 -0
- package/scripts/review/review-record-comment.ts +60 -0
- package/scripts/review/review-record-interaction.ts +35 -0
- package/scripts/review/review-record-pinned.ts +108 -0
- package/scripts/review/review-record.ts +25 -1
- package/scripts/review/review-reviewed-tree.ts +307 -0
- package/scripts/review/review-round-one-closure.ts +62 -0
- package/scripts/review/review-round-reuse.ts +106 -0
- package/scripts/review/review-round2-cli.ts +91 -29
- package/scripts/review/review-round2-skip-comment.ts +55 -0
- package/scripts/review/review-round2.ts +24 -8
- package/scripts/review/review-stamps.ts +7 -3
- package/scripts/review/review-stop-log.ts +20 -6
- package/scripts/review/review-stops-cli.ts +2 -1
- package/scripts/review/review-submit-cli.ts +101 -0
- package/scripts/rules/agent-model.ts +1 -1
- package/scripts/rules/bash-triggers.ts +3 -3
- package/scripts/rules/concise-reply.ts +88 -0
- package/scripts/rules/credential-body.ts +77 -0
- package/scripts/rules/decision-oracle.ts +1 -1
- package/scripts/rules/delivered-rules.ts +36 -17
- package/scripts/rules/destructive-command.ts +3 -11
- package/scripts/rules/direct-issue-comment.ts +34 -12
- package/scripts/rules/direct-issue-read.ts +191 -0
- package/scripts/rules/direct-pr-create.ts +4 -24
- package/scripts/rules/early-heartbeat.ts +2 -0
- package/scripts/rules/edit-tool.ts +27 -0
- package/scripts/rules/file-edit-rows.ts +17 -0
- package/scripts/rules/file-rewrite.ts +146 -0
- package/scripts/rules/firing-point.ts +3 -2
- package/scripts/rules/gh-api.ts +128 -7
- package/scripts/rules/gh-repo-selector.ts +84 -0
- package/scripts/rules/git-force.ts +2 -2
- package/scripts/rules/guard-remedy.ts +14 -5
- package/scripts/rules/implementation-cut.ts +61 -28
- package/scripts/rules/investigator-foreground.ts +231 -0
- package/scripts/rules/issue-citation.ts +15 -60
- package/scripts/rules/issue-comments.ts +9 -4
- package/scripts/rules/josh-git-bare.ts +1 -1
- package/scripts/rules/lane-background.ts +41 -13
- package/scripts/rules/lane-direct-tool.ts +107 -9
- package/scripts/rules/lane-interactive-ask.ts +4 -1
- package/scripts/rules/lane-park.ts +4 -2
- package/scripts/rules/lane-spilled-read.ts +90 -0
- package/scripts/rules/lane-split-park.ts +1 -1
- package/scripts/rules/lane-switch-main.ts +4 -4
- package/scripts/rules/last-prompt.ts +20 -47
- package/scripts/rules/oracle-consulted.ts +1 -1
- package/scripts/rules/permission-guards.ts +5 -1
- package/scripts/rules/piped-verification-shapes.ts +110 -0
- package/scripts/rules/piped-verification.ts +67 -17
- package/scripts/rules/poll-loop.ts +72 -9
- package/scripts/rules/pr-merge.ts +5 -5
- package/scripts/rules/pre-gate-cut.ts +3 -3
- package/scripts/rules/protected-files.ts +88 -24
- package/scripts/rules/reply-language.ts +3 -17
- package/scripts/rules/reply-prose.ts +34 -0
- package/scripts/rules/repo-admin.ts +132 -0
- package/scripts/rules/reviewer-foreground.ts +88 -0
- package/scripts/rules/round-one-check-related.ts +120 -0
- package/scripts/rules/rule-body-guard.ts +5 -15
- package/scripts/rules/rule-value-cache.ts +53 -5
- package/scripts/rules/rule-value-candidates.ts +84 -0
- package/scripts/rules/rule-value-cli.ts +59 -11
- package/scripts/rules/rule-value.ts +17 -4
- package/scripts/rules/run-tail-rule.ts +1 -1
- package/scripts/rules/sed-in-place.ts +196 -0
- package/scripts/rules/shell-segments.ts +10 -2
- package/scripts/rules/stop-rule-rows.ts +1 -13
- package/scripts/rules/stop-rules.ts +33 -58
- package/scripts/rules/test-declared-commit.ts +1 -1
- package/scripts/rules/third-party-write.ts +110 -23
- package/scripts/rules/timed-rerun.ts +1 -1
- package/scripts/rules/turn-filings.ts +90 -0
- package/scripts/rules/worktree-guard.ts +22 -7
- package/scripts/run/board/run-board-ending-reason.ts +6 -2
- package/scripts/run/board/run-board-fit.ts +24 -1
- package/scripts/run/board/run-board-found.ts +134 -0
- package/scripts/run/board/run-board-header.ts +8 -0
- package/scripts/run/board/run-board-labels.ts +11 -1
- package/scripts/run/board/run-board-lane-time.ts +1 -0
- package/scripts/run/board/run-board-link.ts +15 -2
- package/scripts/run/board/run-board-notes.ts +7 -1
- package/scripts/run/board/run-board-operation.ts +4 -2
- package/scripts/run/board/run-board-phase.ts +2 -5
- package/scripts/run/board/run-board-plan.ts +1 -1
- package/scripts/run/board/run-board-read.ts +46 -1
- package/scripts/run/board/run-board-reason.ts +20 -8
- package/scripts/run/board/run-board-render-checks.ts +3 -2
- package/scripts/run/board/run-board-render-drawn.ts +11 -0
- package/scripts/run/board/run-board-render-found.ts +157 -0
- package/scripts/run/board/run-board-render-lead.ts +9 -0
- package/scripts/run/board/run-board-render-legend.ts +19 -0
- package/scripts/run/board/run-board-render-tail.ts +1 -1
- package/scripts/run/board/run-board-render.ts +82 -18
- package/scripts/run/board/run-board-spin.ts +1 -3
- package/scripts/run/board/run-board-status.ts +2 -0
- package/scripts/run/board/run-board-tick.ts +39 -10
- package/scripts/run/carry/run-carry-ended.ts +3 -2
- package/scripts/run/carry/run-carry.ts +3 -2
- package/scripts/run/cut/run-cut-cli.ts +33 -133
- package/scripts/run/cut/run-cut-digest.ts +152 -0
- package/scripts/run/cut/run-cut-handoff.ts +52 -8
- package/scripts/run/cut/run-cut-report.ts +24 -3
- package/scripts/run/cut/run-cut-resume.ts +129 -0
- package/scripts/run/cut/run-cut-review.ts +105 -0
- package/scripts/run/cut/run-cut.ts +18 -7
- package/scripts/run/detached-launch.ts +1 -1
- package/scripts/run/entry/run-entry-cli.ts +88 -19
- package/scripts/run/entry/run-entry-spill.ts +83 -0
- package/scripts/run/entry/run-entry-stop.ts +5 -1
- package/scripts/run/entry/run-entry-trust.ts +91 -0
- package/scripts/run/event/run-event-baseline.ts +56 -0
- package/scripts/run/event/run-event-filed.ts +9 -3
- package/scripts/run/event/run-event-overrun.ts +197 -0
- package/scripts/run/event/run-event-render.ts +4 -0
- package/scripts/run/event/run-event-stream.ts +25 -3
- package/scripts/run/hold/run-stop-notify.ts +3 -8
- package/scripts/run/merge/run-merge-cap.ts +57 -0
- package/scripts/run/merge/run-merge-cli.ts +66 -23
- package/scripts/run/merge/run-merge-outcome.ts +2 -0
- package/scripts/run/merge/run-merge-ship.ts +13 -3
- package/scripts/run/merge/run-merge-signals.ts +40 -23
- package/scripts/run/merge/run-merge-steps.ts +56 -36
- package/scripts/run/merge/run-merge-usage-limit.ts +53 -0
- package/scripts/run/merge/run-merge-withdrawn.ts +53 -0
- package/scripts/run/merge/run-merge.ts +41 -14
- package/scripts/run/review/run-review-cli.ts +306 -20
- package/scripts/run/review/run-review-early-push.ts +121 -0
- package/scripts/run/review/run-review-join-read.ts +94 -0
- package/scripts/run/review/run-review-pinned-accepted.ts +126 -0
- package/scripts/run/review/run-review-pinned-join.ts +216 -0
- package/scripts/run/review/run-review-pinned-steps.ts +383 -0
- package/scripts/run/review/run-review-pinned-tree.ts +37 -0
- package/scripts/run/review/run-review-pinned.ts +53 -0
- package/scripts/run/review/run-review-steps.ts +70 -34
- package/scripts/run/review/run-review.ts +26 -6
- package/scripts/run/run-parent-cut-hook.ts +3 -4
- package/scripts/run/run-prep.ts +1 -0
- package/scripts/run/run-stage-read.ts +2 -6
- package/scripts/run/run-step-cli.ts +17 -5
- package/scripts/run/run-step-lane-plan.ts +27 -0
- package/scripts/run/run-step-section.ts +26 -7
- package/scripts/run/run-step.ts +5 -2
- package/scripts/run/ship/run-ship-args.ts +19 -0
- package/scripts/run/ship/run-ship-brokered-review.ts +106 -0
- package/scripts/run/ship/run-ship-cli.ts +131 -39
- package/scripts/run/ship/run-ship-conflict-probe.ts +59 -0
- package/scripts/run/ship/run-ship-detach.ts +10 -4
- package/scripts/run/ship/run-ship-handover.ts +106 -0
- package/scripts/run/ship/run-ship-infra-retry.ts +16 -1
- package/scripts/run/ship/run-ship-lap.ts +63 -0
- package/scripts/run/ship/run-ship-next.ts +27 -26
- package/scripts/run/ship/run-ship-overlap.ts +8 -3
- package/scripts/run/ship/run-ship-place.ts +9 -2
- package/scripts/run/ship/run-ship-planned.ts +92 -0
- package/scripts/run/ship/run-ship-pre-detach-pinned.ts +197 -0
- package/scripts/run/ship/run-ship-pre-detach-timed.ts +7 -8
- package/scripts/run/ship/run-ship-pre-detach.ts +77 -23
- package/scripts/run/ship/run-ship-preflight.ts +16 -4
- package/scripts/run/ship/run-ship-probe.ts +23 -9
- package/scripts/run/ship/run-ship-relaunch-cap.ts +43 -7
- package/scripts/run/ship/run-ship-relaunch.ts +51 -0
- package/scripts/run/ship/run-ship-return.ts +103 -29
- package/scripts/run/ship/run-ship-review-reason.ts +24 -0
- package/scripts/run/ship/run-ship-review-steps.ts +230 -59
- package/scripts/run/ship/run-ship-review.ts +171 -51
- package/scripts/run/ship/run-ship-reviewer.ts +138 -42
- package/scripts/run/ship/run-ship-scoped.ts +39 -10
- package/scripts/run/ship/run-ship-stage.ts +49 -13
- package/scripts/run/ship/run-ship-steps.ts +24 -4
- package/scripts/run/ship/run-ship-stop-cause.ts +43 -2
- package/scripts/run/ship/run-ship-stop-context.ts +50 -13
- package/scripts/run/ship/run-ship-sync.ts +171 -30
- package/scripts/run/ship/run-ship-synced-scope.ts +178 -0
- package/scripts/run/ship/run-ship-wait-cli.ts +145 -0
- package/scripts/run/ship/run-ship-waiter.ts +114 -0
- package/scripts/run/ship/run-ship.ts +16 -2
- package/scripts/run/wake/run-wake-caffeinate.ts +48 -0
- package/scripts/run/wake/run-wake-cli.ts +6 -113
- package/scripts/run/wake/run-wake-code.ts +53 -11
- package/scripts/run/wake/run-wake-driver.ts +5 -3
- package/scripts/run/wake/run-wake-finish.ts +137 -0
- package/scripts/run/wake/run-wake-loop.ts +5 -3
- package/scripts/run/wake/run-wake-ports.ts +11 -3
- package/scripts/run/wake/run-wake-session.ts +2 -0
- package/scripts/run/wake/run-wake.ts +3 -2
- package/scripts/safe-chain/ci-installer-pin.ts +49 -8
- package/scripts/safe-chain/project-config.ts +3 -2
- package/scripts/security/secretlint-scan.ts +42 -9
- package/scripts/security/security-audit-provision-main.ts +9 -1
- package/scripts/security/security-audit-provision.ts +1 -1
- package/scripts/security/security-audit.ts +21 -1
- package/scripts/security/sonar-file.ts +10 -5
- package/scripts/split/split-assess.ts +12 -3
- package/scripts/split/split-early-notice.ts +116 -0
- package/scripts/split/split-measure.ts +20 -2
- package/scripts/split/split-resolution.ts +107 -0
- package/scripts/test/direct-importers.ts +185 -0
- package/scripts/test/pure-files-entries.ts +83 -0
- package/scripts/test/related-heavy-tests.ts +81 -0
- package/scripts/test/test-no-base.ts +88 -0
- package/scripts/test/test-pinned-cache-logic.ts +363 -0
- package/scripts/test/test-pinned-cache.ts +337 -0
- package/scripts/test/test-pinned-emit.ts +49 -0
- package/scripts/test/test-pinned-functions.ts +116 -0
- package/scripts/test/test-pinned-ledger.ts +80 -0
- package/scripts/test/test-pinned-logic.ts +208 -20
- package/scripts/test/test-pinned-main.ts +84 -18
- package/scripts/test/test-pinned-pool.ts +73 -0
- package/scripts/test/test-pinned-probe.ts +254 -0
- package/scripts/test/test-pinned-prune-logic.ts +118 -0
- package/scripts/test/test-pinned-reach.ts +194 -0
- package/scripts/test/test-pinned-record.ts +196 -0
- package/scripts/test/test-pinned-rewire.ts +148 -0
- package/scripts/test/test-pinned-spawn.ts +81 -0
- package/scripts/test/test-pinned-stage.ts +70 -0
- package/scripts/test/test-pinned.ts +258 -47
- package/scripts/test/test-reach-cli.ts +61 -0
- package/scripts/test/test-read-map.ts +35 -11
- package/scripts/test/test-read-recording.ts +17 -5
- package/scripts/test/test-read-trace.ts +26 -8
- package/scripts/test/test-red-logic.ts +46 -7
- package/scripts/test/test-red.ts +34 -14
- package/scripts/test/test-related-claim.ts +37 -0
- package/scripts/test/test-related-main.ts +4 -1
- package/scripts/test/test-related-moved.ts +91 -0
- package/scripts/test/test-related-record.ts +43 -23
- package/scripts/test/test-related-scope.ts +99 -34
- package/scripts/test/test-related-synced.ts +135 -0
- package/scripts/test/test-related-touched.ts +84 -0
- package/scripts/test/test-related.ts +167 -83
- package/scripts/test/test-unit-guard.ts +28 -5
- package/scripts/test/unit-durations.ts +41 -0
- package/scripts/test/unit-worker-share.ts +5 -4
- package/scripts/test/vitest-cache-directory.ts +19 -0
- package/scripts/test/vitest-cli-excludes.ts +14 -0
- package/scripts/test/vitest-failure-summary.ts +111 -0
- package/scripts/test/whole-suite-files.ts +12 -1
- package/scripts/time-runtime/time-batch-guard.ts +42 -4
- package/scripts/time-runtime/time-bundle-call.ts +1 -1
- package/scripts/time-runtime/time-bundles.ts +36 -5
- package/scripts/time-runtime/time-markers.ts +2 -2
- package/scripts/time-runtime/time-search-call.ts +38 -0
- package/scripts/time-runtime/time-shell.ts +1 -1
- package/scripts/time-runtime/time-transcript-line.ts +17 -5
- package/scripts/version/development-engines-verdict.ts +124 -0
- package/scripts/version/latest-corepack.ts +2 -0
- package/templates/gitignore +2 -0
- package/templates/workflows/ci.yml +41 -0
- package/dist/hooks/chunk-AZX4FGQ3.js +0 -207
- package/dist/hooks/chunk-PT5R6UJD.js +0 -7131
- package/dist/hooks/chunk-TUIFS5E7.js +0 -72
- package/dist/hooks/chunk-YCDOIR3I.js +0 -3456
- package/scripts/cost-runtime/context-cut-threshold.ts +0 -11
- package/scripts/rules/filing-cap.ts +0 -139
package/dist/version/index.js
CHANGED
|
@@ -581,6 +581,11 @@ var version_check_logic = {
|
|
|
581
581
|
};
|
|
582
582
|
|
|
583
583
|
// scripts/git/git-execa-error.ts
|
|
584
|
+
function get_exit_code(error) {
|
|
585
|
+
if (typeof error !== "object" || error === null || !("exitCode" in error)) return void 0;
|
|
586
|
+
const { exitCode: exit_code } = error;
|
|
587
|
+
return typeof exit_code === "number" ? exit_code : void 0;
|
|
588
|
+
}
|
|
584
589
|
function has_timed_out(error) {
|
|
585
590
|
if (typeof error !== "object" || error === null || !("timedOut" in error)) return false;
|
|
586
591
|
return error.timedOut === true;
|
|
@@ -681,6 +686,75 @@ function trace_swallowed(where, error) {
|
|
|
681
686
|
}
|
|
682
687
|
var error_text = { message_of, trace_swallowed };
|
|
683
688
|
|
|
689
|
+
// scripts/lib/token-shape.ts
|
|
690
|
+
var REDACTED = "[REDACTED]";
|
|
691
|
+
var GITHUB_RULE = "@secretlint/secretlint-rule-github";
|
|
692
|
+
var ANTHROPIC_OAUTH_TOKEN = /sk-ant-oat\d+-[\w-]+/u;
|
|
693
|
+
var SHAPES = [
|
|
694
|
+
{
|
|
695
|
+
name: "GitHub token",
|
|
696
|
+
pattern: new RegExp("(?<!\\p{L})(?:ghp|gho|ghu|ghs|ghr)_\\w{36}(?!\\w)", "u"),
|
|
697
|
+
secretlint: GITHUB_RULE
|
|
698
|
+
},
|
|
699
|
+
{
|
|
700
|
+
name: "GitHub App installation token",
|
|
701
|
+
pattern: new RegExp("(?<!\\p{L})ghs_\\d{1,20}_[\\w-]{1,1000}\\.[\\w-]{1,10000}\\.[\\w-]{1,1000}(?![\\w-])", "u"),
|
|
702
|
+
secretlint: GITHUB_RULE
|
|
703
|
+
},
|
|
704
|
+
{
|
|
705
|
+
name: "GitHub fine-grained token",
|
|
706
|
+
pattern: new RegExp("(?<!\\p{L})github_pat_\\w{82}(?!\\w)", "u"),
|
|
707
|
+
secretlint: GITHUB_RULE
|
|
708
|
+
},
|
|
709
|
+
{
|
|
710
|
+
name: "Slack token",
|
|
711
|
+
pattern: /\b(?:xoxb|xoxp|xapp|xoxa|xoxo|xoxr)-(?:\d-)?(?:[a-zA-Z0-9]{1,40}-)+[a-zA-Z0-9]{1,40}\b/u,
|
|
712
|
+
secretlint: "@secretlint/secretlint-rule-slack"
|
|
713
|
+
},
|
|
714
|
+
{
|
|
715
|
+
name: "Anthropic API key",
|
|
716
|
+
pattern: new RegExp("(?<!\\p{L})sk-ant-api0\\d-[\\w-]{90,128}AA(?![\\w-])", "u"),
|
|
717
|
+
secretlint: "@secretlint/secretlint-rule-anthropic"
|
|
718
|
+
},
|
|
719
|
+
{ name: "Anthropic OAuth token", pattern: ANTHROPIC_OAUTH_TOKEN, secretlint: void 0 }
|
|
720
|
+
];
|
|
721
|
+
var EVERY_SHAPE = new RegExp(SHAPES.map((shape) => shape.pattern.source).join("|"), "gu");
|
|
722
|
+
function find(text) {
|
|
723
|
+
return SHAPES.find((shape) => shape.pattern.test(text));
|
|
724
|
+
}
|
|
725
|
+
function holds(text) {
|
|
726
|
+
return SHAPES.some((shape) => shape.pattern.test(text));
|
|
727
|
+
}
|
|
728
|
+
function refuse(text, subject) {
|
|
729
|
+
const shape = find(text);
|
|
730
|
+
if (shape === void 0) return;
|
|
731
|
+
throw new Error(
|
|
732
|
+
`${subject} holds a ${shape.name}-shaped string, so it was not sent. Remove the credential and send it again.`
|
|
733
|
+
);
|
|
734
|
+
}
|
|
735
|
+
function redact(text) {
|
|
736
|
+
return text.replaceAll(EVERY_SHAPE, () => REDACTED);
|
|
737
|
+
}
|
|
738
|
+
function string_leaves(value) {
|
|
739
|
+
if (typeof value === "string") return [value];
|
|
740
|
+
if (typeof value !== "object" || value === null) return [];
|
|
741
|
+
return Object.values(value).flatMap((entry) => string_leaves(entry));
|
|
742
|
+
}
|
|
743
|
+
function decoded(body) {
|
|
744
|
+
const value = json_value.parse_or_undefined(body);
|
|
745
|
+
return value === void 0 ? body : string_leaves(value).join("\n");
|
|
746
|
+
}
|
|
747
|
+
var token_shape = {
|
|
748
|
+
ANTHROPIC_OAUTH_TOKEN,
|
|
749
|
+
REDACTED,
|
|
750
|
+
SHAPES,
|
|
751
|
+
decoded,
|
|
752
|
+
find,
|
|
753
|
+
holds,
|
|
754
|
+
refuse,
|
|
755
|
+
redact
|
|
756
|
+
};
|
|
757
|
+
|
|
684
758
|
// scripts/gh/git-gh-exec.ts
|
|
685
759
|
import { execa as execa2, execaSync } from "execa";
|
|
686
760
|
|
|
@@ -743,6 +817,78 @@ function failure_of(error) {
|
|
|
743
817
|
}
|
|
744
818
|
var gh_failure = { attach, classify_stdout, failure_of, parse_response_status };
|
|
745
819
|
|
|
820
|
+
// scripts/gh/git-gh-retry.ts
|
|
821
|
+
import { setTimeout as delay } from "node:timers/promises";
|
|
822
|
+
var FIRST_RETRY_DELAY_MS = 2e3;
|
|
823
|
+
var SECOND_RETRY_DELAY_MS = 5e3;
|
|
824
|
+
var RETRY_DELAYS_MS = [FIRST_RETRY_DELAY_MS, SECOND_RETRY_DELAY_MS];
|
|
825
|
+
var MAX_ATTEMPTS = RETRY_DELAYS_MS.length + 1;
|
|
826
|
+
var SERVER_ERROR_FLOOR = 500;
|
|
827
|
+
var GH_AUTH_REQUIRED_EXIT_CODE = 4;
|
|
828
|
+
var SPENT_NOTE = "gh: request failed transiently on every attempt";
|
|
829
|
+
var SUMMARY_STATUS_PATTERN = /\(HTTP (?<status>\d{3})\)/u;
|
|
830
|
+
var DEFAULT_HOOKS = {
|
|
831
|
+
wait: async (milliseconds) => {
|
|
832
|
+
await delay(milliseconds);
|
|
833
|
+
},
|
|
834
|
+
note: (text) => {
|
|
835
|
+
process.stderr.write(`${text}
|
|
836
|
+
`);
|
|
837
|
+
}
|
|
838
|
+
};
|
|
839
|
+
function summary_status(error) {
|
|
840
|
+
const { status } = SUMMARY_STATUS_PATTERN.exec(error.message)?.groups ?? {};
|
|
841
|
+
return status === void 0 ? void 0 : Number(status);
|
|
842
|
+
}
|
|
843
|
+
function has_answer(spawn_error) {
|
|
844
|
+
if (!(spawn_error instanceof Error) || !("stdout" in spawn_error)) return false;
|
|
845
|
+
return typeof spawn_error.stdout === "string" && spawn_error.stdout.trim().length > 0;
|
|
846
|
+
}
|
|
847
|
+
function is_transient_status(status, spawn_error) {
|
|
848
|
+
if (status === void 0) return !has_answer(spawn_error);
|
|
849
|
+
return status >= SERVER_ERROR_FLOOR;
|
|
850
|
+
}
|
|
851
|
+
function is_final_spawn(spawn_error) {
|
|
852
|
+
return has_timed_out(spawn_error) || get_exit_code(spawn_error) === GH_AUTH_REQUIRED_EXIT_CODE;
|
|
853
|
+
}
|
|
854
|
+
function is_transient(error) {
|
|
855
|
+
const failure = gh_failure.failure_of(error);
|
|
856
|
+
if (failure === void 0 || !(error instanceof Error)) return false;
|
|
857
|
+
const status = failure.status ?? summary_status(error);
|
|
858
|
+
return !is_final_spawn(error.cause) && is_transient_status(status, error.cause);
|
|
859
|
+
}
|
|
860
|
+
function first_line(error) {
|
|
861
|
+
return error_text.message_of(error).split("\n", 1)[0] ?? "";
|
|
862
|
+
}
|
|
863
|
+
function retry_note(error, attempt, wait_ms) {
|
|
864
|
+
const ordinal = `${String(attempt)}/${String(MAX_ATTEMPTS)}`;
|
|
865
|
+
return `gh: request failed transiently (attempt ${ordinal}: ${first_line(error)}) \u2014 retrying in ${String(wait_ms)} ms`;
|
|
866
|
+
}
|
|
867
|
+
function retry_delay(error, attempt) {
|
|
868
|
+
return is_transient(error) ? RETRY_DELAYS_MS[attempt - 1] : void 0;
|
|
869
|
+
}
|
|
870
|
+
function spent_note(message) {
|
|
871
|
+
return `${SPENT_NOTE} (${message})`;
|
|
872
|
+
}
|
|
873
|
+
function note_spent(error, attempt, hooks) {
|
|
874
|
+
if (attempt === MAX_ATTEMPTS && is_transient(error)) hooks.note(spent_note(first_line(error)));
|
|
875
|
+
}
|
|
876
|
+
async function with_retry(request, hooks = DEFAULT_HOOKS, attempt = 1) {
|
|
877
|
+
try {
|
|
878
|
+
return await request();
|
|
879
|
+
} catch (error) {
|
|
880
|
+
const wait_ms = retry_delay(error, attempt);
|
|
881
|
+
if (wait_ms === void 0) {
|
|
882
|
+
note_spent(error, attempt, hooks);
|
|
883
|
+
throw error;
|
|
884
|
+
}
|
|
885
|
+
hooks.note(retry_note(error, attempt, wait_ms));
|
|
886
|
+
await hooks.wait(wait_ms);
|
|
887
|
+
return await with_retry(request, hooks, attempt + 1);
|
|
888
|
+
}
|
|
889
|
+
}
|
|
890
|
+
var gh_retry = { MAX_ATTEMPTS, RETRY_DELAYS_MS, is_transient, spent_note, with_retry };
|
|
891
|
+
|
|
746
892
|
// scripts/gh/git-gh-exec.ts
|
|
747
893
|
var BODY_FROM_STDIN = "-";
|
|
748
894
|
var GH_REQUEST_TIMEOUT_MS = 6e4;
|
|
@@ -833,13 +979,20 @@ var INPUT_FLAG = "--input";
|
|
|
833
979
|
var PAGINATE_FLAG = "--paginate";
|
|
834
980
|
var SLURP_FLAG = "--slurp";
|
|
835
981
|
var JQ_FLAG = "--jq";
|
|
982
|
+
var ALLOW_ESCAPES_FLAG = "--allow-escape-sequences";
|
|
836
983
|
function optional_flag(flag, value) {
|
|
837
984
|
return value === void 0 ? [] : [flag, value];
|
|
838
985
|
}
|
|
986
|
+
function refuse_credential_body(request) {
|
|
987
|
+
if (request.body !== void 0) {
|
|
988
|
+
token_shape.refuse(token_shape.decoded(request.body), `The gh api ${request.path} body`);
|
|
989
|
+
}
|
|
990
|
+
}
|
|
839
991
|
function to_gh_api_args(request) {
|
|
840
992
|
const body_args = request.body === void 0 ? [] : [INPUT_FLAG, BODY_FROM_STDIN];
|
|
841
993
|
const paginate_args = request.should_paginate === true ? [PAGINATE_FLAG] : [];
|
|
842
994
|
const slurp_args = request.should_slurp === true ? [SLURP_FLAG] : [];
|
|
995
|
+
const escape_args = request.should_allow_escapes === true ? [ALLOW_ESCAPES_FLAG] : [];
|
|
843
996
|
return [
|
|
844
997
|
"api",
|
|
845
998
|
request.path,
|
|
@@ -847,10 +1000,11 @@ function to_gh_api_args(request) {
|
|
|
847
1000
|
...body_args,
|
|
848
1001
|
...paginate_args,
|
|
849
1002
|
...slurp_args,
|
|
1003
|
+
...escape_args,
|
|
850
1004
|
...optional_flag(JQ_FLAG, request.jq_filter)
|
|
851
1005
|
];
|
|
852
1006
|
}
|
|
853
|
-
async function
|
|
1007
|
+
async function send_gh_api(request) {
|
|
854
1008
|
const args = to_gh_api_args(request);
|
|
855
1009
|
if (request.body === void 0) {
|
|
856
1010
|
return await exec_gh_command(args, request.timeout_ms, request.cwd);
|
|
@@ -862,7 +1016,13 @@ async function exec_gh_api(request) {
|
|
|
862
1016
|
cwd: request.cwd
|
|
863
1017
|
});
|
|
864
1018
|
}
|
|
1019
|
+
async function exec_gh_api(request) {
|
|
1020
|
+
refuse_credential_body(request);
|
|
1021
|
+
if (request.should_retry === false) return await send_gh_api(request);
|
|
1022
|
+
return await gh_retry.with_retry(async () => await send_gh_api(request));
|
|
1023
|
+
}
|
|
865
1024
|
function exec_gh_api_sync(request) {
|
|
1025
|
+
refuse_credential_body(request);
|
|
866
1026
|
const body_option = request.body === void 0 ? {} : { input: request.body };
|
|
867
1027
|
const options = { ...body_option, ...to_spawn_options(request.timeout_ms, request.cwd) };
|
|
868
1028
|
try {
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
// Enforce the comment rule of prompts/coding-standards.md → 基本方針: a comment states why, so the
|
|
2
|
+
// history of how the code got here ("Previously, …", "used to …") and measured values with a unit
|
|
3
|
+
// ("about 16,000 tokens", "1.9 seconds") are reported — git history and the Issue hold both. An Issue
|
|
4
|
+
// citation such as `joshuafolkken/kit#5282` is allowed: it is where the why is recorded. The two
|
|
5
|
+
// checks are separate rules so a repository can switch each on once its own comments are clean.
|
|
6
|
+
|
|
7
|
+
// A bare "previously" often means "earlier in this run" ("a previously parked lane"); only the
|
|
8
|
+
// sentence-opening "Previously," narrates the past. "is used to" describes a purpose, not a
|
|
9
|
+
// history, so the look-behind skips it.
|
|
10
|
+
const HISTORY_PATTERNS = [
|
|
11
|
+
/\bpreviously,/iu,
|
|
12
|
+
/\bformerly\b/iu,
|
|
13
|
+
/(?<!\b(?:is|are|be|been|being|was|were|get|gets|got|getting|only|also|not|just) )\bused to\b/iu,
|
|
14
|
+
/以前は/u,
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
// A sentence opening with "Used to" describes a purpose too, so that opening is cut off before the
|
|
18
|
+
// history check. A sentence opens at a line start (after a block comment's `*`) or after `.`, `!`,
|
|
19
|
+
// `?` or `:`; the capital `U` keeps a lowercase "used to" that wraps onto the next line of a
|
|
20
|
+
// sentence a history.
|
|
21
|
+
const SENTENCE_BOUNDARY = /(?<=[.!?:\n])/u
|
|
22
|
+
const OPENING_PURPOSE_PATTERN = /^[\s*]*Used to\b/u
|
|
23
|
+
|
|
24
|
+
// A number with a time, size or token unit, `12k tokens` and `10-second` included. The look-behind
|
|
25
|
+
// keeps `#1234` and the tail of a longer number or identifier from matching. A bare `s` is left out:
|
|
26
|
+
// it would read `1990s` and `502s` as durations.
|
|
27
|
+
const MEASUREMENT_PATTERNS = [
|
|
28
|
+
/(?<![#\w.,])\d[\d.,]*[\s-]?(?:ms|secs?|mins?)(?!\w)/u,
|
|
29
|
+
/(?<![#\w.,])\d[\d.,]*[\s-]?(?:seconds?|minutes?|hours?)(?!\w)/u,
|
|
30
|
+
/(?<![#\w.,])\d[\d.,]*[\s-]?(?:[KMG]i?B|kB|bytes?)(?!\w)/u,
|
|
31
|
+
/(?<![#\w.,])\d[\d.,]*[kKM]?[\s-]?tokens?(?!\w)/u,
|
|
32
|
+
]
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @param {string} sentence
|
|
36
|
+
* @returns {boolean}
|
|
37
|
+
*/
|
|
38
|
+
function sentence_has_history(sentence) {
|
|
39
|
+
const opening = OPENING_PURPOSE_PATTERN.exec(sentence)
|
|
40
|
+
const rest = opening ? sentence.slice(opening[0].length) : sentence
|
|
41
|
+
|
|
42
|
+
return HISTORY_PATTERNS.some((pattern) => pattern.test(rest))
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* @param {string} text
|
|
47
|
+
* @returns {boolean}
|
|
48
|
+
*/
|
|
49
|
+
function has_history(text) {
|
|
50
|
+
return text.split(SENTENCE_BOUNDARY).some((sentence) => sentence_has_history(sentence))
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* @param {string} text
|
|
55
|
+
* @returns {boolean}
|
|
56
|
+
*/
|
|
57
|
+
function has_measurement(text) {
|
|
58
|
+
return MEASUREMENT_PATTERNS.some((pattern) => pattern.test(text))
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* @param {(text: string) => boolean} is_violation
|
|
63
|
+
* @param {string} message_id
|
|
64
|
+
* @param {string} message
|
|
65
|
+
* @returns {import('eslint').Rule.RuleModule}
|
|
66
|
+
*/
|
|
67
|
+
function comment_rule(is_violation, message_id, message) {
|
|
68
|
+
return {
|
|
69
|
+
meta: {
|
|
70
|
+
type: 'suggestion',
|
|
71
|
+
docs: { description: message },
|
|
72
|
+
messages: { [message_id]: message },
|
|
73
|
+
schema: [],
|
|
74
|
+
},
|
|
75
|
+
create(context) {
|
|
76
|
+
return {
|
|
77
|
+
Program() {
|
|
78
|
+
for (const comment of context.sourceCode.getAllComments()) {
|
|
79
|
+
if (!is_violation(comment.value)) continue
|
|
80
|
+
context.report({ loc: comment.loc, messageId: message_id })
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const no_history_comment_rule = comment_rule(
|
|
89
|
+
has_history,
|
|
90
|
+
'history',
|
|
91
|
+
'Drop the history from this comment ("Previously, …", "used to …"); state why the code is as it is now. git history and the Issue keep the past (prompts/coding-standards.md → 基本方針).',
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
const no_measurement_comment_rule = comment_rule(
|
|
95
|
+
has_measurement,
|
|
96
|
+
'measurement',
|
|
97
|
+
'Drop the measured value from this comment (a number with a time, size or token unit); cite the Issue that recorded it instead (prompts/coding-standards.md → 基本方針).',
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
// The plugin wrapper a flat config merges into its `kit` namespace.
|
|
101
|
+
const comment_why_only_plugin = {
|
|
102
|
+
rules: {
|
|
103
|
+
'no-history-comment': no_history_comment_rule,
|
|
104
|
+
'no-measurement-comment': no_measurement_comment_rule,
|
|
105
|
+
},
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export { comment_why_only_plugin }
|
package/package.json
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.
|
|
2
|
+
"version": "1.2116.0",
|
|
3
3
|
"name": "@joshuafolkken/kit",
|
|
4
|
-
"description": "
|
|
4
|
+
"description": "Hand-off kit for Claude Code and Codex: backlogrun takes your GitHub Issues to tested, reviewed, merged PRs — in parallel and unattended — with the rules, hooks and checks that keep the agent on track",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
7
|
+
"automation",
|
|
8
|
+
"backlogrun",
|
|
7
9
|
"claude-code",
|
|
8
10
|
"cli",
|
|
9
11
|
"codex",
|
|
10
12
|
"developer-tools",
|
|
11
13
|
"eslint",
|
|
14
|
+
"github-issues",
|
|
12
15
|
"prettier",
|
|
13
16
|
"toolkit",
|
|
14
17
|
"workflow"
|
|
@@ -68,7 +71,9 @@
|
|
|
68
71
|
"!**/__snapshots__",
|
|
69
72
|
"!**/*.golden.txt",
|
|
70
73
|
"!dist/hooks/.inputs-verified.json*",
|
|
71
|
-
"!dist/.hooks-staging-*"
|
|
74
|
+
"!dist/.hooks-staging-*",
|
|
75
|
+
"!dist/.commands-test-*",
|
|
76
|
+
"!dist/.dispatch-test-*"
|
|
72
77
|
],
|
|
73
78
|
"imports": {
|
|
74
79
|
"#eslint/*": "./eslint/*",
|
|
@@ -140,7 +145,7 @@
|
|
|
140
145
|
"eslint-plugin-import-x": "^4.17.1",
|
|
141
146
|
"eslint-plugin-promise": "^7.3.0",
|
|
142
147
|
"eslint-plugin-sonarjs": "^4.2.1",
|
|
143
|
-
"eslint-plugin-unicorn": "^
|
|
148
|
+
"eslint-plugin-unicorn": "^79.0.0",
|
|
144
149
|
"globals": "^17.12.0",
|
|
145
150
|
"prettier": "^3.9.9",
|
|
146
151
|
"prettier-plugin-svelte": "^4.1.1",
|
|
@@ -213,6 +218,7 @@
|
|
|
213
218
|
"@secretlint/secretlint-rule-preset-recommend": "^13.0.7",
|
|
214
219
|
"@stylistic/eslint-plugin": "^5.10.0",
|
|
215
220
|
"@types/node": "^26.6.5",
|
|
221
|
+
"@types/run-parallel": "^1.1.2",
|
|
216
222
|
"@types/semver": "^7.8.0",
|
|
217
223
|
"cspell": "^10.4.0",
|
|
218
224
|
"esbuild": "^0.28.2",
|
|
@@ -222,7 +228,7 @@
|
|
|
222
228
|
"eslint-plugin-import-x": "^4.17.1",
|
|
223
229
|
"eslint-plugin-promise": "^7.3.0",
|
|
224
230
|
"eslint-plugin-sonarjs": "^4.2.2",
|
|
225
|
-
"eslint-plugin-unicorn": "^
|
|
231
|
+
"eslint-plugin-unicorn": "^79.0.0",
|
|
226
232
|
"eslint_d": "^15.0.3",
|
|
227
233
|
"fast-check": "^4.10.2",
|
|
228
234
|
"globals": "^17.13.0",
|
|
@@ -230,21 +236,22 @@
|
|
|
230
236
|
"prettier": "^3.9.10",
|
|
231
237
|
"prettier-plugin-svelte": "^4.1.1",
|
|
232
238
|
"prettier-plugin-tailwindcss": "^0.8.1",
|
|
233
|
-
"rollup": "^4.
|
|
239
|
+
"rollup": "^4.65.0",
|
|
234
240
|
"rollup-plugin-dts": "^6.5.1",
|
|
235
241
|
"secretlint": "^13.0.7",
|
|
236
242
|
"typescript": "^6.0.3",
|
|
237
|
-
"typescript-eslint": "^8.
|
|
243
|
+
"typescript-eslint": "^8.72.0",
|
|
238
244
|
"vitest": "^5.0.5"
|
|
239
245
|
},
|
|
240
246
|
"dependencies": {
|
|
241
247
|
"cli-spinners": "^3.4.0",
|
|
242
248
|
"csv-parse": "^7.0.3",
|
|
243
|
-
"execa": "^10.
|
|
249
|
+
"execa": "^10.2.1",
|
|
244
250
|
"flatted": "^3.4.4",
|
|
245
251
|
"js-yaml": "^5.5.0",
|
|
246
252
|
"jsonc-parser": "^3.3.1",
|
|
247
253
|
"ora": "^9.4.1",
|
|
254
|
+
"run-parallel": "^1.2.0",
|
|
248
255
|
"semver": "^7.8.5",
|
|
249
256
|
"string-width": "^8.3.0",
|
|
250
257
|
"terminal-link": "^5.0.0",
|
|
@@ -254,7 +261,7 @@
|
|
|
254
261
|
"devEngines": {
|
|
255
262
|
"packageManager": {
|
|
256
263
|
"name": "pnpm",
|
|
257
|
-
"version": "12.
|
|
264
|
+
"version": "12.15.0+sha512.b3951d6d6ff4a9f13dc7cf56cd28d2b8eb37dbcc9c68e52e1e1191873ea9f82a017287ab50baadc5ccc494f036c67c0e47eb13608c2fa36f47711b61ea128e61",
|
|
258
265
|
"onFail": "download"
|
|
259
266
|
}
|
|
260
267
|
},
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
## 📝 基本方針
|
|
13
13
|
|
|
14
14
|
- **意図が不明瞭な処理は関数に抽出する**: 1 行でも抽出し、関数名で意図を表す(`if (is_eligible_for_service(user))`)
|
|
15
|
-
- **コメントは「なぜ」だけ**:
|
|
15
|
+
- **コメントは「なぜ」だけ**: 一行の理由だけを残す。Issue の引用は「なぜ」の出典として書いてよい。「以前は…」の経緯と単位付きの計測値は書かない(git 履歴と Issue が持つ。`eslint/rules/comment-why-only.js`)
|
|
16
16
|
- **文字列も定数化する**: 繰り返す文字列や識別子にも意味の分かる名前の定数を付ける
|
|
17
17
|
- **既存のコード体系に寄り添う**: そのうえで、より良く書けるなら目指す
|
|
18
18
|
- **仕組みを足す前に原因を問う**: `prompts/collaboration-workflow/principles.md` → "elegant-design"。重複の撲滅は "no-clones"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
## ファイル編集はコマンド本文に本文を載せない
|
|
2
2
|
|
|
3
|
-
`pnpm josh rule:list` の `file-body` 行が、既存ファイルを書き戻すヒアドキュメント・書き込むインタプリタ heredoc / `node -e`・書き込むスクリプトを作るヒアドキュメント・`perl -0pi -e`
|
|
3
|
+
`pnpm josh rule:list` の `file-body` 行が、既存ファイルを書き戻すヒアドキュメント・書き込むインタプリタ heredoc / `node -e`・書き込むスクリプトを作るヒアドキュメント・`perl -0pi -e` を拒否する。Edit / Write の全文書き直しと `sed -i` は以下に従う。
|
|
4
4
|
|
|
5
5
|
### 何を禁じているか
|
|
6
6
|
|
|
@@ -30,9 +30,11 @@ PY
|
|
|
30
30
|
- ファイル全体の作り直し — 変更後の本文が元とほとんど共有しない場合
|
|
31
31
|
- 部分編集のほうが大きくなる場合 — `old_string` / `new_string` の合計が全文を超えるとき(このときも Write で書く)
|
|
32
32
|
|
|
33
|
+
既存ファイルへの Write が元の行の過半を残すかは `file-rewrite` ガードが数えて拒否する。
|
|
34
|
+
|
|
33
35
|
### `sed -i` を使う前に満たす 4 条件
|
|
34
36
|
|
|
35
|
-
`sed` は一致した全行を書き換え、一致 0
|
|
37
|
+
`sed` は一致した全行を書き換え、一致 0 件でも黙って成功する。使う前に次を満たす。条件 1・2 は `sed-in-place` ガードが判定して拒否する。
|
|
36
38
|
|
|
37
39
|
1. **出現回数を先に数える** — `grep -o '<pattern>' <file> | wc -l` が `1` であること。`grep -c` は行数を数えるので使わない
|
|
38
40
|
2. **メタ文字を持ち込まない — パターン側と置換語側の両方** — `/`、`&`、`\`、`.` `*` `[` `]` `^` `$` のいずれかが入るなら Edit を使う
|
|
@@ -41,12 +43,13 @@ PY
|
|
|
41
43
|
|
|
42
44
|
**4 条件のどれかが面倒に見えたら、そこが Edit を使う場所である。**
|
|
43
45
|
|
|
44
|
-
| 形
|
|
45
|
-
|
|
|
46
|
-
| Edit(数行の old / new)
|
|
47
|
-
| `sed -i` の短い置換
|
|
48
|
-
| `
|
|
49
|
-
| `
|
|
50
|
-
| `cat >
|
|
51
|
-
| `cat >
|
|
52
|
-
|
|
|
46
|
+
| 形 | 可否 |
|
|
47
|
+
| ------------------------------------------------------- | ----------------------- |
|
|
48
|
+
| Edit(数行の old / new) | 可 |
|
|
49
|
+
| `sed -i` の短い置換 | 上の 4 条件つきで可 |
|
|
50
|
+
| 同じ識別子・import 指定子の置換が複数ファイルにまたがる | `pnpm josh rename` で可 |
|
|
51
|
+
| `python3 - <<'PY'` で書き戻す | 不可 |
|
|
52
|
+
| `cat > file <<'EOF'`(既存ファイル) | 不可 |
|
|
53
|
+
| `cat > new-file <<'EOF'`(新規、長文なら Write) | 可 |
|
|
54
|
+
| `cat > edit.py <<'EOF'`(書き込むスクリプト) | 不可 |
|
|
55
|
+
| 読み取り(`cat` / `sed -n` / `grep`) | 可 |
|
|
@@ -20,7 +20,3 @@
|
|
|
20
20
|
### 英語固定の 3 つとは衝突しない
|
|
21
21
|
|
|
22
22
|
要約はタイトルではなくセッション内の散文なので、`overview.md` →「出力の言語(`JOSH_SESSION_LANG`)」の英語固定とは矛盾しない。
|
|
23
|
-
|
|
24
|
-
### 停止時の担保(joshuafolkken/kit#2247)
|
|
25
|
-
|
|
26
|
-
裸の `#N` は `pnpm josh stop:guard` が引用行にする。差し戻されたら、その実行形で引用し直す([docs/josh-commands.md](https://github.com/joshuafolkken/kit/blob/main/docs/josh-commands.md) の `josh stop:guard`)。
|
|
@@ -8,7 +8,13 @@
|
|
|
8
8
|
<不具合なら `- 種別: 不具合`、そうでなければ `- 種別: 非不具合` を宣言する>
|
|
9
9
|
<不具合なら `- 原因: #<PR>`、追えなければ `- 原因: 不明(<理由>)` を宣言する>
|
|
10
10
|
<人の判断が要らなければ `- 人の判断: 不要`、要るなら `- 人の判断: 要(<方針の判断 / 外部アカウント / 目視確認>)` を宣言する>
|
|
11
|
-
|
|
11
|
+
<レーンを延ばした原因なら `- 原因のレーン: <分> 分(#<N>)` を宣言する。分は `pnpm josh lane:net <N>`>
|
|
12
|
+
<そのうちこの Issue の原因で縮められる分は `- 原因の損失: <分> 分` で宣言する。再発のたびに 1 行足す>
|
|
13
|
+
<セキュリティの指摘なら `- セキュリティ: <迂回される gate・ガード・権限>` を宣言する>
|
|
14
|
+
<Issue を park させた、またはランを止めた run 機構の不具合なら `- 原因の park: #<N>` を宣言する>
|
|
15
|
+
<任意。`- 優先度: 緊急(条件 <1-3>)`、`- 優先度: 高(<根拠>)`、`- 優先度: 通常` のどれか。無ければ下限か通常>
|
|
16
|
+
<差分の見積もりを `- 規模見積もり: 約 <N> ファイル / <M> 行(テスト除く)` で宣言する>
|
|
17
|
+
<見積もりが分割の目安を超えても 1 件にするなら `- 分割しない理由: <理由>` を宣言する>
|
|
12
18
|
|
|
13
19
|
<なぜ必要か>
|
|
14
20
|
|
|
@@ -27,7 +33,7 @@
|
|
|
27
33
|
|
|
28
34
|
## 発火点
|
|
29
35
|
|
|
30
|
-
<AI の振る舞いを変える Issue のみ。その規則が破れる瞬間に最初に呼ばれるツールコール名を 1 つだけ書く(例 `Bash` / `Edit` / `Read` / `Write` / `AskUserQuestion`)>
|
|
36
|
+
<AI の振る舞いを変える Issue のみ。その規則が破れる瞬間に最初に呼ばれるツールコール名を 1 つだけ書く(例 `Bash` / `Edit` / `Read` / `Write` / `AskUserQuestion`、回答を判定する規則は `Stop`)>
|
|
31
37
|
|
|
32
38
|
## ベースライン
|
|
33
39
|
|
|
@@ -37,7 +43,7 @@
|
|
|
37
43
|
|
|
38
44
|
## 再現
|
|
39
45
|
|
|
40
|
-
<AI の振る舞いを変える Issue
|
|
46
|
+
<AI の振る舞いを変える Issue、および `- 原因: 不明(<理由>)` の不具合のみ。「コマンド + 実際の出力」で書き、出力はフェンス(``` または ~~~)で囲む>
|
|
41
47
|
|
|
42
48
|
- `<再現コマンド>`
|
|
43
49
|
|
|
@@ -53,7 +59,6 @@
|
|
|
53
59
|
- 1 回あたりの得: <値>
|
|
54
60
|
- 外れたときの損: <値>
|
|
55
61
|
- 出典: <`pnpm josh lane:stats` → 値>
|
|
56
|
-
- 1 マージあたりの短縮: <分>(レーン中央値 <分> の <%>)
|
|
57
62
|
|
|
58
63
|
## Origin
|
|
59
64
|
|
|
@@ -64,29 +69,42 @@
|
|
|
64
69
|
|
|
65
70
|
起票は `pnpm josh issue:file "<title>" --body-file <本文ファイル>` で行い、本文の検査(`pnpm josh issue:lint <path>` と同じ)と下表のラベル付与はコマンドが行う。**宣言は起票者が選ぶ。** `- 人の判断:` の行は必須で、`issue:file` が検査し `auto-ok` の判定に使う(`scripts/issue/issue-auto-ok.ts`、`docs/how-to/run-backlog.md`)。`不要` を宣言する起票には `--label run:lane`(kit 自身の検証が `main` で毎回決まって誤った答えを出す不具合なら `run:solo`。時々出る誤判定は `run:lane` と `priority:critical`)も付ける — 無ければ `issue:file` が拒否する。
|
|
66
71
|
|
|
67
|
-
| 宣言
|
|
68
|
-
|
|
|
69
|
-
| `- 種別: 不具合`
|
|
70
|
-
| `- 目的: 機能追加`
|
|
71
|
-
| `- 目的: 機能改善`
|
|
72
|
-
| `- 目的: 時間短縮`
|
|
73
|
-
| `- 互換性: 破壊的変更`
|
|
74
|
-
| `- 種別: 振る舞い変更`
|
|
75
|
-
| `- 人の判断: 不要`
|
|
76
|
-
| `- 実施可能条件: #<PR> のマージ後 <K> マージ`
|
|
77
|
-
| `- 実施可能日: <UTC>`
|
|
78
|
-
|
|
|
79
|
-
| `-
|
|
80
|
-
| `-
|
|
72
|
+
| 宣言 | 付くラベル | 選ぶ基準 |
|
|
73
|
+
| -------------------------------------------------------- | -------------------------------------- | ----------------------------------------------------------------------------------------------------- |
|
|
74
|
+
| `- 種別: 不具合` | `bug` | 報告された症状を直す(無ければ `- 種別: 非不具合`) |
|
|
75
|
+
| `- 目的: 機能追加` | `enhancement` | 新しい機能。修正・文書・依存更新・保守には書かない |
|
|
76
|
+
| `- 目的: 機能改善` | `enhancement` | 既存機能の改善。目的が曖昧なら受け入れ条件を具体化してから |
|
|
77
|
+
| `- 目的: 時間短縮` | `enhancement` | 所要時間を短くする。`## 期待効果` の 4 行が必須 |
|
|
78
|
+
| `- 互換性: 破壊的変更` | `breaking-change` | 契約を変える。移行措置があっても書き、廃止対象と影響を書く |
|
|
79
|
+
| `- 種別: 振る舞い変更` | なし | AI の振る舞いを変える。下の 3 見出しが必須 |
|
|
80
|
+
| `- 人の判断: 不要` | `auto-ok`(除外ラベルが無ければ) | 方針の判断・外部アカウント・目視確認のどれも要らない |
|
|
81
|
+
| `- 実施可能条件: #<PR> のマージ後 <K> マージ` | `not-before`(待つ間) | 追跡計測。元の PR のマージ後に lane ledger が K 件のマージを記録するまで着手しない |
|
|
82
|
+
| `- 実施可能日: <UTC>` | `not-before`(待つ間) | 外部の期限など暦そのものに意味がある待ち(`YYYY-MM-DDTHH:MMZ`)。追跡計測には使わない |
|
|
83
|
+
| ``- 計測宣言: `<command>` <= <数値>`` | なし(閉じたら `measured`) | 追跡計測の既定。比較は `<=` `<` `>=` `>` |
|
|
84
|
+
| `- 計測宣言なし: <理由>` | なし | 追跡計測の値を 1 コマンドで出せない(Actions の記録・外部サービスなど) |
|
|
85
|
+
| `- 原因のレーン: <分> 分(#<N>)` | なし | レーン #N を延ばした原因。並びの代替キーで、下限は作らない(下の F) |
|
|
86
|
+
| `- 原因の損失: <分> 分` | 合計 30 分以上で下限(宣言が無いとき) | 原因ごとの縮められる分。再発ごとの行を合計して並べる(下の F) |
|
|
87
|
+
| `- セキュリティ: <迂回される gate・ガード・権限>` | 下限(宣言が無いとき) | 下の H |
|
|
88
|
+
| `- 原因の park: #<N>` | 下限(宣言が無いとき) | 下の I。#N は park された、またはランが止まった Issue |
|
|
89
|
+
| `- 優先度: 緊急(…)` | `priority:critical` | 下の A。条件番号を括弧に書く |
|
|
90
|
+
| `- 優先度: 高(…)` | `priority:high` | 下の D・E・F・H・I のどれか。根拠を括弧に書く |
|
|
91
|
+
| `- 優先度: 通常` | なし | どれにも当たらない |
|
|
92
|
+
| `- 実施順: 最後` | なし | 触るファイルが事前に読めない広域 upgrade など、列の末尾でまとめて走らせたい作業。緊急・高と同居しない |
|
|
93
|
+
| `- 規模見積もり: 約 <N> ファイル / <M> 行(テスト除く)` | なし | epic 以外は必須。目安の判定は `issue:file`(`scripts/issue/size-estimate.ts`) |
|
|
94
|
+
| `- 分割しない理由: <理由>` | なし | 目安を超える見積もりを 1 件のまま起票する(`split-assessment.md` → "The question") |
|
|
95
|
+
|
|
96
|
+
集計・計測(`計測` / `before` / `変更前後`)を Issue コメントに記録する受け入れ条件と実装の見積もりを併せ持つ本文 → 集計・計測を `--route split` の先行 Issue に分け、そのコメントを `## 背景` に引く(`issue:lint` が拒否する。`scripts/issue/aggregation-split.ts`)。
|
|
81
97
|
|
|
82
98
|
優先度の基準(`scripts/issue/issue-priority.ts`)。`kickoff new critical` / `high` と打った優先度があれば本文は判定しない:
|
|
83
99
|
|
|
84
100
|
- A. 割り込み起票の 3 条件のどれか(`wip-cap.md` →「3 条件 — 該当するかは判断ではない」)
|
|
85
|
-
- B. 1 マージあたりの短縮がレーン中央値の 10% 以上
|
|
86
|
-
- C. 同じく 3% 以上 10% 未満
|
|
87
101
|
- D. 人が示した期限や方針がある
|
|
88
102
|
- E. ほかの open Issue 2 件以上の前提(blocked-by)になっている
|
|
89
|
-
-
|
|
103
|
+
- F. `- 原因の損失:` の合計(再発ごとに 1 行足す)が 30 分以上なら高。再発の追記の後は `pnpm josh issue:priority <N>` がラベルを付ける。`- 原因のレーン:` は 1 本のレーンの見積もりなので下限を作らない。同じ優先度の中の並びは `- 原因の損失:` の合計、無ければ `- 原因のレーン:` の分。その次が `## 期待効果` の週あたりの短縮分(`効く率` の週あたりの回数(「2 週間で 10 回」は週 5 回に直す)× `1 回あたりの得`、分)で、どちらかが数値で読めない Issue はその後ろ。% は計算しない。超過調査はそのレーン 1 本の記録から、工程別内訳(`pnpm josh lane:breakdown <N>`)の長い工程の順に、縮められる分の大きい原因を最大 5 件(1 件 1 分以上)起票する(`scripts/lane/lane-overrun-prompt.ts`)
|
|
104
|
+
- H. 信用できない入力が検証 gate・ガード・権限を迂回する経路の指摘。レビューの範囲外の残りを含む(高)
|
|
105
|
+
- I. 実際の Issue を park(`run:stalled`)させた、またはランを止めた run 機構の不具合(高)
|
|
106
|
+
- 下限・拒否・宣言が無いときのラベルは `issue:file` が出す(`scripts/issue/issue-priority.ts`)
|
|
107
|
+
- `- 目的: 時間短縮` の Issue は `## 期待効果` の 4 行を書く。短縮の % は求めず、% による拒否も下限も無い
|
|
90
108
|
- 根拠の無い `緊急` / `高` も `issue:file` が拒否する
|
|
91
109
|
|
|
92
110
|
- **持ち主の意図と違う動きは、コード・コメント・テストに書かれた設計どおりでも `- 種別: 不具合` とする。** 例: コメントとテストに固定されたまま意図より広く働く自動付与、文書だけでも意図と違う分類を生む基準
|
|
@@ -94,6 +112,7 @@
|
|
|
94
112
|
- `bugfix`(PR のリリース分類)を Issue の `bug` の代わりにしない。`enhancement` と `breaking-change` の両方を持つ Issue の PR は `breaking-change` にする
|
|
95
113
|
- `## 発火点` の名前は `prompts/collaboration-workflow/rule-delivery.md` の配送表と突き合わされる
|
|
96
114
|
- `## ベースライン` の測定コマンドは、マージ後に `pnpm josh measure:rerun <N>` が再実行して before / after を印字する(作者が `OWNER` / `MEMBER` / `COLLABORATOR` の Issue に限る)
|
|
115
|
+
- `- 計測宣言:` は `backlog:drive` がレーンを起こす前に実行し、基準内なら閉じる(`scripts/backlog/backlog-measure-close.ts`)
|
|
97
116
|
- 公開しないと利用側が使えない変更には `--release` を付ける(既存 Issue は `pnpm josh issue:release <N>`、`docs/josh-commands-backlog.md` → `josh issue:release`)
|
|
98
117
|
|
|
99
118
|
### 起票元へのバックリンク(`## Origin` / `## Upstream issues`)
|
|
@@ -4,7 +4,9 @@ headless のレーン子とレビューセッションは、`CLAUDE.md` を読
|
|
|
4
4
|
|
|
5
5
|
- 起動プロンプトがそのまま明示の起動。応答する人はいないので、確認は求めない。
|
|
6
6
|
- `CLAUDE.md` を開き直さない。ここに無い規則は、対話セッションでしか効かない。
|
|
7
|
-
-
|
|
7
|
+
- Web の情報が要る作業 → レーン子は調べる内容を書いて park(`.claude/skills/workflow-commands/backlogrun-park.md` → "park and continue")、レビューは所見に書く。WebFetch / WebSearch は起動されない(`scripts/agent/claude-agent-argv.ts` → `LAUNCHED_TOOLS`)。
|
|
8
|
+
- 起動時のハーネスの指示「make small, mechanical file changes with sed, heredocs, or short scripts」→ ここでは上書き: 既存ファイルの変更は `prompts/collaboration-workflow/file-edits.md` に従う(本文を載せる形は `file-body` 行が拒否する)。
|
|
9
|
+
- 下の `pnpm josh gate` は、レーン子では `josh ship` が回す(`.claude/skills/workflow-commands/chain-rule.md` → "A lane child")。
|
|
8
10
|
|
|
9
11
|
## Communication
|
|
10
12
|
|
|
@@ -20,7 +20,8 @@
|
|
|
20
20
|
|
|
21
21
|
PR の効果を測る後続 Issue を起票するとき:
|
|
22
22
|
|
|
23
|
-
- 開始条件は日数でなく標本数で書く: `## 背景` に `- 実施可能条件: #<PR> のマージ後 <K> マージ`(`issue-template.md`)。`#<PR>` は元の PR の番号で、Issue の番号は `issue:file` が refuse する。
|
|
23
|
+
- 開始条件は日数でなく標本数で書く: `## 背景` に `- 実施可能条件: #<PR> のマージ後 <K> マージ`(`issue-template.md`)。`#<PR>` は元の PR の番号で、Issue の番号は `issue:file` が refuse する。元の PR がまだ無い(レーンが `josh ship` の前に起票する)→ `- 実施可能条件: #<Issue> を閉じる PR のマージ後 <K> マージ` と書く。`#<Issue>` を閉じたマージ済み PR から数える。`- 計測宣言:` のある Issue と、見積もりが 0 ファイルで受け入れ条件が `#<N>` の後・以降か記録(`lane:stats` 等)を読む Issue に条件が無いときも、`issue:file` が refuse する。
|
|
24
|
+
- 判定は既定で `## 背景` の `- 計測宣言:` に書く(`issue-template.md`)。`lane:stats` の表の 1 セル → `pnpm josh lane:value cell`(`docs/josh-commands-run.md` → "`josh lane:value`")。1 コマンドで出せない値 → `- 計測宣言なし: <理由>`。どちらも無ければ `issue:file` が refuse する。
|
|
24
25
|
- K は測る値の種類で決める:
|
|
25
26
|
- 事象の回数の率(停止・再利用など): 変更前の率で 10 件以上見込める最小のマージ数(K ≥ 10 ÷ 変更前の率)。変更前の標本数を上限の目安にする。
|
|
26
27
|
- 連続値の平均・差(所要時間など): 5〜10。
|
|
@@ -29,6 +30,12 @@ PR の効果を測る後続 Issue を起票するとき:
|
|
|
29
30
|
|
|
30
31
|
計測を記録し終えた → `pnpm josh issue:measured <N> --evidence-file <path>`。`.claude/skills/workflow-commands/issue-comments.md` →「A measurement-only Issue」。
|
|
31
32
|
|
|
33
|
+
## 期待効果に届かなかったとき
|
|
34
|
+
|
|
35
|
+
- 計測が期待効果に届かなかった → `pnpm josh issue:measured <N> --unmet --evidence-file <path>`。
|
|
36
|
+
- 届かなかった機構の撤去候補を起票する → `pnpm josh effect:audit --draft <元 Issue>`(元 Issue が 30 日より前に閉じたときは `--days <N>` を足す)、表示された `issue:file` の行で起票する(重複は scout が止める)。
|
|
37
|
+
- 時間短縮 Issue の効果を一覧する → `pnpm josh effect:audit [--days <N>]`。
|
|
38
|
+
|
|
32
39
|
## 手元で再実行してよいとき
|
|
33
40
|
|
|
34
41
|
記録で答えられない問い(記録の無い変更前後の比較など)に限る。
|