@joshuafolkken/kit 1.1240.0 → 1.1373.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/investigator.md +1 -0
- package/.claude/settings.json +4 -0
- package/.claude/skills/dependency-update/SKILL.md +5 -3
- package/.claude/skills/epic-commands/SKILL.md +82 -113
- package/.claude/skills/epic-commands/epic-bundle.md +38 -63
- package/.claude/skills/epic-commands/execution-waves.md +30 -51
- package/.claude/skills/verify-ui/SKILL.md +13 -20
- package/.claude/skills/workflow-commands/SKILL.md +10 -10
- package/.claude/skills/workflow-commands/background-commands.md +4 -4
- package/.claude/skills/workflow-commands/backlogrun-child.md +30 -105
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +29 -0
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +45 -131
- package/.claude/skills/workflow-commands/backlogrun-park.md +36 -53
- package/.claude/skills/workflow-commands/backlogrun-progress.md +81 -331
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +29 -83
- package/.claude/skills/workflow-commands/backlogrun-steps.md +105 -424
- package/.claude/skills/workflow-commands/backlogrun.md +52 -61
- package/.claude/skills/workflow-commands/chain-rule.md +36 -40
- package/.claude/skills/workflow-commands/entry-sequence.md +6 -6
- package/.claude/skills/workflow-commands/followup.md +19 -20
- package/.claude/skills/workflow-commands/fullrun-steps.md +23 -27
- package/.claude/skills/workflow-commands/fullrun.md +10 -10
- package/.claude/skills/workflow-commands/halfrun.md +9 -8
- package/.claude/skills/workflow-commands/into-target.md +12 -18
- package/.claude/skills/workflow-commands/issue-comments.md +11 -26
- package/.claude/skills/workflow-commands/kickoff.md +26 -16
- package/.claude/skills/workflow-commands/latest-gate.md +17 -28
- package/.claude/skills/workflow-commands/needs-human-review.md +13 -24
- package/.claude/skills/workflow-commands/observation-filing.md +37 -28
- package/.claude/skills/workflow-commands/observation-ledger.md +48 -38
- package/.claude/skills/workflow-commands/pre-gate-cut.md +9 -9
- package/.claude/skills/workflow-commands/prerequisite.md +23 -15
- package/.claude/skills/workflow-commands/progress-watcher.md +17 -11
- package/.claude/skills/workflow-commands/prrun.md +3 -3
- package/.claude/skills/workflow-commands/retrospective.md +13 -18
- package/.claude/skills/workflow-commands/split-assessment.md +6 -4
- package/.claude/skills/workflow-commands/target-repository.md +25 -28
- package/.claude/skills/workflow-commands/working-tree-hold.md +11 -17
- package/.gitattributes +2 -1
- package/.github/workflows/ci.yml +14 -0
- package/.vscode/tasks.json +14 -0
- package/CLAUDE.md +10 -61
- package/README.md +23 -66
- package/SECURITY.md +1 -1
- package/dist/CLAUDE.md +10 -61
- package/dist/commands/document-section-cli.js +43 -11
- package/dist/config-merge/index.js +11 -2
- package/dist/hooks/audit-provision.js +2 -2
- package/dist/hooks/batch-guard.js +7 -7
- package/dist/hooks/{chunk-KHGB5S3Y.js → chunk-7UBFU3CL.js} +18 -20
- package/dist/hooks/{chunk-ZQGD4GBY.js → chunk-7WKYHEGU.js} +8 -44
- package/dist/hooks/{chunk-4TZVB44A.js → chunk-AKGCP4LX.js} +285 -363
- package/dist/hooks/{chunk-QVSWU24O.js → chunk-BZMPVFDY.js} +7 -5
- package/dist/hooks/{chunk-5VNDSNG3.js → chunk-FZ6FUSBM.js} +1 -1
- package/dist/hooks/{chunk-GPTFMK5E.js → chunk-GG72ANKI.js} +1 -1
- package/dist/hooks/{chunk-XZYKEM6J.js → chunk-JCRDBQXB.js} +13 -11
- package/dist/hooks/{chunk-F3ELQ2AF.js → chunk-JGW24KKM.js} +4 -4
- package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
- package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
- package/dist/hooks/{chunk-WK2XSHSI.js → chunk-SLSFIWTX.js} +550 -875
- package/dist/hooks/chunk-UTHMB4O2.js +1590 -0
- package/dist/hooks/{chunk-KRBERBBI.js → chunk-V4TKZHER.js} +4 -4
- package/dist/hooks/chunk-YLBBSSTF.js +3705 -0
- package/dist/hooks/chunk-Z5TMJIPW.js +45 -0
- package/dist/hooks/codex-hook-adapter.js +26 -21
- package/dist/hooks/duplicate-read-guard.js +8 -8
- package/dist/hooks/format-edited.js +4 -4
- package/dist/hooks/inputs.json +195 -181
- package/dist/hooks/investigation-guard.js +8 -8
- package/dist/hooks/pretool-guard.js +15 -15
- package/dist/hooks/session-lang.js +406 -8
- package/dist/hooks/stop-guard.js +122 -187
- package/dist/josh.js +282 -95
- package/dist/version/index.js +15 -13
- package/eslint/base.js +43 -5
- package/eslint/rules/english-only-prose.js +3 -3
- package/eslint/rules/import.js +12 -0
- package/eslint/rules/namespace-object-export.js +2 -2
- package/package.json +17 -11
- package/pnpm-workspace.yaml +2 -4
- package/prompts/coding-standards.md +14 -48
- package/prompts/collaboration-workflow/file-edits.md +1 -1
- package/prompts/collaboration-workflow/issue-citation.md +1 -1
- package/prompts/collaboration-workflow/issue-template.md +3 -10
- package/prompts/collaboration-workflow/operating-rules.md +7 -8
- package/prompts/collaboration-workflow/output-bounds.md +1 -1
- package/prompts/collaboration-workflow/overview.md +1 -1
- package/prompts/collaboration-workflow/plan-comment.md +2 -1
- package/prompts/collaboration-workflow/principles.md +21 -3
- package/prompts/collaboration-workflow/report-format.md +16 -29
- package/prompts/collaboration-workflow/residency.md +1 -1
- package/prompts/collaboration-workflow/rule-delivery.md +7 -95
- package/prompts/collaboration-workflow/shell-body.md +3 -23
- package/prompts/collaboration-workflow/turn-batching.md +4 -13
- package/prompts/collaboration-workflow/wip-cap.md +5 -11
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +3 -22
- package/prompts/review.md +15 -38
- package/prompts/testing-guide.md +2 -4
- package/scripts/adopt/adopt-logic.ts +5 -5
- package/scripts/adopt/adopt-toolkits.ts +4 -5
- package/scripts/adopt/adopt.ts +2 -3
- package/scripts/agent/agent-argv.ts +7 -7
- package/scripts/agent/agent-diagnostics.ts +2 -2
- package/scripts/agent/agent-exit-record.ts +1 -1
- package/scripts/agent/agent-headless.ts +1 -1
- package/scripts/agent/agent-launch-environment.ts +6 -1
- package/scripts/agent/agent-role-profile.ts +49 -22
- package/scripts/agent/agent-session-role.ts +32 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/agent/claude-agent-argv.ts +4 -4
- package/scripts/agent/claude-result-event.ts +4 -4
- package/scripts/agent/codex-hooks.ts +2 -2
- package/scripts/agent/interactive-ask.ts +3 -6
- package/scripts/auto-ok/auto-ok-cli.ts +46 -60
- package/scripts/backlog/backlog-arrival-added.ts +34 -0
- package/scripts/backlog/backlog-arrival.ts +54 -17
- package/scripts/backlog/backlog-budget-cli.ts +34 -6
- package/scripts/backlog/backlog-budget.ts +17 -24
- package/scripts/backlog/backlog-defect-priority.ts +1 -1
- package/scripts/backlog/backlog-drive-args.ts +5 -4
- package/scripts/backlog/backlog-drive-cli.ts +14 -10
- package/scripts/backlog/backlog-drive-epic.ts +85 -0
- package/scripts/backlog/backlog-drive-launch.ts +1 -1
- package/scripts/backlog/backlog-drive-named-offer.ts +60 -9
- package/scripts/backlog/backlog-drive-named.ts +39 -9
- package/scripts/backlog/backlog-drive-offer-argv.ts +1 -1
- package/scripts/backlog/backlog-drive-restore.ts +1 -1
- package/scripts/backlog/backlog-drive-retrospective.ts +2 -2
- package/scripts/backlog/backlog-drive.ts +43 -28
- package/scripts/backlog/backlog-idle.ts +88 -0
- package/scripts/backlog/backlog-named.ts +11 -15
- package/scripts/backlog/backlog-next.ts +26 -30
- package/scripts/backlog/backlog-offer-cli.ts +28 -23
- package/scripts/backlog/backlog-offer.ts +7 -7
- package/scripts/backlog/backlog-overlap.ts +178 -0
- package/scripts/backlog/backlog-plan-cli.ts +14 -90
- package/scripts/backlog/backlog-plan-read.ts +111 -0
- package/scripts/backlog/backlog-plan.ts +11 -10
- package/scripts/backlog/backlog-pool.ts +13 -14
- package/scripts/backlog/backlog-rank.ts +11 -11
- package/scripts/backlog/backlog-ready.ts +15 -10
- package/scripts/backlog/backlog-scope.ts +14 -15
- package/scripts/backlog/backlog-stalled-cli.ts +2 -2
- package/scripts/backlog/backlog-stalled-detect.ts +4 -4
- package/scripts/backlog/backlog-stalled.ts +5 -6
- package/scripts/backlog/backlog-waves.ts +4 -4
- package/scripts/backlog/backlogrun-args.ts +74 -0
- package/scripts/backlog/backlogrun-cli.ts +113 -0
- package/scripts/backlog/backlogrun-launch.ts +178 -0
- package/scripts/behavior/behavior-assertion.ts +6 -8
- package/scripts/behavior/behavior-cli.ts +1 -1
- package/scripts/behavior/behavior-rules.ts +3 -3
- package/scripts/build/build-claude-md.ts +4 -4
- package/scripts/build/build-codex-hooks.ts +2 -2
- package/scripts/build/build-commands.ts +1 -1
- package/scripts/build/build-hooks.ts +5 -5
- package/scripts/build/build.ts +1 -1
- package/scripts/build/hook-bundle-stamp.ts +109 -7
- package/scripts/build/local-bin.ts +2 -2
- package/scripts/cases/cases-cli.ts +1 -1
- package/scripts/cases/cases-logic.ts +2 -2
- package/scripts/ci/composite-actions.ts +1 -2
- package/scripts/ci/pr-classification.ts +2 -2
- package/scripts/claude/workflow-destination.ts +1 -1
- package/scripts/clone/clone-aggregate.ts +1 -1
- package/scripts/clone/clone-fingerprint.ts +1 -1
- package/scripts/clone/clone-scan-cli.ts +1 -1
- package/scripts/clone/clone-scan.ts +1 -1
- package/scripts/config-merge/index.ts +1 -1
- package/scripts/config-merge/json-format.ts +1 -3
- package/scripts/config-merge/patch-json-array.ts +90 -0
- package/scripts/config-merge/patch-json-key.ts +6 -3
- package/scripts/config-merge/patch-json-list.ts +1 -1
- package/scripts/cost-runtime/codex-usage.ts +1 -1
- package/scripts/cost-runtime/context-cut-payback.ts +4 -5
- package/scripts/cost-runtime/context-cut-threshold.ts +4 -6
- package/scripts/cost-runtime/cost-attribute.ts +3 -3
- package/scripts/cost-runtime/cost-blocks.ts +3 -4
- package/scripts/cost-runtime/cost-cli.ts +14 -11
- package/scripts/cost-runtime/cost-corpus.ts +11 -11
- package/scripts/cost-runtime/cost-pricing.ts +4 -4
- package/scripts/cost-runtime/cost-tokens.ts +1 -2
- package/scripts/cost-runtime/cost-transcript.ts +29 -29
- package/scripts/cost-runtime/cost-usage.ts +6 -7
- package/scripts/cost-runtime/cost-verdict.ts +10 -11
- package/scripts/cost-runtime/own-session.ts +1 -1
- package/scripts/cost-runtime/transcript-cwd.ts +2 -2
- package/scripts/delegation/delegation-cli.ts +4 -4
- package/scripts/delegation/delegation-policy.ts +13 -15
- package/scripts/delegation/duplicate-read-guard.ts +9 -10
- package/scripts/delegation/fanout-cli.ts +1 -1
- package/scripts/delegation/fanout.ts +1 -1
- package/scripts/delegation/investigation-guard.ts +18 -22
- package/scripts/delegation/investigation-reads.ts +48 -238
- package/scripts/discovery/repo-discovery.ts +1 -1
- package/scripts/discovery/repo-map-logic.ts +1 -2
- package/scripts/discovery/repo-origin.ts +3 -3
- package/scripts/discovery/repo-party-cli.ts +2 -2
- package/scripts/discovery/repo-party.ts +2 -2
- package/scripts/doctor/doctor-consumer.ts +1 -1
- package/scripts/doctor/doctor-io.ts +6 -7
- package/scripts/doctor/doctor-logic.ts +1 -1
- package/scripts/doctor/doctor-ports.ts +1 -1
- package/scripts/doctor/doctor.ts +8 -9
- package/scripts/document/backlogrun-parent-read-set.ts +5 -6
- package/scripts/document/bash-output-cap.ts +5 -7
- package/scripts/document/capped-print-part.ts +1 -1
- package/scripts/document/capped-print.ts +1 -1
- package/scripts/document/document-byte-budget.ts +33 -64
- package/scripts/document/document-byte-check.ts +4 -4
- package/scripts/document/document-reachability.ts +7 -8
- package/scripts/document/document-read-cli.ts +2 -2
- package/scripts/document/document-scan.ts +30 -5
- package/scripts/document/document-section-cli.ts +6 -8
- package/scripts/document/document-section.ts +8 -12
- package/scripts/document/edit-files-cli.ts +3 -4
- package/scripts/document/entry-read-budget.ts +8 -70
- package/scripts/document/entry-read-set.ts +51 -34
- package/scripts/document/lane-child-read-set.ts +9 -9
- package/scripts/document/read-files-cli.ts +1 -2
- package/scripts/document/read-set-cli.ts +16 -19
- package/scripts/document/read-set-cost.ts +4 -4
- package/scripts/document/read-set-point-of-use.ts +28 -38
- package/scripts/document/read-set-pricing.ts +1 -1
- package/scripts/document/read-set-trim.ts +3 -3
- package/scripts/document/resident-budget.ts +8 -10
- package/scripts/epic/epic-add-body.ts +15 -18
- package/scripts/epic/epic-add-plan.ts +26 -28
- package/scripts/epic/epic-add.ts +32 -25
- package/scripts/epic/epic-audit-checks.ts +27 -37
- package/scripts/epic/epic-audit-cli.ts +21 -22
- package/scripts/epic/epic-audit-orphans.ts +16 -17
- package/scripts/epic/epic-audit-rationale.ts +10 -15
- package/scripts/epic/epic-audit-report.ts +2 -5
- package/scripts/epic/epic-audit.ts +18 -14
- package/scripts/epic/epic-body.ts +10 -10
- package/scripts/epic/epic-bundle-cli.ts +36 -34
- package/scripts/epic/epic-bundle-evidence.ts +5 -5
- package/scripts/epic/epic-bundle-gaps.ts +6 -9
- package/scripts/epic/epic-bundle-poll.ts +1 -1
- package/scripts/epic/epic-bundle-referenced.ts +11 -14
- package/scripts/epic/epic-bundle.ts +19 -20
- package/scripts/epic/epic-busy.ts +44 -21
- package/scripts/epic/epic-candidate-confirm.ts +15 -18
- package/scripts/epic/epic-chains.ts +18 -23
- package/scripts/epic/epic-classify.ts +11 -12
- package/scripts/epic/epic-cli-argv.ts +5 -6
- package/scripts/epic/epic-cli-remove.ts +9 -4
- package/scripts/epic/epic-cli.ts +38 -26
- package/scripts/epic/epic-close-comment.ts +14 -15
- package/scripts/epic/epic-close.ts +25 -29
- package/scripts/epic/epic-cross-repo.ts +18 -21
- package/scripts/epic/epic-decision.ts +14 -18
- package/scripts/epic/epic-fetch.ts +25 -31
- package/scripts/epic/epic-graph.ts +15 -17
- package/scripts/epic/epic-index.ts +14 -16
- package/scripts/epic/epic-issue.ts +9 -11
- package/scripts/epic/epic-label-age.ts +74 -0
- package/scripts/epic/epic-lane-offer.ts +35 -24
- package/scripts/epic/epic-nested.ts +1 -1
- package/scripts/epic/epic-next-read.ts +8 -8
- package/scripts/epic/epic-next-views.ts +12 -12
- package/scripts/epic/epic-next.ts +29 -33
- package/scripts/epic/epic-outside-blocker.ts +11 -10
- package/scripts/epic/epic-parse.ts +22 -24
- package/scripts/epic/epic-promote.ts +3 -2
- package/scripts/epic/epic-rank.ts +1 -1
- package/scripts/epic/epic-read.ts +10 -8
- package/scripts/epic/epic-reconcile.ts +8 -6
- package/scripts/epic/epic-reference.ts +5 -4
- package/scripts/epic/epic-relation-recheck.ts +10 -11
- package/scripts/epic/epic-relations.ts +9 -8
- package/scripts/epic/epic-remove-plan.ts +4 -5
- package/scripts/epic/epic-remove.ts +7 -5
- package/scripts/epic/epic-report.ts +18 -20
- package/scripts/epic/epic-run.ts +6 -5
- package/scripts/epic/epic-sections.ts +2 -2
- package/scripts/epic/epic-shape.ts +3 -3
- package/scripts/epic/epic-solo-stale.ts +3 -2
- package/scripts/epic/epic-solo.ts +8 -8
- package/scripts/epic/epic-triage.ts +5 -4
- package/scripts/epic/epic-validate.ts +8 -7
- package/scripts/epic/epic.ts +5 -5
- package/scripts/exports/unused-members-cli.ts +1 -1
- package/scripts/followup/followup-issue-number.ts +1 -2
- package/scripts/followup/git-followup-cleanup.ts +6 -7
- package/scripts/followup/git-followup-finish.ts +11 -13
- package/scripts/followup/git-followup-flush.ts +11 -7
- package/scripts/followup/git-followup-issue-close.ts +16 -13
- package/scripts/followup/git-followup-label.ts +9 -6
- package/scripts/followup/git-followup-merged.ts +1 -1
- package/scripts/followup/git-followup-pending.ts +7 -9
- package/scripts/followup/git-followup-stages.ts +28 -17
- package/scripts/followup/git-followup-workflow.ts +19 -21
- package/scripts/followup/git-pr-followup-checks.ts +13 -20
- package/scripts/followup/git-pr-followup-wrapup.ts +7 -7
- package/scripts/followup/git-pr-followup.ts +18 -17
- package/scripts/gate/core-admission.ts +2 -2
- package/scripts/gate/core-budget.ts +15 -26
- package/scripts/gate/gate-ledger.ts +114 -0
- package/scripts/gate/gate-log.ts +7 -9
- package/scripts/gate/gate-plan.ts +70 -35
- package/scripts/gate/gate-report.ts +14 -15
- package/scripts/gate/gate-skip.ts +11 -13
- package/scripts/gate/gate-steps.ts +5 -1
- package/scripts/gate/gate-tree.ts +3 -4
- package/scripts/gate/hook-gate-reuse.ts +9 -9
- package/scripts/gate/machine-capacity.ts +168 -30
- package/scripts/gate/pre-commit-type-check.ts +4 -4
- package/scripts/gate/project-checks.ts +12 -4
- package/scripts/gate/scoped-green.ts +11 -18
- package/scripts/gate/type-check-command.ts +2 -2
- package/scripts/gate/type-check-step.ts +4 -4
- package/scripts/gate/verification-gate.ts +53 -51
- package/scripts/gh/gh-spawn.ts +2 -2
- package/scripts/gh/git-ai-review-scan.ts +3 -2
- package/scripts/gh/git-gh-api-path.ts +10 -11
- package/scripts/gh/git-gh-exec.ts +43 -48
- package/scripts/gh/git-gh-failure.ts +6 -9
- package/scripts/gh/git-gh-helpers.ts +1 -1
- package/scripts/gh/git-gh-issue-list.ts +15 -19
- package/scripts/gh/git-gh-issue-read.ts +43 -60
- package/scripts/gh/git-gh-issue-rest.ts +14 -15
- package/scripts/gh/git-gh-issue-write.ts +52 -40
- package/scripts/gh/git-gh-issue.ts +23 -24
- package/scripts/gh/git-gh-pr-auto-merge.ts +3 -3
- package/scripts/gh/git-gh-pr-read.ts +46 -50
- package/scripts/gh/git-gh-pr-rest.ts +23 -26
- package/scripts/gh/git-gh-pr-review.ts +2 -2
- package/scripts/gh/git-gh-pr-rollup.ts +4 -4
- package/scripts/gh/git-gh-pr-snapshot.ts +8 -10
- package/scripts/gh/git-gh-pr.ts +16 -16
- package/scripts/gh/git-gh-reachability.ts +11 -12
- package/scripts/gh/git-gh-repo.ts +2 -3
- package/scripts/gh/git-gh-rest-state.ts +1 -1
- package/scripts/gh/git-pr-ai-review.ts +6 -5
- package/scripts/gh/git-pr-checks-eval.ts +28 -30
- package/scripts/gh/git-pr-checks-parse.ts +14 -16
- package/scripts/gh/git-pr-checks-watch.ts +17 -17
- package/scripts/gh/git-pr-checks.ts +20 -23
- package/scripts/gh/git-pr-coderabbit.ts +8 -6
- package/scripts/gh/git-pr-confirmation.ts +5 -5
- package/scripts/gh/git-pr-managed-config.ts +7 -9
- package/scripts/gh/git-pr-messages.ts +1 -1
- package/scripts/gh/git-pr.ts +15 -16
- package/scripts/gh/github-issue-url.ts +8 -9
- package/scripts/git/base-tree.ts +66 -0
- package/scripts/git/change-base.ts +42 -2
- package/scripts/git/changed-file-scope.ts +5 -5
- package/scripts/git/changed-paths.ts +1 -2
- package/scripts/git/constants.ts +2 -2
- package/scripts/git/git-branch.ts +1 -1
- package/scripts/git/git-closes-keyword.ts +3 -3
- package/scripts/git/git-command.ts +53 -41
- package/scripts/git/git-common-directory.ts +3 -3
- package/scripts/git/git-diff-reads.ts +14 -15
- package/scripts/git/git-error.ts +1 -1
- package/scripts/git/git-execa-error.ts +1 -2
- package/scripts/git/git-issue.ts +10 -8
- package/scripts/git/git-location-environment.ts +3 -4
- package/scripts/git/git-ls-remote.ts +6 -8
- package/scripts/git/git-pre-push-hook.ts +11 -10
- package/scripts/git/git-preflight.ts +5 -5
- package/scripts/git/git-push-transport.ts +2 -2
- package/scripts/git/git-remote-branch.ts +1 -2
- package/scripts/git/git-schemas.ts +16 -23
- package/scripts/git/git-spawn-sync.ts +1 -1
- package/scripts/git/git-spawn.ts +37 -14
- package/scripts/git/git-ssh-keepalive.ts +12 -5
- package/scripts/git/git-staging.ts +7 -8
- package/scripts/git/git-workflow.ts +1 -1
- package/scripts/git/git-worktree.ts +35 -27
- package/scripts/git/gone-branch.ts +2 -2
- package/scripts/git/listing-cutoff.ts +1 -2
- package/scripts/git/lockfile-sync.ts +65 -0
- package/scripts/git/main-merge-guard.ts +1 -2
- package/scripts/git/main-merge.ts +7 -7
- package/scripts/git/main-sync.ts +23 -8
- package/scripts/git/parse-json-array.ts +18 -23
- package/scripts/git/repository-lock.ts +34 -2
- package/scripts/git/stash/git-stash.ts +4 -5
- package/scripts/git/stash/stash-orphans.ts +5 -3
- package/scripts/git/stash/stash-pop-args.ts +1 -1
- package/scripts/git/stash/stash-pop-cli.ts +3 -3
- package/scripts/git/stash/stash-sweep-lock.ts +2 -2
- package/scripts/hooks/batch-guard.ts +11 -13
- package/scripts/hooks/check-commit-message.ts +12 -9
- package/scripts/hooks/codex-hook-adapter.ts +16 -10
- package/scripts/hooks/edited-cspell.ts +3 -4
- package/scripts/hooks/format-edited-cli.ts +1 -1
- package/scripts/hooks/format-edited-file.ts +11 -17
- package/scripts/hooks/format-rewrite-notice.ts +19 -17
- package/scripts/hooks/pre-push-unit.ts +10 -14
- package/scripts/hooks/pretool-guard-cli.ts +4 -4
- package/scripts/hooks/pretool-guard.ts +93 -18
- package/scripts/hooks/reserved-run.ts +2 -2
- package/scripts/hooks/step-zero-notice.ts +1 -1
- package/scripts/hooks/stop-guard.ts +21 -10
- package/scripts/init/basic-path-migration.ts +2 -2
- package/scripts/init/claude-kit-only-settings.ts +2 -2
- package/scripts/init/claude-plugin-config.ts +2 -2
- package/scripts/init/distributed-paths.ts +4 -4
- package/scripts/init/hook-command-rewrite.ts +3 -3
- package/scripts/init/hook-launch.ts +5 -5
- package/scripts/init/init-actions.ts +13 -0
- package/scripts/init/init-ai-copy.ts +11 -11
- package/scripts/init/init-bootstrap.ts +3 -3
- package/scripts/init/init-copy-content.ts +4 -4
- package/scripts/init/init-logic-json-merge.ts +7 -9
- package/scripts/init/init-logic-migrate.ts +1 -1
- package/scripts/init/init-logic-templates.ts +1 -1
- package/scripts/init/init-logic-workspace.ts +4 -4
- package/scripts/init/init-logic-yaml-merge.ts +2 -2
- package/scripts/init/init-logic.ts +19 -22
- package/scripts/init/init.ts +7 -7
- package/scripts/init/kit-base-preset.ts +1 -1
- package/scripts/init/kit-setup-state.ts +1 -1
- package/scripts/init/kit-written-paths.ts +1 -2
- package/scripts/init/package-manager-pin.ts +1 -1
- package/scripts/init/project-profile-cli.ts +1 -1
- package/scripts/init/project-profile.ts +3 -3
- package/scripts/init/session-language-environment.ts +1 -1
- package/scripts/init/start-exec.ts +3 -4
- package/scripts/init/start-plan.ts +2 -2
- package/scripts/init/start-setup-pr.ts +3 -2
- package/scripts/init/start-steps.ts +2 -2
- package/scripts/init/tsconfig-preset-migration.ts +1 -1
- package/scripts/init/vscode-tasks.ts +62 -0
- package/scripts/issue/baseline-measure.ts +2 -2
- package/scripts/issue/behavior-change-lint.ts +2 -2
- package/scripts/issue/defect-rate-cli.ts +6 -7
- package/scripts/issue/defect-rate.ts +37 -27
- package/scripts/issue/git-next-issues.ts +9 -8
- package/scripts/issue/issue-auto-ok.ts +24 -11
- package/scripts/issue/issue-backlinks-cli.ts +5 -5
- package/scripts/issue/issue-backlinks.ts +6 -6
- package/scripts/issue/issue-cite-cli.ts +20 -18
- package/scripts/issue/issue-cite.ts +18 -8
- package/scripts/issue/issue-closing-pr.ts +4 -4
- package/scripts/issue/issue-comment-cli.ts +6 -4
- package/scripts/issue/issue-file-cli.ts +52 -15
- package/scripts/issue/issue-file-fold.ts +155 -0
- package/scripts/issue/issue-file.ts +9 -6
- package/scripts/issue/issue-fold-cli.ts +14 -9
- package/scripts/issue/issue-fold.ts +23 -8
- package/scripts/issue/issue-labels.ts +34 -38
- package/scripts/issue/issue-lint-cli.ts +2 -2
- package/scripts/issue/issue-lint.ts +1 -1
- package/scripts/issue/issue-merged.ts +10 -4
- package/scripts/issue/issue-number-shape.ts +27 -0
- package/scripts/issue/issue-rank.ts +1 -1
- package/scripts/issue/issue-read-cli.ts +4 -5
- package/scripts/issue/issue-read.ts +4 -5
- package/scripts/issue/issue-reference.ts +5 -5
- package/scripts/issue/issue-release-cli.ts +17 -7
- package/scripts/issue/issue-release.ts +3 -3
- package/scripts/issue/issue-report-failures.ts +7 -4
- package/scripts/issue/issue-scout-cli.ts +11 -11
- package/scripts/issue/issue-scout-closed.ts +4 -4
- package/scripts/issue/issue-scout.ts +4 -5
- package/scripts/issue/issue-state-cli.ts +17 -10
- package/scripts/issue/issue-state.ts +12 -13
- package/scripts/issue/issue-wip.ts +7 -7
- package/scripts/issue/markdown-section.ts +3 -3
- package/scripts/issue/measure-rerun-cli.ts +10 -9
- package/scripts/issue/reproduction-measure.ts +3 -3
- package/scripts/issue/session-cite.ts +56 -0
- package/scripts/josh/agent-session-environment.ts +10 -8
- package/scripts/josh/cli-body.ts +2 -2
- package/scripts/josh/command-suggest.ts +1 -1
- package/scripts/josh/file-map-stamp.ts +20 -23
- package/scripts/josh/hook-decision.ts +24 -28
- package/scripts/josh/josh-command-map.ts +4 -1
- package/scripts/josh/josh-command-types.ts +30 -35
- package/scripts/josh/josh-commands-ai.ts +6 -6
- package/scripts/josh/josh-commands-backlog.ts +15 -3
- package/scripts/josh/josh-commands-clone.ts +1 -1
- package/scripts/josh/josh-commands-development.ts +25 -4
- package/scripts/josh/josh-commands-document.ts +3 -3
- package/scripts/josh/josh-commands-guard.ts +3 -3
- package/scripts/josh/josh-commands-issue.ts +4 -5
- package/scripts/josh/josh-commands-lane.ts +14 -4
- package/scripts/josh/josh-commands-lint.ts +1 -1
- package/scripts/josh/josh-commands-run.ts +21 -7
- package/scripts/josh/josh-commands-split.ts +1 -2
- package/scripts/josh/josh-commands-versioning.ts +5 -5
- package/scripts/josh/josh-commands-workflow.ts +30 -22
- package/scripts/josh/josh-environment-file.ts +1 -1
- package/scripts/josh/josh-in-process.ts +3 -3
- package/scripts/josh/josh-logic.ts +6 -7
- package/scripts/josh/josh-run.ts +3 -3
- package/scripts/josh/josh-verdict.ts +9 -12
- package/scripts/josh/josh.ts +3 -3
- package/scripts/josh/kit-only.ts +2 -2
- package/scripts/josh/path-decision.ts +3 -3
- package/scripts/josh/platform-temporary.ts +7 -5
- package/scripts/josh/process-identity.ts +24 -6
- package/scripts/josh/process-owner.ts +4 -4
- package/scripts/josh/session-language-cli.ts +53 -11
- package/scripts/josh/session-language.ts +1 -1
- package/scripts/josh/stamp-file.ts +48 -29
- package/scripts/josh/stamp-record.ts +57 -0
- package/scripts/lane/lane-await.ts +35 -11
- package/scripts/lane/lane-cache.ts +6 -6
- package/scripts/lane/lane-capacity.ts +32 -17
- package/scripts/lane/lane-child-invocation.ts +17 -15
- package/scripts/lane/lane-child-marker.ts +12 -12
- package/scripts/lane/lane-cli.ts +12 -13
- package/scripts/lane/lane-close.ts +6 -6
- package/scripts/lane/lane-dispatch.ts +61 -72
- package/scripts/lane/lane-environment.ts +5 -5
- package/scripts/lane/lane-guard-policy.ts +7 -21
- package/scripts/lane/lane-handoff.ts +2 -2
- package/scripts/lane/lane-install.ts +9 -10
- package/scripts/lane/lane-launch-cli.ts +13 -8
- package/scripts/lane/lane-ledger.ts +73 -11
- package/scripts/lane/lane-leftover.ts +2 -2
- package/scripts/lane/lane-limit-cli.ts +160 -0
- package/scripts/lane/lane-limit-override.ts +74 -0
- package/scripts/lane/lane-load.ts +19 -68
- package/scripts/lane/lane-measure-cli.ts +15 -25
- package/scripts/lane/lane-occupancy.ts +6 -4
- package/scripts/lane/lane-open.ts +20 -19
- package/scripts/lane/lane-output.ts +4 -3
- package/scripts/lane/lane-paths.ts +12 -11
- package/scripts/lane/lane-phase.ts +33 -0
- package/scripts/lane/lane-reap.ts +2 -2
- package/scripts/lane/lane-registry.ts +16 -15
- package/scripts/lane/lane-relaunch.ts +9 -9
- package/scripts/lane/lane-report.ts +5 -4
- package/scripts/lane/lane-resume.ts +2 -2
- package/scripts/lane/lane-sampler.ts +55 -0
- package/scripts/lane/lane-seed.ts +7 -7
- package/scripts/lane/lane-stage-stats.ts +135 -0
- package/scripts/lane/lane-start-point.ts +8 -11
- package/scripts/lane/lane-stats.ts +60 -15
- package/scripts/lane/lane-stray.ts +1 -1
- package/scripts/lane/lane-vacant.ts +1 -1
- package/scripts/lane/openai-lane-supervisor-decision.ts +3 -7
- package/scripts/lane/openai-lane-supervisor-owner.ts +3 -9
- package/scripts/lane/openai-review-broker.ts +2 -4
- package/scripts/lib/ancestor-directories.ts +1 -1
- package/scripts/lib/bounded-pool.ts +2 -2
- package/scripts/lib/buffered-process.ts +4 -6
- package/scripts/lib/caddy-logs.sh +0 -0
- package/scripts/lib/cli-flags.ts +39 -6
- package/scripts/lib/error-message.ts +1 -1
- package/scripts/lib/json-value.ts +17 -3
- package/scripts/lib/poll.ts +1 -1
- package/scripts/lib/status-icons.ts +3 -3
- package/scripts/lib/timed-fetch.ts +1 -1
- package/scripts/lib/timeouts.ts +1 -1
- package/scripts/lines/bytes-command.ts +3 -4
- package/scripts/lines/effective-limit.ts +25 -12
- package/scripts/lines/line-budget.ts +47 -55
- package/scripts/lines/line-targets.ts +6 -2
- package/scripts/lines/lines-command.ts +3 -3
- package/scripts/lint/cross-file-recheck.ts +155 -0
- package/scripts/lint/cspell-cached.ts +1 -1
- package/scripts/lint/format.ts +1 -2
- package/scripts/lint/lint-parallel.ts +35 -19
- package/scripts/lint/lint-related-scope.ts +25 -15
- package/scripts/lint/lint-related.ts +6 -7
- package/scripts/managed-marker/index.ts +1 -1
- package/scripts/managed-marker/managed-marker-logic.ts +1 -2
- package/scripts/notify/git-notify.ts +9 -7
- package/scripts/notify/telegram-notify.ts +53 -37
- package/scripts/notify/telegram-test-logic.ts +3 -3
- package/scripts/notify/telegram-test.ts +45 -30
- package/scripts/observations/observation-ledger-home.ts +14 -8
- package/scripts/observations/observation-ledger-line.ts +3 -2
- package/scripts/observations/observation-ledger-migrate.ts +3 -4
- package/scripts/observations/observation-ledger-prepare.ts +4 -4
- package/scripts/observations/observation-ledger.ts +14 -15
- package/scripts/observations/observation-record-cli.ts +83 -0
- package/scripts/observations/observation-record.ts +91 -0
- package/scripts/observations/observations-flush-cli.ts +1 -1
- package/scripts/observations/observations-flush-landing.ts +7 -6
- package/scripts/observations/observations-flush.ts +26 -27
- package/scripts/overrides/overrides-check.ts +18 -8
- package/scripts/package/package-scout-cli.ts +1 -1
- package/scripts/package/package-scout-format.ts +2 -2
- package/scripts/package/package-scout.ts +1 -1
- package/scripts/propagate/propagate-git-failure.ts +1 -1
- package/scripts/propagate/propagate-git.ts +7 -7
- package/scripts/propagate/propagate-plan.ts +2 -2
- package/scripts/propagate/propagate-publish.ts +2 -3
- package/scripts/propagate/propagate-run.ts +5 -7
- package/scripts/propagate/propagate-select.ts +1 -1
- package/scripts/propagate/propagate-steps.ts +19 -20
- package/scripts/propagate/propagate-targets.ts +6 -10
- package/scripts/propagate/propagate.ts +5 -5
- package/scripts/refactor/import-graph.ts +1 -1
- package/scripts/refactor/refactor-lint.ts +4 -10
- package/scripts/refactor/refactor-scan-cli.ts +1 -1
- package/scripts/refactor/refactor-scan.ts +2 -2
- package/scripts/refactor/refactor-targets.ts +1 -1
- package/scripts/release/github-release-cli.ts +25 -3
- package/scripts/release/github-release-runs.ts +1 -1
- package/scripts/release/release-cli.ts +21 -4
- package/scripts/release/release-history.ts +6 -10
- package/scripts/release/release-plan.ts +3 -3
- package/scripts/release/release-progress.ts +3 -4
- package/scripts/release/release-publish.ts +8 -9
- package/scripts/release/release-scope-cli.ts +8 -10
- package/scripts/release/release-tag.ts +6 -8
- package/scripts/release/release-worktree.ts +5 -5
- package/scripts/repo/auto-merge-setting-logic.ts +7 -9
- package/scripts/repo/auto-merge-setting.ts +1 -1
- package/scripts/repo/repo-setting.ts +4 -4
- package/scripts/repo/repository-labels.ts +1 -1
- package/scripts/repo/required-checks-logic.ts +3 -3
- package/scripts/repo/required-checks-report.ts +1 -1
- package/scripts/repo/ruleset-check-cli.ts +1 -1
- package/scripts/repo/ruleset-check.ts +1 -1
- package/scripts/report/report-format-reference.ts +26 -0
- package/scripts/report/report-lint-cli.ts +2 -2
- package/scripts/report/report-lint.ts +16 -2
- package/scripts/review/disposition-cli.ts +2 -2
- package/scripts/review/disposition-logic.ts +1 -1
- package/scripts/review/live-evidence.ts +9 -6
- package/scripts/review/review-attest-cli.ts +1 -2
- package/scripts/review/review-attest.ts +3 -3
- package/scripts/review/review-brief-cli.ts +19 -20
- package/scripts/review/review-brief.ts +29 -32
- package/scripts/review/review-checkout.ts +2 -2
- package/scripts/review/review-diff-parts.ts +3 -5
- package/scripts/review/review-diff-write.ts +1 -1
- package/scripts/review/review-finding-ledger.ts +7 -4
- package/scripts/review/review-findings-cli.ts +2 -2
- package/scripts/review/review-level.ts +4 -7
- package/scripts/review/review-record-cli.ts +73 -16
- package/scripts/review/review-record.ts +5 -4
- package/scripts/review/review-round2-cli.ts +2 -3
- package/scripts/review/review-round2.ts +13 -21
- package/scripts/review/review-stamps.ts +9 -71
- package/scripts/review/review-tree.ts +4 -5
- package/scripts/rules/bash-triggers.ts +4 -4
- package/scripts/rules/decision-oracle-batch.ts +6 -7
- package/scripts/rules/decision-oracle-stage.ts +1 -1
- package/scripts/rules/decision-oracle-tokens.ts +1 -2
- package/scripts/rules/decision-oracle.ts +2 -2
- package/scripts/rules/delivered-rules.ts +61 -406
- package/scripts/rules/destructive-command.ts +2 -2
- package/scripts/rules/direct-filing.ts +4 -4
- package/scripts/rules/direct-pr-create.ts +2 -2
- package/scripts/rules/early-heartbeat.ts +15 -19
- package/scripts/rules/file-body.ts +5 -6
- package/scripts/rules/filing-cap.ts +6 -7
- package/scripts/rules/filing-offer.ts +1 -1
- package/scripts/rules/firing-point.ts +6 -6
- package/scripts/rules/gh-api.ts +2 -2
- package/scripts/rules/git-argv.ts +3 -3
- package/scripts/rules/git-force.ts +2 -2
- package/scripts/rules/hook-context-line.ts +31 -0
- package/scripts/rules/implementation-cut-verdict.ts +5 -8
- package/scripts/rules/implementation-cut.ts +35 -32
- package/scripts/rules/index-guard.ts +2 -2
- package/scripts/rules/issue-citation.ts +7 -7
- package/scripts/rules/issue-comments.ts +21 -13
- package/scripts/rules/josh-git-bare.ts +2 -2
- package/scripts/rules/lane-background.ts +14 -16
- package/scripts/rules/lane-carry-conflict.ts +41 -5
- package/scripts/rules/lane-interactive-ask.ts +6 -9
- package/scripts/rules/lane-park.ts +12 -16
- package/scripts/rules/lane-split-park.ts +1 -2
- package/scripts/rules/lane-switch-main.ts +10 -13
- package/scripts/rules/last-prompt.ts +1 -1
- package/scripts/rules/oracle-consulted.ts +5 -5
- package/scripts/rules/oracle-firing.ts +6 -9
- package/scripts/rules/oracle-list-cli.ts +2 -2
- package/scripts/rules/permission-guards.ts +2 -2
- package/scripts/rules/piped-verification.ts +79 -9
- package/scripts/rules/poll-loop.ts +9 -11
- package/scripts/rules/pre-gate-cut.ts +33 -30
- package/scripts/rules/prior-comment-read.ts +3 -3
- package/scripts/rules/protected-files.ts +25 -13
- package/scripts/rules/raw-field-body.ts +3 -4
- package/scripts/rules/reply-language.ts +1 -1
- package/scripts/rules/rule-body-guard.ts +10 -12
- package/scripts/rules/rule-guard.ts +1 -1
- package/scripts/rules/rule-list.ts +51 -0
- package/scripts/rules/rule-registry-rows.ts +282 -0
- package/scripts/rules/rule-registry.ts +109 -0
- package/scripts/rules/rule-value-cache.ts +2 -2
- package/scripts/rules/rule-value-cli.ts +6 -4
- package/scripts/rules/rule-value.ts +61 -22
- package/scripts/rules/run-tail-rule.ts +11 -15
- package/scripts/rules/shell-body-trigger.ts +7 -7
- package/scripts/rules/shell-segments.ts +2 -4
- package/scripts/rules/stop-rules.ts +54 -41
- package/scripts/rules/tail-commands.ts +1 -1
- package/scripts/rules/test-declared-commit.ts +2 -2
- package/scripts/rules/third-party-write.ts +3 -3
- package/scripts/rules/worktree-guard.ts +12 -5
- package/scripts/run/add/run-add-cli.ts +165 -0
- package/scripts/run/add/run-add.ts +124 -0
- package/scripts/run/board/run-board-cli.ts +207 -0
- package/scripts/run/board/run-board-closed.ts +95 -0
- package/scripts/run/board/run-board-every.ts +60 -0
- package/scripts/run/board/run-board-fetch.ts +38 -0
- package/scripts/run/board/run-board-fit.ts +219 -0
- package/scripts/run/board/run-board-github.ts +162 -0
- package/scripts/run/board/run-board-header.ts +275 -0
- package/scripts/run/board/run-board-kind.ts +35 -0
- package/scripts/run/board/run-board-labels.ts +299 -0
- package/scripts/run/board/run-board-layout.ts +222 -0
- package/scripts/run/board/run-board-link.ts +31 -0
- package/scripts/run/board/run-board-machine.ts +198 -0
- package/scripts/run/board/run-board-notes.ts +103 -0
- package/scripts/run/board/run-board-phase.ts +136 -0
- package/scripts/run/board/run-board-plan.ts +129 -0
- package/scripts/run/board/run-board-read.ts +62 -0
- package/scripts/run/board/run-board-render-legend.ts +82 -0
- package/scripts/run/board/run-board-render-notes.ts +77 -0
- package/scripts/run/board/run-board-render-slot.ts +50 -0
- package/scripts/run/board/run-board-render.ts +407 -0
- package/scripts/run/board/run-board-scope.ts +17 -0
- package/scripts/run/board/run-board-screen.ts +43 -0
- package/scripts/run/board/run-board-span.ts +66 -0
- package/scripts/run/board/run-board-spin.ts +115 -0
- package/scripts/run/board/run-board-state.ts +113 -0
- package/scripts/run/board/run-board-status.ts +279 -0
- package/scripts/run/board/run-board-tick.ts +210 -0
- package/scripts/run/board/run-board-track.ts +22 -0
- package/scripts/run/board/run-board-usage-read.ts +255 -0
- package/scripts/run/board/run-board-usage-rusage.ts +124 -0
- package/scripts/run/board/run-board-usage-text.ts +80 -0
- package/scripts/run/board/run-board-usage.ts +165 -0
- package/scripts/run/carry/run-carry-added.ts +62 -0
- package/scripts/run/carry/run-carry-args.ts +25 -22
- package/scripts/run/carry/run-carry-change.ts +1 -1
- package/scripts/run/carry/run-carry-cli.ts +71 -48
- package/scripts/run/carry/run-carry-conversation.ts +6 -7
- package/scripts/run/carry/run-carry-ended.ts +85 -0
- package/scripts/run/carry/run-carry-reclaim.ts +1 -1
- package/scripts/run/carry/run-carry-stash.ts +3 -2
- package/scripts/run/carry/run-carry-streak.ts +8 -10
- package/scripts/run/carry/run-carry.ts +85 -89
- package/scripts/run/cut/run-cut-args.ts +7 -7
- package/scripts/run/cut/run-cut-cli.ts +54 -36
- package/scripts/run/cut/run-cut-handoff.ts +15 -15
- package/scripts/run/cut/run-cut-report.ts +37 -16
- package/scripts/run/cut/run-cut.ts +63 -77
- package/scripts/run/detached-launch.ts +35 -50
- package/scripts/run/entry/run-entry-cli.ts +48 -27
- package/scripts/run/entry/run-entry-stop.ts +7 -9
- package/scripts/run/entry/run-entry.ts +5 -6
- package/scripts/run/event/run-event-cli.ts +5 -6
- package/scripts/run/event/run-event-filed.ts +69 -0
- package/scripts/run/event/run-event-follow.ts +3 -3
- package/scripts/run/event/run-event-plan.ts +38 -0
- package/scripts/run/event/run-event-render.ts +9 -4
- package/scripts/run/event/run-event-scope.ts +47 -18
- package/scripts/run/event/run-event-stream-emit.ts +64 -11
- package/scripts/run/event/run-event-stream.ts +171 -46
- package/scripts/run/event/run-event-watch.ts +4 -6
- package/scripts/run/hold/run-hold-cli.ts +65 -62
- package/scripts/run/hold/run-hold.ts +88 -46
- package/scripts/run/merge/run-merge-cli.ts +116 -77
- package/scripts/run/merge/run-merge-collect.ts +107 -0
- package/scripts/run/merge/run-merge-steps.ts +112 -65
- package/scripts/run/merge/run-merge-token.ts +30 -0
- package/scripts/run/merge/run-merge.ts +31 -22
- package/scripts/run/progress/run-progress-args.ts +4 -4
- package/scripts/run/progress/run-progress-cli.ts +39 -50
- package/scripts/run/progress/run-progress-clock.ts +25 -32
- package/scripts/run/progress/run-progress-config.ts +6 -9
- package/scripts/run/progress/run-progress-read.ts +9 -10
- package/scripts/run/progress/run-progress.ts +48 -53
- package/scripts/run/review/run-review-cli.ts +6 -6
- package/scripts/run/review/run-review-steps.ts +6 -6
- package/scripts/run/review/run-review.ts +9 -11
- package/scripts/run/run-cli-fault.ts +29 -0
- package/scripts/run/run-ending-cli.ts +3 -3
- package/scripts/run/run-ending.ts +10 -14
- package/scripts/run/run-halfrun-resume.ts +6 -8
- package/scripts/run/run-headless.ts +26 -12
- package/scripts/run/run-invocation.ts +17 -22
- package/scripts/run/run-label.ts +7 -5
- package/scripts/run/run-liveness-cli.ts +19 -6
- package/scripts/run/run-liveness.ts +27 -38
- package/scripts/run/run-next-cli.ts +5 -9
- package/scripts/run/run-next.ts +4 -5
- package/scripts/run/run-parent-cut-hook.ts +10 -12
- package/scripts/run/run-preflight.ts +25 -29
- package/scripts/run/run-prep-cli.ts +17 -13
- package/scripts/run/run-prep-locate.ts +4 -5
- package/scripts/run/run-prep.ts +7 -10
- package/scripts/run/run-prrun-resume.ts +2 -2
- package/scripts/run/run-report-cli.ts +4 -4
- package/scripts/run/run-report.ts +9 -14
- package/scripts/run/run-retrospective.ts +3 -3
- package/scripts/run/run-section.ts +42 -0
- package/scripts/run/run-stage-read.ts +2 -2
- package/scripts/run/run-stage.ts +6 -4
- package/scripts/run/run-status-cli.ts +7 -5
- package/scripts/run/run-status.ts +6 -7
- package/scripts/run/run-step-cli.ts +64 -18
- package/scripts/run/run-step.ts +107 -51
- package/scripts/run/run-stop-notify.ts +7 -8
- package/scripts/run/run-stranded-cli.ts +1 -1
- package/scripts/run/run-stranded-detect.ts +4 -4
- package/scripts/run/run-stranded.ts +11 -13
- package/scripts/run/run-tail-cli.ts +15 -16
- package/scripts/run/run-tail.ts +14 -33
- package/scripts/run/run-watcher-guard-cli.ts +3 -4
- package/scripts/run/run-watcher-guard.ts +11 -12
- package/scripts/run/run-watcher-hook.ts +6 -12
- package/scripts/run/ship/run-ship-cli.ts +67 -33
- package/scripts/run/ship/run-ship-detach.ts +15 -13
- package/scripts/run/ship/run-ship-lock.ts +1 -1
- package/scripts/run/ship/run-ship-next.ts +7 -8
- package/scripts/run/ship/run-ship-pre-detach.ts +27 -11
- package/scripts/run/ship/run-ship-preflight.ts +10 -11
- package/scripts/run/ship/run-ship-probe.ts +4 -4
- package/scripts/run/ship/run-ship-return.ts +1 -1
- package/scripts/run/ship/run-ship-review-steps.ts +43 -24
- package/scripts/run/ship/run-ship-review.ts +12 -14
- package/scripts/run/ship/run-ship-scoped.ts +15 -6
- package/scripts/run/ship/run-ship-stage.ts +80 -26
- package/scripts/run/ship/run-ship-steps.ts +26 -16
- package/scripts/run/ship/run-ship-stop-text.ts +4 -2
- package/scripts/run/ship/run-ship-sync.ts +9 -8
- package/scripts/run/ship/run-ship.ts +17 -32
- package/scripts/run/tidy/run-tidy-cli.ts +9 -5
- package/scripts/run/tidy/run-tidy-lanes.ts +18 -7
- package/scripts/run/tidy/run-tidy-stashes.ts +8 -8
- package/scripts/run/tidy/run-tidy.ts +4 -3
- package/scripts/run/wake/run-wake-cli.ts +27 -32
- package/scripts/run/wake/run-wake-describe.ts +24 -28
- package/scripts/run/wake/run-wake-driver.ts +14 -14
- package/scripts/run/wake/run-wake-handoff.ts +6 -6
- package/scripts/run/wake/run-wake-loop.ts +9 -9
- package/scripts/run/wake/run-wake-restart.ts +4 -5
- package/scripts/run/wake/run-wake-session.ts +23 -27
- package/scripts/run/wake/run-wake.ts +57 -279
- package/scripts/safe-chain/ci-installer-pin.ts +3 -3
- package/scripts/safe-chain/pack-hook.ts +2 -2
- package/scripts/safe-chain/preinstall-command.ts +2 -2
- package/scripts/security/security-audit-logic.ts +1 -1
- package/scripts/security/security-audit-provision-logic.ts +1 -1
- package/scripts/security/security-audit-provision.ts +2 -2
- package/scripts/security/security-audit.ts +5 -5
- package/scripts/security/security-updates-logic.ts +2 -3
- package/scripts/security/security-updates.ts +2 -4
- package/scripts/self-sync-guard/index.ts +1 -1
- package/scripts/self-sync-guard/self-sync-guard-logic.ts +2 -2
- package/scripts/self-sync-guard/self-sync-refusal.ts +1 -1
- package/scripts/sonar/sonar-hotspots-cli.ts +1 -1
- package/scripts/sonar/sonar-hotspots.ts +1 -1
- package/scripts/sonar/sonar-new-code-cli.ts +1 -1
- package/scripts/sonar/sonar-new-code.ts +1 -1
- package/scripts/sonar/sonar-project.ts +1 -1
- package/scripts/split/split-assess-cli.ts +1 -1
- package/scripts/split/split-assess.ts +3 -3
- package/scripts/sync/directory-copy-guard.ts +2 -3
- package/scripts/sync/managed-config-scope-cli.ts +1 -2
- package/scripts/sync/managed-config-scope.ts +4 -4
- package/scripts/sync/plugin-skill-directories.ts +2 -2
- package/scripts/sync/reconcile-templates.ts +17 -8
- package/scripts/sync/removed-skill-manifest.ts +2 -3
- package/scripts/sync/sync-ai-files.ts +7 -7
- package/scripts/sync/sync-configs.ts +30 -3
- package/scripts/sync/sync-hook-safety.ts +2 -2
- package/scripts/sync/sync.ts +23 -10
- package/scripts/sync/synced-paths.ts +2 -1
- package/scripts/sync/workflow-pin-logic.ts +1 -1
- package/scripts/test/test-declared-changed.ts +4 -4
- package/scripts/test/test-declared-logic.ts +2 -3
- package/scripts/test/test-declared-match.ts +25 -4
- package/scripts/test/test-declared.ts +26 -9
- package/scripts/test/test-red-commit.ts +3 -2
- package/scripts/test/test-red-logic.ts +7 -14
- package/scripts/test/test-red.ts +12 -47
- package/scripts/test/test-related-scope.ts +2 -3
- package/scripts/test/test-related.ts +3 -3
- package/scripts/test/test-type-logic.ts +1 -2
- package/scripts/test/test-unit-guard.ts +13 -17
- package/scripts/test/unit-worker-share.ts +7 -8
- package/scripts/time-runtime/time-agent-bundles.ts +2 -4
- package/scripts/time-runtime/time-background.ts +17 -21
- package/scripts/time-runtime/time-batch-guard.ts +67 -342
- package/scripts/time-runtime/time-bundle-call.ts +26 -28
- package/scripts/time-runtime/time-bundles.ts +11 -12
- package/scripts/time-runtime/time-call-identity.ts +1 -1
- package/scripts/time-runtime/time-command-key.ts +2 -2
- package/scripts/time-runtime/time-density-hook.ts +8 -11
- package/scripts/time-runtime/time-density.ts +5 -5
- package/scripts/time-runtime/time-followup-stage.ts +7 -7
- package/scripts/time-runtime/time-format.ts +5 -5
- package/scripts/time-runtime/time-hook-transcript.ts +3 -3
- package/scripts/time-runtime/time-instant.ts +1 -1
- package/scripts/time-runtime/time-markers.ts +15 -19
- package/scripts/time-runtime/time-phase-names.ts +3 -3
- package/scripts/time-runtime/time-reported-failure.ts +15 -19
- package/scripts/time-runtime/time-round-trips.ts +20 -23
- package/scripts/time-runtime/time-shell.ts +8 -8
- package/scripts/time-runtime/time-single-check.ts +1 -2
- package/scripts/time-runtime/time-spans.ts +35 -40
- package/scripts/time-runtime/time-tool-call.ts +15 -16
- package/scripts/time-runtime/time-transcript-line.ts +53 -34
- package/scripts/time-runtime/time-writes.ts +5 -5
- package/scripts/ui/ui-routes-cli.ts +1 -2
- package/scripts/ui/ui-routes.ts +1 -2
- package/scripts/version/bump-version.ts +1 -1
- package/scripts/version/fresh-metadata-cache.ts +2 -2
- package/scripts/version/latest-corepack.ts +26 -26
- package/scripts/version/latest-lane-guard.ts +1 -1
- package/scripts/version/latest-scope-cli.ts +2 -2
- package/scripts/version/latest-stamp.ts +1 -2
- package/scripts/version/latest-update.ts +2 -2
- package/scripts/version/npm-registry.ts +2 -2
- package/scripts/version/package-manager-version.ts +18 -0
- package/scripts/version/publishable-range-check.ts +2 -1
- package/scripts/version/publishable-range.ts +1 -1
- package/scripts/version/release-age.ts +11 -11
- package/scripts/version/release-hold.ts +2 -2
- package/scripts/version/safe-chain-version-update.ts +3 -3
- package/scripts/version/version-check-logic.ts +2 -3
- package/scripts/version/version-check.ts +1 -2
- package/scripts/version/version-command-config.ts +2 -2
- package/scripts/version/version-commands.ts +3 -3
- package/scripts/version/version-remote.ts +4 -4
- package/scripts/version/version-targets.ts +2 -2
- package/templates/gitignore +7 -0
- package/dist/hooks/chunk-KHX4U3BG.js +0 -6400
- package/dist/hooks/chunk-RKUAD3I6.js +0 -90
- package/dist/hooks/chunk-WPALEIRX.js +0 -18
- package/scripts/backlog/backlog-restructure.ts +0 -152
- package/scripts/rules/issue-fold-rule.ts +0 -72
- package/scripts/rules/wip-cap.ts +0 -63
- package/scripts/run/run-issue-number.ts +0 -19
|
@@ -1,10 +1,14 @@
|
|
|
1
|
+
import { report_format_reference } from './report-format-reference'
|
|
2
|
+
|
|
1
3
|
// The mechanical half of the two-layer work summary (`CLAUDE.md` Step 0, single-sourced in
|
|
2
4
|
// `prompts/collaboration-workflow/report-format.md`) is a fixed shape, yet only an advisory echo in
|
|
3
5
|
// the `UserPromptSubmit` hook ever mentions it and nothing reads the summary an agent actually
|
|
4
6
|
// wrote. This checks the half a machine can: the labels are present, the overview lines stay inside
|
|
5
7
|
// their length, nothing wraps the summary in a code fence, and no file path or CLI flag leaks into
|
|
6
8
|
// the overview. The judgement half — whether the subject is concrete — is deliberately left out,
|
|
7
|
-
// because a machine cannot answer it
|
|
9
|
+
// because a machine cannot answer it.
|
|
10
|
+
|
|
11
|
+
const TEMPLATE_HEADING = report_format_reference.SUMMARY_TEMPLATE_HEADING
|
|
8
12
|
|
|
9
13
|
// The session-facing labels are Japanese because that is the form the summary is written in
|
|
10
14
|
// (`JOSH_SESSION_LANG` defaults to `ja`); `report-format.md`'s template is the single source and the
|
|
@@ -33,7 +37,7 @@ const CLI_FLAG_PATTERN = /(?:^|\s)--[a-z]/u
|
|
|
33
37
|
const BOLD_MARKER = '**'
|
|
34
38
|
const LEADING_LABEL_PUNCTUATION = /^[\s::]+/u
|
|
35
39
|
|
|
36
|
-
// The case-based test declaration
|
|
40
|
+
// The case-based test declaration: the changes section carries a first tier
|
|
37
41
|
// of fixed-vocabulary cases — each non-applicable one crossed out with a reason — and a second tier
|
|
38
42
|
// of at-least-three "if it breaks" conditions. This checks the mechanical half: the two tier markers
|
|
39
43
|
// are present, an N/A cross-out carries a reason, and the second tier holds enough conditions (or the
|
|
@@ -235,8 +239,18 @@ function lint_report(summary: string): ReadonlyArray<string> {
|
|
|
235
239
|
]
|
|
236
240
|
}
|
|
237
241
|
|
|
242
|
+
// The violations followed by one line naming where the summary's shape is written
|
|
243
|
+
// — the violations say what is wrong, the pointer where the right shape is.
|
|
244
|
+
// A clean summary stays empty, so `ok` is still the only output of a pass.
|
|
245
|
+
function with_reference(violations: ReadonlyArray<string>): ReadonlyArray<string> {
|
|
246
|
+
if (violations.length === 0) return violations
|
|
247
|
+
|
|
248
|
+
return [...violations, `→ the template: ${report_format_reference.pointer(TEMPLATE_HEADING)}`]
|
|
249
|
+
}
|
|
250
|
+
|
|
238
251
|
const report_lint = {
|
|
239
252
|
lint_report,
|
|
253
|
+
with_reference,
|
|
240
254
|
REQUIRED_LABELS,
|
|
241
255
|
MAX_OVERVIEW_CHARS,
|
|
242
256
|
CASE_LABEL,
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import { fileURLToPath } from 'node:url'
|
|
3
3
|
import { disposition } from './disposition-logic'
|
|
4
4
|
|
|
5
|
-
// `josh disposition <path...>` — the machine half of the three-way review disposition
|
|
6
|
-
//
|
|
5
|
+
// `josh disposition <path...>` — the machine half of the three-way review disposition.
|
|
6
|
+
// It prints `runtime` when any named path reaches a runtime path — a
|
|
7
7
|
// runtime code path, a distributed artifact a consumer reads, or the verification guarding either —
|
|
8
8
|
// and `non-runtime` when every path is inert. `prompts/review.md` → "Three-way disposition after the
|
|
9
9
|
// cap" leaves the run one judgement after this: whether the finding is a confirmed defect.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { review_level } from './review-level'
|
|
2
2
|
|
|
3
3
|
// Whether a review finding reaches a runtime path — the half of the three-way disposition a machine
|
|
4
|
-
// can answer
|
|
4
|
+
// can answer. `prompts/review.md` → "Three-way disposition after the cap"
|
|
5
5
|
// routes a non-High finding to branch 2 (file it) only when it is a **confirmed defect that reaches a
|
|
6
6
|
// runtime code path**. "Reaches" is read exactly as the review-level rubric reads it — a runtime code
|
|
7
7
|
// path, a distributed artifact a consumer reads, or the verification guarding either — which is the
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { git_gh_command } from '#scripts/gh/git-gh-command'
|
|
2
2
|
import { git_command } from '#scripts/git/git-command'
|
|
3
3
|
import { reproduction_measure } from '#scripts/issue/reproduction-measure'
|
|
4
|
+
import { report_format_reference } from '#scripts/report/report-format-reference'
|
|
4
5
|
import { test_declared_logic, type Verdict } from '#scripts/test/test-declared-logic'
|
|
5
6
|
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
// recent defects (#2402, #2419, #2393) all came through that gap. **This is the seam where it closes**:
|
|
7
|
+
// Lint, types and unit tests green and a review that found nothing prove the code is right in
|
|
8
|
+
// isolation, never that the feature works where it runs. **This is the seam where that gap closes**:
|
|
9
9
|
// a runtime change merges only once its pull request carries the acceptance criteria run for real —
|
|
10
10
|
// the command and the output it actually printed, in the evidence section `EVIDENCE_HEADING` names.
|
|
11
11
|
//
|
|
@@ -15,6 +15,9 @@ import { test_declared_logic, type Verdict } from '#scripts/test/test-declared-l
|
|
|
15
15
|
// reproduction-section parser, so a prose "confirmed it works" is refused here exactly as it is there.
|
|
16
16
|
|
|
17
17
|
const EVIDENCE_HEADING = '## 実機証跡'
|
|
18
|
+
// The shape the section needs and where it is written down, so a refusal
|
|
19
|
+
// names the format instead of leaving the reader to search for it.
|
|
20
|
+
const EVIDENCE_FORMAT = `under ${EVIDENCE_HEADING}, a backticked command followed by a fenced block holding the output it actually printed (prose such as "confirmed" is not accepted) — format: ${report_format_reference.pointer(report_format_reference.COMPLETION_REPORT_HEADING)}`
|
|
18
21
|
|
|
19
22
|
function verdict_for(paths: ReadonlyArray<string>, body: string | undefined = ''): Verdict {
|
|
20
23
|
if (test_declared_logic.runtime_files(paths).length === 0) return 'exempt'
|
|
@@ -49,12 +52,12 @@ async function check(branch_name: string): Promise<Verdict> {
|
|
|
49
52
|
function refusal_message(): string {
|
|
50
53
|
return [
|
|
51
54
|
`Merge refused: this pull request changes runtime code but its body has no ${EVIDENCE_HEADING} section.`,
|
|
52
|
-
'Run the acceptance criteria for real, then add the section:
|
|
53
|
-
|
|
55
|
+
'Run the acceptance criteria for real, then add the section:',
|
|
56
|
+
EVIDENCE_FORMAT,
|
|
54
57
|
'Update the body with `gh api -X PATCH repos/{owner}/{repo}/pulls/<N> -F body=@<path>`, then re-run.',
|
|
55
58
|
].join('\n')
|
|
56
59
|
}
|
|
57
60
|
|
|
58
|
-
const live_evidence = { EVIDENCE_HEADING, check, refusal_message, verdict_for }
|
|
61
|
+
const live_evidence = { EVIDENCE_FORMAT, EVIDENCE_HEADING, check, refusal_message, verdict_for }
|
|
59
62
|
|
|
60
63
|
export { live_evidence }
|
|
@@ -3,8 +3,7 @@ import { fileURLToPath } from 'node:url'
|
|
|
3
3
|
import { review_attest, type AttestVerdict } from './review-attest'
|
|
4
4
|
import { review_checkout } from './review-checkout'
|
|
5
5
|
|
|
6
|
-
// `josh review:attest` — the two halves of the checkout contract `josh review:brief` opens
|
|
7
|
-
// (joshuafolkken/kit#1522).
|
|
6
|
+
// `josh review:attest` — the two halves of the checkout contract `josh review:brief` opens.
|
|
8
7
|
//
|
|
9
8
|
// **`josh review:attest <nonce>` is run by the review**, from the checkout it actually read. It
|
|
10
9
|
// compares that checkout against the one the brief described and exits non-zero when they differ, so
|
|
@@ -6,7 +6,7 @@ import { stamp_file } from '#scripts/josh/stamp-file'
|
|
|
6
6
|
import { json_value } from '#scripts/lib/json-value'
|
|
7
7
|
import { review_checkout, type ReviewCheckout } from './review-checkout'
|
|
8
8
|
|
|
9
|
-
// The record that says which checkout a `/code-review` actually read
|
|
9
|
+
// The record that says which checkout a `/code-review` actually read.
|
|
10
10
|
//
|
|
11
11
|
// **The root cause is not ours to fix.** `/code-review` is forked by the harness and inherits the
|
|
12
12
|
// session's working directory; nothing in this repository decides that. What *is* ours is the
|
|
@@ -242,7 +242,7 @@ function is_written_since(source: string, taken_at: string): boolean {
|
|
|
242
242
|
}
|
|
243
243
|
}
|
|
244
244
|
|
|
245
|
-
// **Whether the last briefed review of this branch finished
|
|
245
|
+
// **Whether the last briefed review of this branch finished**. A ship resumed
|
|
246
246
|
// after a stop re-issues round 1, and without this answer it briefed the whole change again — the
|
|
247
247
|
// files the finished review had just read, re-read at full cost. It is asked before `record_target`
|
|
248
248
|
// mints the next nonce, since that call drops the record it reads. The branch must match: the pointer
|
|
@@ -265,7 +265,7 @@ function is_reviewed_on(checkout: ReviewCheckout, findings_path: string, root?:
|
|
|
265
265
|
}
|
|
266
266
|
|
|
267
267
|
// Whether a record written at `written_at` belongs to the brief the pointer names rather than an earlier
|
|
268
|
-
// one
|
|
268
|
+
// one: that brief writes it right after minting the pointer. ISO timestamps
|
|
269
269
|
// order as strings.
|
|
270
270
|
function is_briefed_since(written_at: string, root?: string): boolean {
|
|
271
271
|
const pointer = read_pointer(root)
|
|
@@ -23,22 +23,20 @@ import { review_level, type ReviewLevel } from './review-level'
|
|
|
23
23
|
import { review_stamps } from './review-stamps'
|
|
24
24
|
import { review_tree } from './review-tree'
|
|
25
25
|
|
|
26
|
-
// `josh review:brief` — print the whole `/code-review` invocation, not just the level
|
|
27
|
-
// (joshuafolkken/kit#1241).
|
|
26
|
+
// `josh review:brief` — print the whole `/code-review` invocation, not just the level.
|
|
28
27
|
//
|
|
29
28
|
// The level is decided in-process by the `review_level` module and is also exposed on its own as
|
|
30
|
-
// `--level-only
|
|
31
|
-
// the
|
|
32
|
-
//
|
|
33
|
-
// has passed **or is running** on this tree (joshuafolkken/kit#1242 — the two are started together,
|
|
29
|
+
// `--level-only`, so the level a brief prints and the level `--level-only` answers can never
|
|
30
|
+
// disagree. What the full brief adds is everything else the forked review agent cannot find out for
|
|
31
|
+
// itself: whether the gate has passed **or is running** on this tree (the two are started together,
|
|
34
32
|
// so "still running" is the usual answer at this point), how this project runs its unit tests, and —
|
|
35
33
|
// on round 2 — which files the first round's fixes touched.
|
|
36
34
|
|
|
37
35
|
const ARGV_OFFSET = 2
|
|
38
36
|
const USAGE = 'Usage: josh review:brief [--round <1|2>] | --level-only [--staged] [--json]'
|
|
39
37
|
|
|
40
|
-
// The rubric's absolute path, resolved against the kit package rather than the review checkout root
|
|
41
|
-
//
|
|
38
|
+
// The rubric's absolute path, resolved against the kit package rather than the review checkout root.
|
|
39
|
+
// The rubric ships inside the package, so a consumer that keeps no
|
|
42
40
|
// `prompts/` of its own still receives it at `node_modules/@joshuafolkken/kit/prompts/`.
|
|
43
41
|
// `find_package_directory` ascends to the nearest package.json, so this resolves from both the tsx
|
|
44
42
|
// source and the bundled `dist/josh.js`.
|
|
@@ -48,7 +46,7 @@ const RUBRIC_PATH = path.join(
|
|
|
48
46
|
review_brief.RUBRIC_RELATIVE_PATH,
|
|
49
47
|
)
|
|
50
48
|
const ROUND_FLAG = '--round'
|
|
51
|
-
// `review:level` folded in here
|
|
49
|
+
// `review:level` folded in here: it was a second command deciding the same
|
|
52
50
|
// thing `review:brief` already prints on its first line, so it is now a mode of this one. `--level-only`
|
|
53
51
|
// answers the level alone — for a pre-commit review run outside any workflow — and, unlike the full
|
|
54
52
|
// brief, it never refuses on the scoped-green gate: the level takes no judgement and reads the changed
|
|
@@ -93,7 +91,7 @@ function kept_note(taken_at: string): string {
|
|
|
93
91
|
// digests describe the implementation as the first round read it. Taking it again on round 2 would
|
|
94
92
|
// overwrite the very record the delta is measured against.
|
|
95
93
|
//
|
|
96
|
-
// **It is written once per run and never retaken
|
|
94
|
+
// **It is written once per run and never retaken**. Overwriting on every
|
|
97
95
|
// round-1 invocation put a wrong `skip` one command away: run a bare `josh review:brief` after round
|
|
98
96
|
// 1's fixes are in and the record is retaken against the fixed tree, the fix delta reads empty, and
|
|
99
97
|
// `josh review:round2 --round-1-closed` fires arm A on unreviewed fix code. Keeping the record the
|
|
@@ -110,7 +108,7 @@ function kept_note(taken_at: string): string {
|
|
|
110
108
|
// The write is swallowed for the same reason the gate's is: the brief has already been printed and
|
|
111
109
|
// is correct, so a temp-directory problem must not turn it into a non-zero exit. What a missing
|
|
112
110
|
// snapshot costs is a round 2 that reviews the whole change — wider, never narrower.
|
|
113
|
-
// **The base is recorded beside the file map
|
|
111
|
+
// **The base is recorded beside the file map**. The map is a diff against
|
|
114
112
|
// `change_base`, and `change_base` is recomputed on every invocation — so without the commit it was
|
|
115
113
|
// measured against, round 2 cannot tell a fix from a base that moved under it, and reports the
|
|
116
114
|
// difference between two incomparable sets as round 1's fixes.
|
|
@@ -137,13 +135,13 @@ function record_round_one(
|
|
|
137
135
|
}
|
|
138
136
|
}
|
|
139
137
|
|
|
140
|
-
// **Recorded before it is printed, and the write is not swallowed
|
|
138
|
+
// **Recorded before it is printed, and the write is not swallowed**. The
|
|
141
139
|
// nonce the brief prints is a contract the run enforces later; a brief that printed one it had
|
|
142
140
|
// failed to record would hand the review a command that cannot succeed and the run a check that
|
|
143
141
|
// answers `not-required` — the guard gone, silently, which is the shape this whole record exists to
|
|
144
142
|
// remove.
|
|
145
143
|
//
|
|
146
|
-
// **Whether this is a resume is read first
|
|
144
|
+
// **Whether this is a resume is read first**: `record_target` drops the
|
|
147
145
|
// previous nonce's records, so asked afterwards the finished review would always read as absent. The
|
|
148
146
|
// findings file is the ship's, keyed on `PROJECT_ROOT` as the ship keys it; a review run outside the
|
|
149
147
|
// ship writes none, so it never reads as a resume and keeps the whole change.
|
|
@@ -180,7 +178,7 @@ async function open_contract(): Promise<{
|
|
|
180
178
|
return { checkout, nonce: review_attest.record_target(checkout, checkout.root), resumed_from }
|
|
181
179
|
}
|
|
182
180
|
|
|
183
|
-
// Retaken on every round-1 brief, after the pointer it pairs with
|
|
181
|
+
// Retaken on every round-1 brief, after the pointer it pairs with. Swallowed:
|
|
184
182
|
// a record that failed to write predates the next pointer, so the resume widens rather than narrows.
|
|
185
183
|
function record_briefed(round: number, tree: Record<string, string>, base?: string): void {
|
|
186
184
|
if (round !== FIRST_ROUND) return
|
|
@@ -200,7 +198,7 @@ interface ComposeRequest {
|
|
|
200
198
|
profile: AgentProfile
|
|
201
199
|
}
|
|
202
200
|
|
|
203
|
-
// **Swallowed, and the brief keeps its target line
|
|
201
|
+
// **Swallowed, and the brief keeps its target line**: parts that could not be
|
|
204
202
|
// written leave the reviewer the whole `git diff` to read, which costs truncated output rather than
|
|
205
203
|
// scope — the direction every failure here falls.
|
|
206
204
|
async function read_diff(
|
|
@@ -234,9 +232,9 @@ async function compose_brief(request: ComposeRequest): Promise<string> {
|
|
|
234
232
|
stamps,
|
|
235
233
|
// Resolved by the caller rather than printed as a `$(…)` the forked agent would expand: a
|
|
236
234
|
// subshell that fails expands to nothing, and the bare `git diff` left behind lists only the
|
|
237
|
-
// unstaged working tree — a review silently narrowed to a fraction of the change
|
|
238
|
-
//
|
|
239
|
-
// the map is stored against is the same one the brief printed
|
|
235
|
+
// unstaged working tree — a review silently narrowed to a fraction of the change.
|
|
236
|
+
// One reading is shared with the record written below, so the commit
|
|
237
|
+
// the map is stored against is the same one the brief printed.
|
|
240
238
|
base,
|
|
241
239
|
rubric_path: RUBRIC_PATH,
|
|
242
240
|
...contract,
|
|
@@ -244,7 +242,7 @@ async function compose_brief(request: ComposeRequest): Promise<string> {
|
|
|
244
242
|
})
|
|
245
243
|
}
|
|
246
244
|
|
|
247
|
-
// **What is printed and what is recorded are two readings of one thing
|
|
245
|
+
// **What is printed and what is recorded are two readings of one thing**.
|
|
248
246
|
// `commit` is what the record stores and round 2 compares, and it has to be a commit: `change_base`
|
|
249
247
|
// degrades to the default-branch *name* when `merge-base` cannot answer, and two rounds storing that
|
|
250
248
|
// same name compare equal while the ref moves under them — the guard failing open, which is the
|
|
@@ -256,7 +254,7 @@ async function read_bases(): Promise<{ base: string; commit: string | undefined
|
|
|
256
254
|
return { base: commit ?? (await git_command.change_base()), commit }
|
|
257
255
|
}
|
|
258
256
|
|
|
259
|
-
// **The refusal goes to stderr and the exit code, never into the brief
|
|
257
|
+
// **The refusal goes to stderr and the exit code, never into the brief**.
|
|
260
258
|
// A line printed inside a brief is read by the review agent as one more fact about the tree; what has
|
|
261
259
|
// to happen here is that no brief is composed at all, since composing one is what starts round 1 —
|
|
262
260
|
// and this command is where `review:attest` mints the nonce a round is counted against, so there is
|
|
@@ -318,6 +316,7 @@ async function run_review(round: number, reading: ChangeReading): Promise<number
|
|
|
318
316
|
const resolved = agent_role_profile.resolve(agent_role_profile.REVIEWER)
|
|
319
317
|
|
|
320
318
|
if (resolved.kind === 'rejected') return report_error(resolved.note)
|
|
319
|
+
agent_role_profile.warn_of_default()
|
|
321
320
|
console.info(await compose_brief({ round, paths, tree, base, profile: resolved.profile }))
|
|
322
321
|
record_round_one(round, tree, commit)
|
|
323
322
|
record_briefed(round, tree, commit)
|
|
@@ -4,15 +4,13 @@ import { review_checkout, type ReviewCheckout } from './review-checkout'
|
|
|
4
4
|
import { review_diff_parts, type DiffParts } from './review-diff-parts'
|
|
5
5
|
|
|
6
6
|
// The text `josh review:brief` prints — the `/code-review` invocation, composed from what the run
|
|
7
|
-
// already knows
|
|
7
|
+
// already knows.
|
|
8
8
|
//
|
|
9
9
|
// **Why a command and not a paragraph in `prompts/review.md`.** `/code-review` runs in a forked
|
|
10
10
|
// process and reads none of this repository's documents; the only thing that reaches it is the
|
|
11
|
-
// argument it is invoked with.
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
// redefined round 2 as a verification pass **in a document the agent never opens**, which is why it
|
|
15
|
-
// cut nothing.
|
|
11
|
+
// argument it is invoked with. Without it a round re-runs the unit suite `josh gate` just passed,
|
|
12
|
+
// fumbles the runner (`npx vitest`, then a retry), and round 2 re-reads the whole diff — a rule
|
|
13
|
+
// written **in a document the agent never opens** cuts nothing.
|
|
16
14
|
//
|
|
17
15
|
// **What is mechanical and what is only an instruction.** The round-2 target is mechanical: the
|
|
18
16
|
// paths are computed from a digest comparison and handed over as the scope. The "already verified"
|
|
@@ -22,8 +20,8 @@ import { review_diff_parts, type DiffParts } from './review-diff-parts'
|
|
|
22
20
|
const TEST_COMMAND_LINE =
|
|
23
21
|
'- The unit suite is `pnpm josh test:unit`. Do not reach for `npx vitest`; it is not how this project runs them.'
|
|
24
22
|
|
|
25
|
-
// **The checkout block, and why the target below names a path instead of assuming one
|
|
26
|
-
//
|
|
23
|
+
// **The checkout block, and why the target below names a path instead of assuming one**.
|
|
24
|
+
// `/code-review` is forked by the harness and inherits the session's
|
|
27
25
|
// working directory, so during a lane run it starts in a tree that holds the previous child's
|
|
28
26
|
// already-merged code. Reading that tree, it finds nothing wrong and says so — and the run reads
|
|
29
27
|
// that silence as a clean review. Neither half of this block is a paragraph a person has to remember
|
|
@@ -41,7 +39,7 @@ function attest_line(nonce: string): string {
|
|
|
41
39
|
return `Attest before you report: run \`pnpm josh review:attest ${nonce}\` from the checkout you actually read. A non-zero exit means it was not the one above — report \`REVIEW TARGET MISMATCH\` and no findings. Never report "no findings" without that command having passed: a review of the wrong tree finds nothing wrong, and the run cannot tell that apart from approval (joshuafolkken/kit#1522).`
|
|
42
40
|
}
|
|
43
41
|
|
|
44
|
-
// **The rubric is handed over by path, not pasted in
|
|
42
|
+
// **The rubric is handed over by path, not pasted in**. `/code-review` runs
|
|
45
43
|
// in a forked process that reads none of this repository's documents, so the severity tests, the nine
|
|
46
44
|
// categories and the output format never reached it — the review scored the diff on whatever the
|
|
47
45
|
// forked skill happened to carry. The reviewer has file access (it already runs `git -C <root> …` and
|
|
@@ -49,7 +47,7 @@ function attest_line(nonce: string): string {
|
|
|
49
47
|
// and applied before anything is reported. Absolute because a forked agent resolves a relative path
|
|
50
48
|
// against the tree it was spawned in, which is the wrong one during a lane run.
|
|
51
49
|
//
|
|
52
|
-
// **The path is the kit package's, not the review checkout's
|
|
50
|
+
// **The path is the kit package's, not the review checkout's**. The rubric
|
|
53
51
|
// ships inside the kit package (`node_modules/@joshuafolkken/kit/prompts/`), not in a consumer's own
|
|
54
52
|
// tree — so deriving it from the review checkout root pointed at a `prompts/` a `docs/`-less consumer
|
|
55
53
|
// never receives, and the review ran without the scoring rules. The caller resolves it against the
|
|
@@ -71,7 +69,7 @@ function checkout_block(checkout: ReviewCheckout, nonce: string): string {
|
|
|
71
69
|
// `-C <root>` rather than a bare `git diff`, so the command works from whatever directory the
|
|
72
70
|
// forked agent happens to be sitting in rather than only from the right one.
|
|
73
71
|
//
|
|
74
|
-
// **The base is the merge base, not `main` itself
|
|
72
|
+
// **The base is the merge base, not `main` itself**. A linked work tree
|
|
75
73
|
// shares the `main` ref with every other lane, so a two-dot `git diff main` run in an unmerged lane
|
|
76
74
|
// lists whatever another lane merged in the meantime — in reverse. This line is a command the forked
|
|
77
75
|
// agent runs, so printing the old spelling would hand it exactly the mixed-in listing the reading
|
|
@@ -124,7 +122,7 @@ function verified_line(taken_at: string): string {
|
|
|
124
122
|
return `Already verified — do not re-run these:\n- lint, the type check, the spell check and the unit tests all passed on this exact tree at ${taken_at} (\`pnpm josh gate\`).`
|
|
125
123
|
}
|
|
126
124
|
|
|
127
|
-
// **The in-flight sentence claims no result, and that is the point
|
|
125
|
+
// **The in-flight sentence claims no result, and that is the point**. The
|
|
128
126
|
// gate and this review are started together, so the honest thing to say is that a gate is running —
|
|
129
127
|
// not that it passed. What it forbids is re-running the unit suite, which is wasted whether the gate
|
|
130
128
|
// ends green or red, and it names who joins the result so the reader knows the check is not being
|
|
@@ -139,7 +137,7 @@ function in_flight_line(taken_at: string): string {
|
|
|
139
137
|
// digests alone it would say a gate is running for as long as nobody edits that tree, about a process
|
|
140
138
|
// that no longer exists: exactly the state the record must never describe.
|
|
141
139
|
//
|
|
142
|
-
// **The written pid alone did not separate the two
|
|
140
|
+
// **The written pid alone did not separate the two**. It names whatever holds
|
|
143
141
|
// that number now, so once the operating system reissued it the abandoned marker passed the liveness
|
|
144
142
|
// probe again and this line went back to printing `Running now` about nothing — the same untrue
|
|
145
143
|
// sentence, reached by a longer route. The record therefore carries the writing process's start time
|
|
@@ -156,7 +154,7 @@ function live_marker(
|
|
|
156
154
|
return matched
|
|
157
155
|
}
|
|
158
156
|
|
|
159
|
-
// **Matching digests are not enough for the green claim
|
|
157
|
+
// **Matching digests are not enough for the green claim**. The map covers
|
|
160
158
|
// the paths the change makes changed, so a merge of the default branch that touches nothing the
|
|
161
159
|
// branch touches leaves every digest identical while the tree gains code the gate never read —
|
|
162
160
|
// and the brief would tell the reviewer that lint, the type check, the spell check and the unit tests
|
|
@@ -202,8 +200,8 @@ function format_paths(root: string, paths: ReadonlyArray<string>): string {
|
|
|
202
200
|
return paths.map((relative) => ` ${root}/${relative}`).join('\n')
|
|
203
201
|
}
|
|
204
202
|
|
|
205
|
-
// **An empty target has two readings, and only one of them is "nothing changed"
|
|
206
|
-
//
|
|
203
|
+
// **An empty target has two readings, and only one of them is "nothing changed"**.
|
|
204
|
+
// Since the delta is intersected with the change, round 1's fixes can be
|
|
207
205
|
// real and still leave no target — a fix that reverts a file to its base content takes that path out
|
|
208
206
|
// of `git diff` altogether. Printing "nothing changed since round 1" there would contradict the
|
|
209
207
|
// `Not in this change` list directly below it, which is the self-disagreement this whole change
|
|
@@ -219,10 +217,10 @@ function round_two_target(root: string, scope: RoundTwoScope): string {
|
|
|
219
217
|
return scope.dropped.length > 0 ? NOTHING_LEFT_LINE : EMPTY_DELTA_LINE
|
|
220
218
|
}
|
|
221
219
|
|
|
222
|
-
// **What round 2 is sent to read, reconciled against the change it is meant to cover
|
|
223
|
-
//
|
|
224
|
-
// maps, each one a diff against `change_base` **as it stood when that map was taken
|
|
225
|
-
//
|
|
220
|
+
// **What round 2 is sent to read, reconciled against the change it is meant to cover**.
|
|
221
|
+
// The delta alone is not that list. It is the difference between two file
|
|
222
|
+
// maps, each one a diff against `change_base` **as it stood when that map was taken**, so the record
|
|
223
|
+
// must name which commit that was. Move the base between the rounds, which is exactly what a
|
|
226
224
|
// resumed run's merge of the default branch does, and the two maps stop covering the same set of
|
|
227
225
|
// paths: their difference then names files the branch never touched and misses files it did.
|
|
228
226
|
//
|
|
@@ -247,8 +245,8 @@ function sorted_names(names: ReadonlyArray<string>): ReadonlyArray<string> {
|
|
|
247
245
|
}
|
|
248
246
|
|
|
249
247
|
// A record that cannot be compared widens the round to the whole change rather than narrowing it, so
|
|
250
|
-
// every path the change touches is a target
|
|
251
|
-
//
|
|
248
|
+
// every path the change touches is a target — the same direction as for a missing record, extended
|
|
249
|
+
// to a record that is present and unusable.
|
|
252
250
|
function whole_change_scope(tree: Record<string, string>): RoundTwoScope {
|
|
253
251
|
return {
|
|
254
252
|
recorded_at: undefined,
|
|
@@ -320,8 +318,7 @@ function reconciliation(root: string, base: string, scope: RoundTwoScope): Reado
|
|
|
320
318
|
]
|
|
321
319
|
}
|
|
322
320
|
|
|
323
|
-
// The snapshot's own timestamp, printed rather than assumed.
|
|
324
|
-
// is round 1's own — written once per run, and kept by a later round-1 invocation rather than retaken
|
|
321
|
+
// The snapshot's own timestamp, printed rather than assumed. The record is round 1's own — written once per run, and kept by a later round-1 invocation rather than retaken
|
|
325
322
|
// against the fixed tree — so this line says how far back the target below is measured from. A record
|
|
326
323
|
// left behind by a run that never reached `josh followup` makes the target wider, and its timestamp is
|
|
327
324
|
// the only thing that shows that from here.
|
|
@@ -358,8 +355,8 @@ function round_two_block(
|
|
|
358
355
|
return narrow_block(scope.recorded_at, scope, root, base)
|
|
359
356
|
}
|
|
360
357
|
|
|
361
|
-
// **A resumed round 1 reads what changed since the attested review, reusing round 2's reconciliation
|
|
362
|
-
//
|
|
358
|
+
// **A resumed round 1 reads what changed since the attested review, reusing round 2's reconciliation**.
|
|
359
|
+
// A ship that stopped and was re-issued briefed the whole change again, so
|
|
363
360
|
// the reviewer re-read every file the attested review had just read. The scope is the comparison round
|
|
364
361
|
// 2 makes, measured from the tree that review was briefed on. Every reading that cannot narrow falls back to the whole
|
|
365
362
|
// change: no record, a moved base, or an empty target. An empty target is included because a resumed
|
|
@@ -406,15 +403,15 @@ interface BriefInput {
|
|
|
406
403
|
checkout: ReviewCheckout
|
|
407
404
|
nonce: string
|
|
408
405
|
// The commit the change is measured against, resolved by the caller so the printed target carries
|
|
409
|
-
// a value rather than a subshell that can fail open
|
|
406
|
+
// a value rather than a subshell that can fail open.
|
|
410
407
|
base: string
|
|
411
408
|
// The rubric's absolute path, resolved by the caller against the kit package rather than the review
|
|
412
|
-
// checkout, so it resolves in a consumer that ships no `prompts/` of its own
|
|
409
|
+
// checkout, so it resolves in a consumer that ships no `prompts/` of its own.
|
|
413
410
|
rubric_path: string
|
|
414
|
-
// The tree a finished, clean review of this branch was briefed on, so round 1 is a resume
|
|
415
|
-
//
|
|
411
|
+
// The tree a finished, clean review of this branch was briefed on, so round 1 is a resume.
|
|
412
|
+
// Absent, round 1 reads the whole change.
|
|
416
413
|
resumed_from?: FileMapStamp | undefined
|
|
417
|
-
// The change written as parts under the Bash output cap
|
|
414
|
+
// The change written as parts under the Bash output cap. Absent when the
|
|
418
415
|
// write failed, and the target line alone then names the change.
|
|
419
416
|
diff?: { parts: DiffParts; cap: number } | undefined
|
|
420
417
|
}
|
|
@@ -435,7 +432,7 @@ function target_block(input: BriefInput): string {
|
|
|
435
432
|
return round_two_block(input.stamps.round_one, input.tree, input.checkout.root, input.base)
|
|
436
433
|
}
|
|
437
434
|
|
|
438
|
-
// **Only beside a whole-change target
|
|
435
|
+
// **Only beside a whole-change target**: each part is a path's diff against
|
|
439
436
|
// the base, so beside a narrowed round 2 or a resumed round 1 the list would hand the reviewer the
|
|
440
437
|
// code that narrowing exists to keep out of scope. Decided by the target actually printed, not by
|
|
441
438
|
// the round: every round that cannot narrow widens through `whole_change_target`, and that round
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { git_command } from '#scripts/git/git-command'
|
|
2
2
|
|
|
3
3
|
// The checkout `josh review:brief` is describing — the one thing the forked `/code-review` agent
|
|
4
|
-
// cannot work out for itself
|
|
4
|
+
// cannot work out for itself.
|
|
5
5
|
//
|
|
6
6
|
// **`/code-review` runs in a fork that inherits the *session's* working directory, not the run's.**
|
|
7
7
|
// Where the run implementing the change is a lane — a linked work tree under `.kit-lanes/` — that is
|
|
@@ -23,7 +23,7 @@ interface ReviewCheckout {
|
|
|
23
23
|
|
|
24
24
|
// Three git reads that do not depend on each other, so they are issued together rather than one after
|
|
25
25
|
// another: the brief is printed in front of a review the run is waiting on. The root is a near-instant
|
|
26
|
-
// synchronous `rev-parse
|
|
26
|
+
// synchronous `rev-parse`; the branch and head still overlap.
|
|
27
27
|
async function read_checkout(): Promise<ReviewCheckout> {
|
|
28
28
|
const [root, branch, head] = await Promise.all([
|
|
29
29
|
git_command.repository_root(),
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
// The change handed to the reviewer as files no larger than the Bash output cap
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
// `BASH_MAX_OUTPUT_LENGTH` came back as a truncated preview plus a saved file it then re-read, and both
|
|
5
|
-
// stayed in the cached prefix of every later request — 120 overflows and 68 re-reads in one review.
|
|
1
|
+
// The change handed to the reviewer as files no larger than the Bash output cap.
|
|
2
|
+
// A print past `BASH_MAX_OUTPUT_LENGTH` comes back as a truncated preview plus a saved file the
|
|
3
|
+
// reviewer then re-reads, and both stay in the cached prefix of every later request.
|
|
6
4
|
//
|
|
7
5
|
// **The diff is split, not shortened.** Each changed path gets its own parts, every part fits under the
|
|
8
6
|
// cap, and the parts of one path concatenate back to exactly its diff — so the scope a review covers
|
|
@@ -4,7 +4,7 @@ import { git_spawn } from '#scripts/git/git-spawn'
|
|
|
4
4
|
import { stamp_file } from '#scripts/josh/stamp-file'
|
|
5
5
|
import { review_diff_parts, type DiffParts } from './review-diff-parts'
|
|
6
6
|
|
|
7
|
-
// Writes the change as the parts `review-diff-parts.ts` cuts it into
|
|
7
|
+
// Writes the change as the parts `review-diff-parts.ts` cuts it into.
|
|
8
8
|
//
|
|
9
9
|
// **One diff per path, read the way the target line defines the change** — `git -C <root> diff
|
|
10
10
|
// <base> -- <path>` for a tracked path, and the file's own content for an untracked one, which no
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
2
|
+
|
|
1
3
|
// The review-finding line's grammar, its category vocabulary and the aggregation over it — the single
|
|
2
|
-
// place all three are defined
|
|
4
|
+
// place all three are defined. A `/code-review` round's findings evaporated
|
|
3
5
|
// the moment they were fixed, so no one could say which category recurred. They now land in the same
|
|
4
6
|
// append-only ledger the observation lines use (`.josh/observations/`), under a distinct `- rf:`
|
|
5
7
|
// prefix so `observation-ledger-line.ts`'s `- k:` grammar never treats them as its own — one ledger,
|
|
@@ -60,7 +62,7 @@ function is_valid_file(file: string): boolean {
|
|
|
60
62
|
}
|
|
61
63
|
|
|
62
64
|
function issue_field(issue: number): string {
|
|
63
|
-
return
|
|
65
|
+
return issue_cite.plain(issue)
|
|
64
66
|
}
|
|
65
67
|
|
|
66
68
|
function line_of(fields: ReadonlyArray<string>): string {
|
|
@@ -132,7 +134,7 @@ function zero_round_count(content: string): number {
|
|
|
132
134
|
|
|
133
135
|
// The issue a finding line is keyed to — its fifth field, the `#<N>` token — or `undefined` for a
|
|
134
136
|
// non-finding or malformed line. The record check reads this to ask whether a given issue's round was
|
|
135
|
-
// recorded at all
|
|
137
|
+
// recorded at all.
|
|
136
138
|
function issue_of(line: string): string | undefined {
|
|
137
139
|
const fields = line.trimStart().slice(FINDING_PREFIX.length).split(FIELD_SEPARATOR)
|
|
138
140
|
|
|
@@ -142,7 +144,7 @@ function issue_of(line: string): string | undefined {
|
|
|
142
144
|
// **A `none` zero-round line counts as recorded, exactly like a real finding line does.** The gate
|
|
143
145
|
// asks whether the round was recorded, not whether it found anything — reading the issue field, which
|
|
144
146
|
// a zero-finding line carries too, is what keeps a clean round's single line from reading as "nobody
|
|
145
|
-
// recorded this"
|
|
147
|
+
// recorded this".
|
|
146
148
|
function has_issue_record(content: string, issue: number): boolean {
|
|
147
149
|
const target = issue_field(issue)
|
|
148
150
|
|
|
@@ -158,6 +160,7 @@ const review_finding_ledger = {
|
|
|
158
160
|
is_finding_line,
|
|
159
161
|
is_severity,
|
|
160
162
|
is_valid_file,
|
|
163
|
+
SEVERITIES,
|
|
161
164
|
zero_round_count,
|
|
162
165
|
zero_round_line,
|
|
163
166
|
}
|
|
@@ -3,7 +3,7 @@ import { fileURLToPath } from 'node:url'
|
|
|
3
3
|
import { observation_ledger_home } from '#scripts/observations/observation-ledger-home'
|
|
4
4
|
import { review_finding_ledger, type CategoryCount } from './review-finding-ledger'
|
|
5
5
|
|
|
6
|
-
// `josh review:findings` — the reader over the review-finding ledger
|
|
6
|
+
// `josh review:findings` — the reader over the review-finding ledger. It
|
|
7
7
|
// prints each recurring category's count, most frequent first, and the number of rounds that recorded
|
|
8
8
|
// zero findings — the denominator that tells a genuinely quiet category apart from one nobody looked
|
|
9
9
|
// at. The write half is `pnpm josh review:record`; both read one grammar from `review-finding-ledger`.
|
|
@@ -26,7 +26,7 @@ function format_report(counts: ReadonlyArray<CategoryCount>, zero_rounds: number
|
|
|
26
26
|
return `findings by category:\n${body}\n${zero_line(zero_rounds)}`
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
// Every issue's file of the ledger directory is counted
|
|
29
|
+
// Every issue's file of the ledger directory is counted: a recurring category
|
|
30
30
|
// is one whichever issue recorded each sighting.
|
|
31
31
|
async function run(root: string = observation_ledger_home.ledger_root()): Promise<number> {
|
|
32
32
|
const content = (await observation_ledger_home.read(root)) ?? ''
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
// Which `/code-review` level a change is reviewed at, decided from the changed paths alone
|
|
2
|
-
// (joshuafolkken/kit#966).
|
|
1
|
+
// Which `/code-review` level a change is reviewed at, decided from the changed paths alone.
|
|
3
2
|
//
|
|
4
3
|
// **The decision takes no judgement.** "This one is small" is a judgement made under cost pressure,
|
|
5
4
|
// and cost pressure resolves it toward "small" exactly when a defect is most likely to be shipped —
|
|
@@ -24,11 +23,9 @@ const REDUCED_LEVEL: ReviewLevel = 'low'
|
|
|
24
23
|
// **Documentation is deliberately absent from this list**, which is the opposite of what the
|
|
25
24
|
// "Non-runtime updates" testing exception does with it, and the difference is not an oversight.
|
|
26
25
|
// That exception is about whether an automated test could have caught the defect; this is about
|
|
27
|
-
// whether a human reading the diff is the only thing that can.
|
|
28
|
-
//
|
|
29
|
-
//
|
|
30
|
-
// removed, and citations naming the wrong file, in artifacts distributed to every consumer. No test
|
|
31
|
-
// covered them, because prose is what they were.
|
|
26
|
+
// whether a human reading the diff is the only thing that can. Documentation-only diffs carry real
|
|
27
|
+
// defects — dangling pointers into removed sections, and citations naming the wrong file, in
|
|
28
|
+
// artifacts distributed to every consumer — that no test covers, because prose is what they are.
|
|
32
29
|
const INERT_PATHS: ReadonlyArray<string> = [
|
|
33
30
|
'.editorconfig',
|
|
34
31
|
'.gitignore',
|