@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
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { markdown_shape } from '#scripts/report/markdown-shape'
|
|
2
|
+
import { review_lint_findings } from './review-lint-findings'
|
|
3
|
+
import { review_lint_sections, type ReviewSection } from './review-lint-sections'
|
|
4
|
+
|
|
5
|
+
// `prompts/review-rubric.md` states every requirement of a review's output in a form a machine can
|
|
6
|
+
// read, yet only the next round or a person ever checked one. This checks them: the heading set and
|
|
7
|
+
// its order, a verdict under every heading, the trace behind a `No issues` on category 1, the 2–3
|
|
8
|
+
// assumptions, the Confidence floor's banned answers, and each finding's citation and severity. Whether
|
|
9
|
+
// a finding is right stays the judgement half.
|
|
10
|
+
|
|
11
|
+
const BUG_RISKS = 'Bug risks & logic errors'
|
|
12
|
+
const ASSUMPTIONS = 'Assumptions audit'
|
|
13
|
+
const CONFIDENCE_FLOOR = 'Confidence floor'
|
|
14
|
+
const SUMMARY = 'Summary'
|
|
15
|
+
const FIRST_ROUND_FINDINGS = 'First-round findings'
|
|
16
|
+
const NEW_FINDINGS = 'New findings in the fix delta'
|
|
17
|
+
const SECOND_ROUND = 2
|
|
18
|
+
|
|
19
|
+
const SECURITY = 'Security'
|
|
20
|
+
const PERFORMANCE = 'Performance'
|
|
21
|
+
const I18N = 'i18n'
|
|
22
|
+
const COMMENTS = 'Comments & content'
|
|
23
|
+
|
|
24
|
+
// "Review categories" in its order; the first seven carry findings, the last two their own shape.
|
|
25
|
+
const FINDING_CATEGORIES = [
|
|
26
|
+
BUG_RISKS,
|
|
27
|
+
SECURITY,
|
|
28
|
+
PERFORMANCE,
|
|
29
|
+
'Project conventions',
|
|
30
|
+
I18N,
|
|
31
|
+
'Tests',
|
|
32
|
+
COMMENTS,
|
|
33
|
+
]
|
|
34
|
+
const FINDING_CATEGORY_SET: ReadonlySet<string> = new Set(FINDING_CATEGORIES)
|
|
35
|
+
const ROUND_ONE_HEADINGS = [...FINDING_CATEGORIES, ASSUMPTIONS, CONFIDENCE_FLOOR, SUMMARY]
|
|
36
|
+
// The categories the rubric lets answer a bare `No issues` when nothing was there to check.
|
|
37
|
+
const BARE_NO_ISSUES_ALLOWED: ReadonlySet<string> = new Set([SECURITY, PERFORMANCE, I18N, COMMENTS])
|
|
38
|
+
// Round 2 reads category 1 and the categories its fix delta touches, so no category heading is
|
|
39
|
+
// required there: its template is these three headings alone.
|
|
40
|
+
const ROUND_TWO_HEADINGS = [FIRST_ROUND_FINDINGS, NEW_FINDINGS, SUMMARY]
|
|
41
|
+
const BARE_NO_ISSUES = /^No issues\.?$/u
|
|
42
|
+
const NO_ISSUES = /\bNo issues\b/u
|
|
43
|
+
const TRACE = /Traced .+ → .+ — (?:confirmed|flagged) because \S/u
|
|
44
|
+
const MIN_ASSUMPTIONS = 2
|
|
45
|
+
const MAX_ASSUMPTIONS = 3
|
|
46
|
+
// The banned answers stand alone; a sentence that only opens with "Nothing" names something.
|
|
47
|
+
const BANNED_FLOOR = /^(?:Nothing|No concerns)\.?$/iu
|
|
48
|
+
const TARGET_MISMATCH = 'REVIEW TARGET MISMATCH'
|
|
49
|
+
const RUBRIC = 'prompts/review-rubric.md'
|
|
50
|
+
const ROUND_ONE_SECTION = 'Review output format'
|
|
51
|
+
const ROUND_TWO_SECTION = 'The second round is a verification pass, not a second full review'
|
|
52
|
+
|
|
53
|
+
function section_named(
|
|
54
|
+
sections: ReadonlyArray<ReviewSection>,
|
|
55
|
+
heading: string,
|
|
56
|
+
): ReviewSection | undefined {
|
|
57
|
+
return sections.find((section) => section.heading === heading)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function missing_heading_violations(
|
|
61
|
+
headings: ReadonlyArray<string>,
|
|
62
|
+
expected: ReadonlyArray<string>,
|
|
63
|
+
): ReadonlyArray<string> {
|
|
64
|
+
return expected
|
|
65
|
+
.filter((heading) => !headings.includes(heading))
|
|
66
|
+
.map((heading) => `✖ missing heading: ### ${heading}`)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function unexpected_heading_violations(
|
|
70
|
+
headings: ReadonlyArray<string>,
|
|
71
|
+
expected: ReadonlyArray<string>,
|
|
72
|
+
): ReadonlyArray<string> {
|
|
73
|
+
return headings
|
|
74
|
+
.filter((heading) => !expected.includes(heading))
|
|
75
|
+
.map((heading) => `✖ unexpected heading: ### ${heading}`)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// The known headings, as written, must read as the expected list with the missing ones left out — a
|
|
79
|
+
// swap or a repeat breaks that, a missing heading alone does not.
|
|
80
|
+
function order_violation(
|
|
81
|
+
headings: ReadonlyArray<string>,
|
|
82
|
+
expected: ReadonlyArray<string>,
|
|
83
|
+
): ReadonlyArray<string> {
|
|
84
|
+
const written = headings.filter((heading) => expected.includes(heading)).join(' → ')
|
|
85
|
+
if (written === expected.filter((heading) => headings.includes(heading)).join(' → ')) return []
|
|
86
|
+
|
|
87
|
+
return [`✖ headings out of order or repeated — expected: ${expected.join(' → ')}`]
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function heading_violations(
|
|
91
|
+
sections: ReadonlyArray<ReviewSection>,
|
|
92
|
+
expected: ReadonlyArray<string>,
|
|
93
|
+
): ReadonlyArray<string> {
|
|
94
|
+
const headings = sections.map((section) => section.heading)
|
|
95
|
+
|
|
96
|
+
return [
|
|
97
|
+
...missing_heading_violations(headings, expected),
|
|
98
|
+
...unexpected_heading_violations(headings, expected),
|
|
99
|
+
...order_violation(headings, expected),
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function verdict_violations(sections: ReadonlyArray<ReviewSection>): ReadonlyArray<string> {
|
|
104
|
+
return sections
|
|
105
|
+
.filter((section) => !review_lint_sections.has_content(section))
|
|
106
|
+
.map((section) => `✖ no verdict under ### ${section.heading}`)
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
function bare_no_issues_violations(sections: ReadonlyArray<ReviewSection>): ReadonlyArray<string> {
|
|
110
|
+
return sections
|
|
111
|
+
.filter((section) => FINDING_CATEGORY_SET.has(section.heading))
|
|
112
|
+
.filter((section) => !BARE_NO_ISSUES_ALLOWED.has(section.heading))
|
|
113
|
+
.filter((section) => BARE_NO_ISSUES.test(review_lint_sections.body_text(section)))
|
|
114
|
+
.map((section) => `✖ bare "No issues" under ### ${section.heading} — say what was checked`)
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function trace_violation(sections: ReadonlyArray<ReviewSection>): ReadonlyArray<string> {
|
|
118
|
+
const section = section_named(sections, BUG_RISKS)
|
|
119
|
+
if (section === undefined || review_lint_findings.finding_blocks(section).length > 0) return []
|
|
120
|
+
|
|
121
|
+
const body = review_lint_sections.body_text(section)
|
|
122
|
+
if (!NO_ISSUES.test(body) || TRACE.test(body)) return []
|
|
123
|
+
|
|
124
|
+
return [
|
|
125
|
+
`✖ "No issues" under ### ${BUG_RISKS} without a trace — Traced <input> → <result> — confirmed/flagged because <reason>`,
|
|
126
|
+
]
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function assumptions_violation(sections: ReadonlyArray<ReviewSection>): ReadonlyArray<string> {
|
|
130
|
+
const section = section_named(sections, ASSUMPTIONS)
|
|
131
|
+
if (section === undefined) return []
|
|
132
|
+
|
|
133
|
+
const count = review_lint_sections.item_blocks(section.lines).length
|
|
134
|
+
if (count >= MIN_ASSUMPTIONS && count <= MAX_ASSUMPTIONS) return []
|
|
135
|
+
|
|
136
|
+
return [
|
|
137
|
+
`✖ ### ${ASSUMPTIONS} lists ${String(count)} assumptions — it needs ${String(MIN_ASSUMPTIONS)}–${String(MAX_ASSUMPTIONS)}`,
|
|
138
|
+
]
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function confidence_floor_violation(sections: ReadonlyArray<ReviewSection>): ReadonlyArray<string> {
|
|
142
|
+
const section = section_named(sections, CONFIDENCE_FLOOR)
|
|
143
|
+
|
|
144
|
+
if (section === undefined || !BANNED_FLOOR.test(review_lint_sections.body_text(section))) {
|
|
145
|
+
return []
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
return [`✖ ### ${CONFIDENCE_FLOOR} answers "Nothing" or "No concerns" — name one concrete thing`]
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
function category_finding_violations(
|
|
152
|
+
sections: ReadonlyArray<ReviewSection>,
|
|
153
|
+
): ReadonlyArray<string> {
|
|
154
|
+
return sections
|
|
155
|
+
.filter((section) => FINDING_CATEGORY_SET.has(section.heading))
|
|
156
|
+
.flatMap((section) => review_lint_findings.finding_violations(section))
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
function round_one_violations(sections: ReadonlyArray<ReviewSection>): ReadonlyArray<string> {
|
|
160
|
+
return [
|
|
161
|
+
...heading_violations(sections, ROUND_ONE_HEADINGS),
|
|
162
|
+
...verdict_violations(sections),
|
|
163
|
+
...bare_no_issues_violations(sections),
|
|
164
|
+
...trace_violation(sections),
|
|
165
|
+
...assumptions_violation(sections),
|
|
166
|
+
...confidence_floor_violation(sections),
|
|
167
|
+
...category_finding_violations(sections),
|
|
168
|
+
]
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
function delta_violations(sections: ReadonlyArray<ReviewSection>): ReadonlyArray<string> {
|
|
172
|
+
const first_round = section_named(sections, FIRST_ROUND_FINDINGS)
|
|
173
|
+
const delta = section_named(sections, NEW_FINDINGS)
|
|
174
|
+
|
|
175
|
+
return [
|
|
176
|
+
...(first_round === undefined ? [] : review_lint_findings.first_round_violations(first_round)),
|
|
177
|
+
...(delta === undefined ? [] : review_lint_findings.finding_violations(delta)),
|
|
178
|
+
]
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
function round_two_violations(sections: ReadonlyArray<ReviewSection>): ReadonlyArray<string> {
|
|
182
|
+
return [
|
|
183
|
+
...heading_violations(sections, ROUND_TWO_HEADINGS),
|
|
184
|
+
...verdict_violations(sections),
|
|
185
|
+
...delta_violations(sections),
|
|
186
|
+
]
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// The stop condition's reply is the phrase alone: a heading beside it is a verdict it must not carry.
|
|
190
|
+
function mismatch_violations(sections: ReadonlyArray<ReviewSection>): ReadonlyArray<string> {
|
|
191
|
+
if (sections.length === 0) return []
|
|
192
|
+
|
|
193
|
+
return [`✖ a ${TARGET_MISMATCH} reply carries no findings and no verdict — drop the headings`]
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// Every violation, in a fixed order; an empty array is a clean review.
|
|
197
|
+
function lint_review(review: string, round: number): ReadonlyArray<string> {
|
|
198
|
+
const sections = review_lint_sections.parse_sections(review)
|
|
199
|
+
|
|
200
|
+
if (markdown_shape.first_content_line(review).includes(TARGET_MISMATCH)) {
|
|
201
|
+
return mismatch_violations(sections)
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
const shape = round === SECOND_ROUND ? round_two_violations : round_one_violations
|
|
205
|
+
|
|
206
|
+
return [...markdown_shape.fence_violation(review, 'review'), ...shape(sections)]
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// The violations followed by one line naming the rubric section that shapes the round's output; a
|
|
210
|
+
// clean review stays empty, so `ok` is still the only output of a pass.
|
|
211
|
+
function with_reference(violations: ReadonlyArray<string>, round: number): ReadonlyArray<string> {
|
|
212
|
+
if (violations.length === 0) return violations
|
|
213
|
+
|
|
214
|
+
const section = round === SECOND_ROUND ? ROUND_TWO_SECTION : ROUND_ONE_SECTION
|
|
215
|
+
|
|
216
|
+
return [...violations, `→ the format: ${RUBRIC} → "${section}"`]
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
const review_lint = { lint_review, with_reference }
|
|
220
|
+
|
|
221
|
+
export { review_lint }
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { agent_role_profile } from '#scripts/agent/agent-role-profile'
|
|
2
|
+
import type { StopFinding } from '#scripts/run/ship/run-ship-review'
|
|
3
|
+
import { review_stop_log, type StopLine } from './review-stop-log'
|
|
4
|
+
|
|
5
|
+
// The findings earlier review stops of the same lane recorded, carried into the fix of the next stop and
|
|
6
|
+
// into the next review (joshuafolkken/kit#4780): a fix that saw only the latest finding broke the
|
|
7
|
+
// constraint an earlier one set on the same line, and came back as a new Medium round after round.
|
|
8
|
+
//
|
|
9
|
+
// **The durable stop log is the source** — the one record that keeps a finding's `<file>[:<line>]` and
|
|
10
|
+
// its reason. A ship round that passed on fixes made in place is in it too, marked fixed, and so is an
|
|
11
|
+
// agent's own `review:record` round whose findings carry their reason (joshuafolkken/kit#4817). The
|
|
12
|
+
// ledger keeps only the file, so a finding recorded without a reason is not carried.
|
|
13
|
+
|
|
14
|
+
const PRIOR_LIMIT = 5
|
|
15
|
+
// Each entry is bounded, so five of them never push a reviewer prompt past `MAX_VALUE_LENGTH`.
|
|
16
|
+
const ENTRY_LENGTH_LIMIT = 400
|
|
17
|
+
const LINE_SUFFIX = /:\d.*$/u
|
|
18
|
+
const KEY_SEPARATOR = ' — '
|
|
19
|
+
const LINE_BREAKS = /[\n\r]+/gu
|
|
20
|
+
|
|
21
|
+
function file_of(location: string): string {
|
|
22
|
+
return location.replace(LINE_SUFFIX, '')
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function key_of(finding: Pick<StopFinding, 'location' | 'sentence'>): string {
|
|
26
|
+
return `${finding.location}${KEY_SEPARATOR}${finding.sentence}`
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// An entry is one line of a prompt, so it never carries a line break or a control character
|
|
30
|
+
// `is_safe_prompt` refuses. Its parenthetical holds no `; `, the separator the reviewer prompt joins
|
|
31
|
+
// entries with.
|
|
32
|
+
function entry_text(line: StopLine): string {
|
|
33
|
+
const disposition = line.fixed === true ? 'fixed in place' : 'stopped'
|
|
34
|
+
const text = `${key_of(line)} (${line.kind}, ${disposition} in the ${line.stage} stage)`
|
|
35
|
+
|
|
36
|
+
return agent_role_profile
|
|
37
|
+
.printable(text.replaceAll(LINE_BREAKS, ' '))
|
|
38
|
+
.slice(0, ENTRY_LENGTH_LIMIT)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// The latest findings of the lane's issue that `is_kept` admits, oldest first.
|
|
42
|
+
function latest(
|
|
43
|
+
issue: string,
|
|
44
|
+
is_kept: (line: StopLine) => boolean,
|
|
45
|
+
log_path?: string,
|
|
46
|
+
): ReadonlyArray<string> {
|
|
47
|
+
return review_stop_log
|
|
48
|
+
.read(log_path)
|
|
49
|
+
.filter((line) => String(line.issue) === issue && is_kept(line))
|
|
50
|
+
.slice(-PRIOR_LIMIT)
|
|
51
|
+
.map((line) => entry_text(line))
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// The earlier findings on a file the current stop cites, the current stop's own lines left out — the
|
|
55
|
+
// stop is recorded before it is handed back.
|
|
56
|
+
function on_files(
|
|
57
|
+
issue: string,
|
|
58
|
+
current: ReadonlyArray<StopFinding>,
|
|
59
|
+
log_path?: string,
|
|
60
|
+
): ReadonlyArray<string> {
|
|
61
|
+
const files = new Set(current.map((finding) => file_of(finding.location)))
|
|
62
|
+
const own = new Set(current.map((finding) => key_of(finding)))
|
|
63
|
+
|
|
64
|
+
return latest(
|
|
65
|
+
issue,
|
|
66
|
+
(line) => files.has(file_of(line.location)) && !own.has(key_of(line)),
|
|
67
|
+
log_path,
|
|
68
|
+
)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// The lines the stop context prints after the changed files; none when no earlier finding applies.
|
|
72
|
+
function fix_lines(entries: ReadonlyArray<string> | undefined): ReadonlyArray<string> {
|
|
73
|
+
if (entries === undefined || entries.length === 0) return []
|
|
74
|
+
|
|
75
|
+
return [
|
|
76
|
+
'Earlier review findings on the same files in this lane — confirm the fix still meets each before shipping again:',
|
|
77
|
+
...entries.map((entry) => `- ${entry}`),
|
|
78
|
+
]
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// One sentence for a reviewer prompt, which stays one line; none when the lane has no earlier stop.
|
|
82
|
+
function prompt_clauses(issue: string, log_path?: string): ReadonlyArray<string> {
|
|
83
|
+
const entries = latest(issue, () => true, log_path)
|
|
84
|
+
|
|
85
|
+
if (entries.length === 0) return []
|
|
86
|
+
|
|
87
|
+
return [
|
|
88
|
+
`Earlier review rounds in this lane recorded these findings: ${entries.join('; ')}.`,
|
|
89
|
+
'Check that the change still meets each of them, and report a change that breaks one as a finding.',
|
|
90
|
+
]
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const review_prior_findings = {
|
|
94
|
+
ENTRY_LENGTH_LIMIT,
|
|
95
|
+
PRIOR_LIMIT,
|
|
96
|
+
fix_lines,
|
|
97
|
+
latest,
|
|
98
|
+
on_files,
|
|
99
|
+
prompt_clauses,
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export { review_prior_findings }
|
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
// returned, spelled the way a reader writes it: a direct export as itself, a member of an exported
|
|
7
7
|
// namespace object (`export { issue_merged }`) as `issue_merged.read_merged`. The namespace object
|
|
8
8
|
// itself is skipped — a member added to it changes none of its readers.
|
|
9
|
+
//
|
|
10
|
+
// `declarations` and `exported_names` are also read by `prose-stale-scan.ts` over a diff's removed lines.
|
|
9
11
|
|
|
10
12
|
const HUNK_HEADER = /^@@ -\d+(?:,\d+)? \+(?<start>\d+)(?:,(?<count>\d+))? @@/u
|
|
11
13
|
const DECLARATION =
|
|
@@ -157,7 +159,7 @@ function edited(source: string, diff: string): Array<Edited> {
|
|
|
157
159
|
return found_targets.filter((entry): entry is Edited => entry.target !== undefined)
|
|
158
160
|
}
|
|
159
161
|
|
|
160
|
-
const review_readers_scan = { changed_lines, edited }
|
|
162
|
+
const review_readers_scan = { changed_lines, declarations, edited, exported_names }
|
|
161
163
|
|
|
162
|
-
export type { Edited }
|
|
164
|
+
export type { Declaration, Edited }
|
|
163
165
|
export { review_readers_scan }
|