@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,31 +1,45 @@
|
|
|
1
1
|
#!/usr/bin/env tsx
|
|
2
2
|
import { fileURLToPath } from 'node:url'
|
|
3
|
+
import { git_gh_issue_write } from '#scripts/gh/git-gh-issue-write'
|
|
4
|
+
import { issue_number_shape } from '#scripts/issue/issue-number-shape'
|
|
3
5
|
import { cli_flags } from '#scripts/lib/cli-flags'
|
|
4
6
|
import { observation_ledger_home } from '#scripts/observations/observation-ledger-home'
|
|
5
7
|
import { review_finding_ledger, type Finding } from './review-finding-ledger'
|
|
6
8
|
import { review_record, type RecordVerdict } from './review-record'
|
|
7
9
|
|
|
8
10
|
// `josh review:record --issue <N> [<category>:<severity>:<file> ...]` — the one write path for a
|
|
9
|
-
// `/code-review` round's findings
|
|
11
|
+
// `/code-review` round's findings. It appends a `- rf:` line per finding to
|
|
10
12
|
// the issue's own file of the observation ledger, which the run's commit carries like any other
|
|
11
13
|
// ledger change. **A call with no findings is a zero-finding round, and it still writes one line** — so the
|
|
12
14
|
// round that found nothing is recorded rather than mistaken for a round nobody reviewed.
|
|
13
15
|
//
|
|
16
|
+
// **`--comment` records a round that ran after the pull request opened**: the same lines go to the
|
|
17
|
+
// issue as a comment and nothing is appended. A line written to the tree then has no commit of the
|
|
18
|
+
// run's left to ride, so `pnpm josh followup` would push it onto the open pull request and its CI
|
|
19
|
+
// would start over.
|
|
20
|
+
//
|
|
14
21
|
// `josh review:record --check --issue <N>` is the read half `pnpm josh followup` runs before it
|
|
15
|
-
// merges
|
|
22
|
+
// merges: `ok` / `not-required` exit zero, `missing` exits non-zero so the
|
|
16
23
|
// merge is refused until the round is recorded. It mirrors `josh review:attest --check`.
|
|
17
24
|
|
|
18
25
|
const ARGV_OFFSET = 2
|
|
19
26
|
const FAILURE_EXIT_CODE = 1
|
|
20
|
-
const DATE_END = 10
|
|
21
27
|
const USAGE =
|
|
22
|
-
'Usage: josh review:record --issue <N> [<category>:<severity>:<file> ...] | josh review:record --check --issue <N>'
|
|
28
|
+
'Usage: josh review:record --issue <N> [--comment] [<category>:<severity>:<file> ...] | josh review:record --check --issue <N>'
|
|
29
|
+
const FILE_HINT = ' <file>: the cited path, optionally with :line'
|
|
23
30
|
const CHECK_USAGE = 'Usage: josh review:record --check --issue <N>'
|
|
24
31
|
const RECORDED_LINE = 'Recorded: the review round for this issue is in the ledger.'
|
|
25
32
|
const NOT_REQUIRED_LINE =
|
|
26
33
|
'No review-finding ledger is kept in this checkout, so there is nothing to check.'
|
|
27
|
-
const
|
|
28
|
-
const
|
|
34
|
+
const COMMENT_HEADING = '### Review round recorded after the pull request opened'
|
|
35
|
+
const COMMENT_NOTE =
|
|
36
|
+
'Kept here rather than in the observation ledger: a line appended after the commit would be pushed onto the open pull request and restart its CI.'
|
|
37
|
+
const CODE_FENCE = '```'
|
|
38
|
+
const OPTIONS = {
|
|
39
|
+
issue: { type: 'string' },
|
|
40
|
+
check: { type: 'boolean' },
|
|
41
|
+
comment: { type: 'boolean' },
|
|
42
|
+
} as const
|
|
29
43
|
|
|
30
44
|
interface Request {
|
|
31
45
|
issue: number
|
|
@@ -34,6 +48,7 @@ interface Request {
|
|
|
34
48
|
|
|
35
49
|
interface Parsed {
|
|
36
50
|
check: boolean
|
|
51
|
+
comment: boolean
|
|
37
52
|
issue: string | undefined
|
|
38
53
|
positionals: ReadonlyArray<string>
|
|
39
54
|
}
|
|
@@ -77,6 +92,7 @@ function parse_argv(argv: ReadonlyArray<string>): Parsed | undefined {
|
|
|
77
92
|
|
|
78
93
|
return {
|
|
79
94
|
check: parsed.values.check === true,
|
|
95
|
+
comment: parsed.values.comment === true,
|
|
80
96
|
issue: parsed.values.issue,
|
|
81
97
|
positionals: parsed.positionals,
|
|
82
98
|
}
|
|
@@ -85,15 +101,26 @@ function parse_argv(argv: ReadonlyArray<string>): Parsed | undefined {
|
|
|
85
101
|
function to_request(parsed: Parsed): Request | undefined {
|
|
86
102
|
const { issue } = parsed
|
|
87
103
|
|
|
88
|
-
if (issue === undefined || !
|
|
104
|
+
if (issue === undefined || !issue_number_shape.ISSUE_NUMBER_PATTERN.test(issue)) return undefined
|
|
89
105
|
|
|
90
106
|
const findings = parse_findings(parsed.positionals)
|
|
91
107
|
|
|
92
108
|
return findings === undefined ? undefined : { issue: Number(issue), findings }
|
|
93
109
|
}
|
|
94
110
|
|
|
95
|
-
|
|
96
|
-
|
|
111
|
+
// The accepted values are built from the ledger's own vocabulary, so a
|
|
112
|
+
// refused spec names what would have been accepted and a new category appears here unedited.
|
|
113
|
+
function accepted_values(placeholder: string, values: ReadonlyArray<string>): string {
|
|
114
|
+
return ` ${placeholder}: ${values.join(' | ')}`
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function usage_text(): string {
|
|
118
|
+
return [
|
|
119
|
+
USAGE,
|
|
120
|
+
accepted_values('<category>', review_finding_ledger.CATEGORIES),
|
|
121
|
+
accepted_values('<severity>', review_finding_ledger.SEVERITIES),
|
|
122
|
+
FILE_HINT,
|
|
123
|
+
].join('\n')
|
|
97
124
|
}
|
|
98
125
|
|
|
99
126
|
function build_lines(request: Request, date: string): ReadonlyArray<string> {
|
|
@@ -115,7 +142,7 @@ function check_line(verdict: RecordVerdict): string {
|
|
|
115
142
|
}
|
|
116
143
|
|
|
117
144
|
async function run_check(issue: string | undefined, root: string): Promise<number> {
|
|
118
|
-
if (issue === undefined || !
|
|
145
|
+
if (issue === undefined || !issue_number_shape.ISSUE_NUMBER_PATTERN.test(issue)) {
|
|
119
146
|
console.error(CHECK_USAGE)
|
|
120
147
|
|
|
121
148
|
return FAILURE_EXIT_CODE
|
|
@@ -134,18 +161,41 @@ async function run_check(issue: string | undefined, root: string): Promise<numbe
|
|
|
134
161
|
return FAILURE_EXIT_CODE
|
|
135
162
|
}
|
|
136
163
|
|
|
137
|
-
|
|
164
|
+
function comment_body(lines: ReadonlyArray<string>): string {
|
|
165
|
+
return [COMMENT_HEADING, '', COMMENT_NOTE, '', CODE_FENCE, ...lines, CODE_FENCE].join('\n')
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// **A comment that could not be posted fails the record**: it is the round's only copy, so a
|
|
169
|
+
// swallowed refusal would read as a recorded round that exists nowhere.
|
|
170
|
+
async function post_comment(issue: number, lines: ReadonlyArray<string>): Promise<number> {
|
|
171
|
+
try {
|
|
172
|
+
const url = await git_gh_issue_write.issue_comment(String(issue), comment_body(lines))
|
|
173
|
+
|
|
174
|
+
console.info(`Recorded ${String(lines.length)} review-finding line(s) in ${url.trim()}.`)
|
|
175
|
+
|
|
176
|
+
return 0
|
|
177
|
+
} catch (error) {
|
|
178
|
+
console.error(error instanceof Error ? error.message : String(error))
|
|
179
|
+
|
|
180
|
+
return FAILURE_EXIT_CODE
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// The round lands in its own issue's file, so two lanes recording at once
|
|
138
185
|
// write two files, and their pull requests never conflict on the ledger.
|
|
139
186
|
async function run_record(parsed: Parsed, now: Date, root: string): Promise<number> {
|
|
140
187
|
const request = to_request(parsed)
|
|
141
188
|
|
|
142
189
|
if (request === undefined) {
|
|
143
|
-
console.error(
|
|
190
|
+
console.error(usage_text())
|
|
144
191
|
|
|
145
192
|
return FAILURE_EXIT_CODE
|
|
146
193
|
}
|
|
147
194
|
|
|
148
|
-
const lines = build_lines(request,
|
|
195
|
+
const lines = build_lines(request, observation_ledger_home.ledger_date(now))
|
|
196
|
+
|
|
197
|
+
if (parsed.comment) return await post_comment(request.issue, lines)
|
|
198
|
+
|
|
149
199
|
const ledger_path = observation_ledger_home.issue_path(request.issue, root)
|
|
150
200
|
|
|
151
201
|
await observation_ledger_home.append(ledger_path, lines)
|
|
@@ -154,7 +204,7 @@ async function run_record(parsed: Parsed, now: Date, root: string): Promise<numb
|
|
|
154
204
|
return 0
|
|
155
205
|
}
|
|
156
206
|
|
|
157
|
-
// **The default is the work tree the command runs in, a lane's inside a lane
|
|
207
|
+
// **The default is the work tree the command runs in, a lane's inside a lane**.
|
|
158
208
|
// The line rides that tree's own commit or `pnpm josh followup`'s pre-merge ledger commit, and
|
|
159
209
|
// `--check` reads the same tree, so the two halves can never disagree about where the round is.
|
|
160
210
|
async function run(
|
|
@@ -165,7 +215,7 @@ async function run(
|
|
|
165
215
|
const parsed = parse_argv(argv)
|
|
166
216
|
|
|
167
217
|
if (parsed === undefined) {
|
|
168
|
-
console.error(
|
|
218
|
+
console.error(usage_text())
|
|
169
219
|
|
|
170
220
|
return FAILURE_EXIT_CODE
|
|
171
221
|
}
|
|
@@ -179,7 +229,14 @@ async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
|
179
229
|
process.exitCode = await run(argv, new Date())
|
|
180
230
|
}
|
|
181
231
|
|
|
182
|
-
const review_record_cli = {
|
|
232
|
+
const review_record_cli = {
|
|
233
|
+
accepted_values,
|
|
234
|
+
build_lines,
|
|
235
|
+
comment_body,
|
|
236
|
+
parse_finding,
|
|
237
|
+
run,
|
|
238
|
+
usage_text,
|
|
239
|
+
}
|
|
183
240
|
|
|
184
241
|
if (process.argv[1] === fileURLToPath(import.meta.url)) await main(process.argv.slice(ARGV_OFFSET))
|
|
185
242
|
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { session_cite } from '#scripts/issue/session-cite'
|
|
1
2
|
import { observation_ledger_home } from '#scripts/observations/observation-ledger-home'
|
|
2
3
|
import { review_finding_ledger } from './review-finding-ledger'
|
|
3
4
|
|
|
4
|
-
// The gate that refuses a merge until the `/code-review` round was recorded
|
|
5
|
+
// The gate that refuses a merge until the `/code-review` round was recorded.
|
|
5
6
|
//
|
|
6
7
|
// **The instruction was prose, and prose failed.** `review:record` is the one write path for a
|
|
7
|
-
// round's findings
|
|
8
|
+
// round's findings, but nothing enforced the call — so across eleven merges
|
|
8
9
|
// after the instruction landed, it was never run once, and the recurrence ledger stayed blind. This
|
|
9
10
|
// module is the mechanical counterpart to `review-attest`'s `--check`, keyed on the issue rather than
|
|
10
11
|
// on a checkout: a round that left no `- rf:` line for its issue is treated as no review at all.
|
|
@@ -29,7 +30,7 @@ interface RecordVerdict {
|
|
|
29
30
|
}
|
|
30
31
|
|
|
31
32
|
// The default is the work tree the check runs in — the one `review:record` wrote to, a lane's in a
|
|
32
|
-
// lane
|
|
33
|
+
// lane. Every file of the directory is read, so the round is found whichever
|
|
33
34
|
// file holds it; a directory that is not there answers `undefined`, a ledger this checkout does not
|
|
34
35
|
// keep, which becomes `not-required`.
|
|
35
36
|
async function check(
|
|
@@ -51,7 +52,7 @@ const REMEDY =
|
|
|
51
52
|
'Record the round with `pnpm josh review:record --issue <N> [<category>:<severity>:<file> ...]` — a clean round is a call with no findings, which records one zero-finding line — then reissue the merge.'
|
|
52
53
|
|
|
53
54
|
function refusal_message(issue: number): string {
|
|
54
|
-
return [MISSING_REASON, `Issue:
|
|
55
|
+
return [MISSING_REASON, `Issue: ${session_cite.issue(issue)}`, REMEDY].join('\n')
|
|
55
56
|
}
|
|
56
57
|
|
|
57
58
|
const review_record = {
|
|
@@ -6,7 +6,7 @@ import { review_round2 } from './review-round2'
|
|
|
6
6
|
import { review_stamps } from './review-stamps'
|
|
7
7
|
import { review_tree } from './review-tree'
|
|
8
8
|
|
|
9
|
-
// `josh review:round2` — say whether the second review round is due
|
|
9
|
+
// `josh review:round2` — say whether the second review round is due.
|
|
10
10
|
//
|
|
11
11
|
// A command rather than a paragraph in `prompts/review.md`, for the reason `josh review:level` is a
|
|
12
12
|
// command: a rule an agent applies from memory is a rule an agent can talk
|
|
@@ -56,8 +56,7 @@ async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
|
56
56
|
const { verdict, reason } = review_round2.decide({
|
|
57
57
|
// The commit the tree below is a diff against, so the snapshot can be refused when it was taken
|
|
58
58
|
// against a different one — and the resolved commit rather than `git_command.change_base`, whose
|
|
59
|
-
// fallback is a ref name that moves and would compare equal to itself
|
|
60
|
-
// (joshuafolkken/kit#1537).
|
|
59
|
+
// fallback is a ref name that moves and would compare equal to itself.
|
|
61
60
|
base: await change_base.resolved(),
|
|
62
61
|
is_round_one_closed: options.is_round_one_closed,
|
|
63
62
|
snapshot: review_stamps.round_one_stamp.read(),
|
|
@@ -2,27 +2,21 @@ import { file_map_stamp, type FileMapStamp } from '#scripts/josh/file-map-stamp'
|
|
|
2
2
|
import { path_decision } from '#scripts/josh/path-decision'
|
|
3
3
|
import { review_level } from './review-level'
|
|
4
4
|
|
|
5
|
-
// Whether the second review round runs at all
|
|
5
|
+
// Whether the second review round runs at all.
|
|
6
6
|
//
|
|
7
|
-
// **
|
|
8
|
-
//
|
|
9
|
-
// `prompts/review.md` → "The narrowing is real in scope and does not show in the wall clock" recorded
|
|
10
|
-
// that neither moved the wall clock. Those records answer "narrow round 2"; none of them answers "do
|
|
11
|
-
// not run it", because none measured a run that skipped one.
|
|
7
|
+
// **Narrowing round 2 does not show in the wall clock** (`prompts/review.md` → "The narrowing is real
|
|
8
|
+
// in scope and does not show in the wall clock"), so this asks whether it is due at all.
|
|
12
9
|
//
|
|
13
|
-
// **The two arms are the two states in which
|
|
14
|
-
//
|
|
15
|
-
// is structural. Arm A applies where there is no fix code — the findings closed without an edit — so
|
|
10
|
+
// **The two arms are the two states in which round 2's reason does not arise.** Round 2 exists
|
|
11
|
+
// because round 1's *fix code* is unreviewed, and that is structural. Arm A applies where there is no fix code — the findings closed without an edit — so
|
|
16
12
|
// the premise is absent rather than overridden. Arm B applies where the fix code neither executes,
|
|
17
13
|
// nor instructs, nor ships, which is `review-level.ts`'s inert set: the same three ways a defect in
|
|
18
14
|
// this repository escapes, read here for the fix delta instead of the whole change.
|
|
19
15
|
//
|
|
20
|
-
// **The wider line
|
|
21
|
-
//
|
|
22
|
-
//
|
|
23
|
-
//
|
|
24
|
-
// to every consumer — that no test covered. A prompt fix and a test fix are exactly where the review
|
|
25
|
-
// is the only detector, so exempting them would remove the round in the case it earns its keep.
|
|
16
|
+
// **The wider line — "the fix delta touches no runtime code path" — is not adopted**: as
|
|
17
|
+
// `review-level.ts` records, documentation-only diffs carry real defects no test covers. A prompt
|
|
18
|
+
// fix and a test fix are exactly where the review is the only detector, so exempting them would
|
|
19
|
+
// remove the round in the case it earns its keep.
|
|
26
20
|
|
|
27
21
|
type RoundTwoVerdict = 'required' | 'skip'
|
|
28
22
|
|
|
@@ -44,7 +38,7 @@ const BASE_MOVED_REASON =
|
|
|
44
38
|
'the change base moved since round 1 was recorded, so the two file maps do not cover the same set of paths and their difference is not the fix delta — the round runs rather than reading that difference as one'
|
|
45
39
|
|
|
46
40
|
interface RoundTwoInput {
|
|
47
|
-
// **The commit the tree above is a diff against
|
|
41
|
+
// **The commit the tree above is a diff against**. This decision reads the
|
|
48
42
|
// same digest comparison the brief's round-2 target does, so it inherits the same failure: taken
|
|
49
43
|
// against two different bases, the two maps do not cover the same set of paths, and an empty or
|
|
50
44
|
// inert-looking delta is then no evidence at all about what round 1 fixed. Here that evidence buys
|
|
@@ -68,11 +62,9 @@ interface RoundTwoDecision {
|
|
|
68
62
|
}
|
|
69
63
|
|
|
70
64
|
// **The snapshot's own timestamp travels with the answer**, the way `review-brief.ts` prints it
|
|
71
|
-
// beside a round-2 target.
|
|
72
|
-
//
|
|
73
|
-
//
|
|
74
|
-
// once per run and kept thereafter, which leaves "round 1 wrote no fix code" as the only reading of
|
|
75
|
-
// an empty delta. The timestamp stays in the reason because a record can still **outlive** its run —
|
|
65
|
+
// beside a round-2 target. The record is written once per run and kept thereafter, so a bare
|
|
66
|
+
// `josh review:brief` cannot retake it after the fixes, which leaves "round 1 wrote no fix code" as
|
|
67
|
+
// the only reading of an empty delta. The timestamp stays in the reason because a record can still **outlive** its run —
|
|
76
68
|
// `josh followup` is what clears it — and a delta measured from an earlier run's record is wider
|
|
77
69
|
// rather than narrower, which a reader can only see from when that record was taken.
|
|
78
70
|
function empty_reason(taken_at: string): string {
|
|
@@ -1,58 +1,12 @@
|
|
|
1
1
|
import { PROJECT_ROOT } from '#scripts/init/init-paths'
|
|
2
2
|
import { file_map_stamp, type FileMapStampAccess } from '#scripts/josh/file-map-stamp'
|
|
3
3
|
|
|
4
|
-
// The
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
// the
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
// **The in-flight marker** exists only while `josh gate` is running, and answers a question the gate
|
|
12
|
-
// stamp cannot: the review and the gate now start together, so at the moment the brief is composed
|
|
13
|
-
// the checks have usually not finished (joshuafolkken/kit#1242). Without it that state is
|
|
14
|
-
// indistinguishable from "no gate was ever run", and the review agent re-runs the unit suite the run
|
|
15
|
-
// is already running — the exact cost joshuafolkken/kit#1241 removed. **It asserts nothing about the
|
|
16
|
-
// result**, only that a gate was started on this tree and the run joins it before committing.
|
|
17
|
-
//
|
|
18
|
-
// **The marker names its writer by pid *and* start time** (joshuafolkken/kit#1245). A pid on its own
|
|
19
|
-
// is not a process: an interrupted gate leaves its marker behind, and once the operating system
|
|
20
|
-
// reissues that pid the liveness probe passes again and the marker resumes asserting a gate that
|
|
21
|
-
// ended. The pair closes that, because a reissued pid necessarily started after the record was
|
|
22
|
-
// written. **The marker was not made weaker to fix it** — dropping it, or having the brief ignore it,
|
|
23
|
-
// would put the re-run joshuafolkken/kit#1242 removed straight back.
|
|
24
|
-
//
|
|
25
|
-
// **A marker whose gate is gone is left where it is, and that is the decision rather than an
|
|
26
|
-
// oversight** (joshuafolkken/kit#1245's second question). Three things make leaving it correct here.
|
|
27
|
-
// The record is keyed per checkout, so exactly one file exists and nothing accumulates; the next
|
|
28
|
-
// `josh gate` overwrites it, since `write_stamp` unlinks before it creates; and the identity check
|
|
29
|
-
// makes a leftover inert for as long as it sits there. Removing it from the reader would buy none of
|
|
30
|
-
// that and would cost the one thing that matters: the reader deletes on "not running", which is also
|
|
31
|
-
// the answer a platform that cannot report a start time gives for a gate that **is** running — so the
|
|
32
|
-
// sweep would delete live markers there, and the next brief of that same run would lose the in-flight
|
|
33
|
-
// sentence. `unit-worker-share.ts` sweeps and is not inconsistent with this: its markers are keyed per
|
|
34
|
-
// pid, so they accumulate without bound, and that is what a sweep is for.
|
|
35
|
-
//
|
|
36
|
-
// **The round-1 snapshot** is written by the brief itself, so that `--round 2` can name the fix
|
|
37
|
-
// delta by comparison rather than by an agent recalling which files it edited.
|
|
38
|
-
//
|
|
39
|
-
// Both key on `PROJECT_ROOT` rather than the package directory: a globally installed `josh` has one
|
|
40
|
-
// package directory for every project on the machine, so keying on it would let a run in one project
|
|
41
|
-
// answer for another (the distinction joshuafolkken/kit#1215 drew for `josh latest:scope`).
|
|
42
|
-
//
|
|
43
|
-
// **`PROJECT_ROOT` is `process.cwd()`, so the two commands must run from the same directory to share
|
|
44
|
-
// a record.** That is deliberate rather than overlooked: run from different directories they simply
|
|
45
|
-
// miss each other, the brief finds no record, and it prints `Not verified` — the safe direction. The
|
|
46
|
-
// tree *inside* the record cannot be left to `cwd()` the same way, because there a mismatch resolves
|
|
47
|
-
// to "every file absent" on both sides and compares equal, so `review-tree.ts` asks git for the
|
|
48
|
-
// repository root instead.
|
|
49
|
-
|
|
50
|
-
// **The two scoped records** answer "were `josh lint:related` and `josh test:related` green on this
|
|
51
|
-
// exact tree" (joshuafolkken/kit#1511). They are separate from the gate stamp because they claim
|
|
52
|
-
// something narrower — the changed files rather than the whole project, and two checks rather than
|
|
53
|
-
// four — and folding them into one record would let a green from either half stand for the other.
|
|
54
|
-
// They are read by `scoped-green.ts`, which is where what they mean is written down; they live here
|
|
55
|
-
// because a stamp prefix declared anywhere else is a second place to look for the same kind of file.
|
|
4
|
+
// The records `josh review:brief` reads, keyed on `PROJECT_ROOT` so a global `josh` never answers for
|
|
5
|
+
// another project. Gate stamp: the four checks were green on this exact tree. In-flight marker: a gate
|
|
6
|
+
// is running on this tree (it asserts no result); it names its writer by pid and start time, so a
|
|
7
|
+
// reissued pid cannot revive it, and a stale one is left for the next gate to overwrite. Round-1
|
|
8
|
+
// snapshot: the tree `--round 2` measures the fix delta against.
|
|
9
|
+
// The scoped stamps claim less than the gate stamp (changed files, two checks), so they stay separate.
|
|
56
10
|
const LINT_RELATED_PREFIX = 'josh-lint-related-stamp-'
|
|
57
11
|
const TEST_RELATED_PREFIX = 'josh-test-related-stamp-'
|
|
58
12
|
|
|
@@ -64,9 +18,7 @@ const BRIEFED_PREFIX = 'josh-review-briefed-'
|
|
|
64
18
|
const gate_stamp: FileMapStampAccess = file_map_stamp.create(GATE_PREFIX, PROJECT_ROOT)
|
|
65
19
|
const in_flight_stamp: FileMapStampAccess = file_map_stamp.create(IN_FLIGHT_PREFIX, PROJECT_ROOT)
|
|
66
20
|
const round_one_stamp: FileMapStampAccess = file_map_stamp.create(ROUND_ONE_PREFIX, PROJECT_ROOT)
|
|
67
|
-
//
|
|
68
|
-
// The round-1 snapshot is kept from the first brief of a run, so it is not the tree a later review
|
|
69
|
-
// read — a resume narrowed against it would skip a file put back to that older content.
|
|
21
|
+
// Retaken on every brief: the round-1 snapshot is not the tree a later review read.
|
|
70
22
|
const briefed_stamp: FileMapStampAccess = file_map_stamp.create(BRIEFED_PREFIX, PROJECT_ROOT)
|
|
71
23
|
const lint_related_stamp: FileMapStampAccess = file_map_stamp.create(
|
|
72
24
|
LINT_RELATED_PREFIX,
|
|
@@ -77,22 +29,8 @@ const test_related_stamp: FileMapStampAccess = file_map_stamp.create(
|
|
|
77
29
|
PROJECT_ROOT,
|
|
78
30
|
)
|
|
79
31
|
|
|
80
|
-
//
|
|
81
|
-
//
|
|
82
|
-
// would be the record the **next** run's fix delta is measured against — so the run that ends removes
|
|
83
|
-
// it, and `josh followup` is where a run ends. That is the answer to "the same run or a new one" the
|
|
84
|
-
// retake guard needs, taken from the event itself rather than from a proxy for it.
|
|
85
|
-
//
|
|
86
|
-
// **Only one of the two directions is safe, which is why the caller is a single place.** A record
|
|
87
|
-
// this never reaches — a run that stopped before `followup`, a `--no-merge` invocation, a `halfrun`,
|
|
88
|
-
// a review run on its own — is measured from further back, so the next run's delta is wider and the
|
|
89
|
-
// answer is `required`. **Removing one out of turn is the unsafe direction**: the next round-1 brief
|
|
90
|
-
// finds nothing and writes a fresh record against the already-fixed tree, and arm A then fires on
|
|
91
|
-
// unreviewed fix code — the defect joshuafolkken/kit#1441 closed, reintroduced from the other side.
|
|
92
|
-
// So this is called from the end of a run that **merged**, and from nowhere else.
|
|
93
|
-
//
|
|
94
|
-
// Swallowed, and the caller is why: by the time this runs the pull request has already merged, so a
|
|
95
|
-
// temp-directory problem must not turn a completed run into a failed one.
|
|
32
|
+
// Called only from the end of a merged run: a leftover widens the next delta (safe), while an early
|
|
33
|
+
// removal lets round 1 re-snapshot an already-fixed tree (unsafe). Swallowed — the PR already merged.
|
|
96
34
|
function clear_round_one(target?: string): void {
|
|
97
35
|
try {
|
|
98
36
|
round_one_stamp.remove(target)
|
|
@@ -5,8 +5,7 @@ import { git_command } from '#scripts/git/git-command'
|
|
|
5
5
|
import { stamp_file } from '#scripts/josh/stamp-file'
|
|
6
6
|
import { observation_ledger } from '#scripts/observations/observation-ledger'
|
|
7
7
|
|
|
8
|
-
// The tree `josh review:brief` records: every path the change touches, and the digest of its content
|
|
9
|
-
// (joshuafolkken/kit#1241).
|
|
8
|
+
// The tree `josh review:brief` records: every path the change touches, and the digest of its content.
|
|
10
9
|
//
|
|
11
10
|
// The path list is `#scripts/git/changed-paths`', the same reading `josh review:level` decides from
|
|
12
11
|
// — a second definition of "changed" would let the brief describe a different change from the level
|
|
@@ -33,11 +32,11 @@ function digest_of(root: string, relative: string): string {
|
|
|
33
32
|
// stored stamp be compared against a fresh reading without a normalization step in between.
|
|
34
33
|
//
|
|
35
34
|
// **The observation ledger is left out of the map**, for the reason `hook-gate-reuse.ts` drops it from
|
|
36
|
-
// the status it reads: it is no code any check runs
|
|
35
|
+
// the status it reads: it is no code any check runs. Kept in, a review's line
|
|
37
36
|
// appended after the gate moved the map, so the ledger commit `pnpm josh followup` pushes carried a
|
|
38
37
|
// tree the record no longer matched — the pre-push hook re-ran the whole unit suite inside the push's
|
|
39
38
|
// 120-second budget, the timed-out push was retried over the still-running suite, and the commit's
|
|
40
|
-
// undo then moved the tree under both
|
|
39
|
+
// undo then moved the tree under both. Filtered here, every reader of the map
|
|
41
40
|
// — the gate's record, both hooks, the brief and the round-2 fix delta — agrees on it.
|
|
42
41
|
function tree_of(root: string, paths: ReadonlyArray<string>): Record<string, string> {
|
|
43
42
|
const sorted = paths
|
|
@@ -54,7 +53,7 @@ function tree_of(root: string, paths: ReadonlyArray<string>): Record<string, str
|
|
|
54
53
|
// say the gate had verified an arbitrarily edited tree, and `--round 2` would report an empty fix
|
|
55
54
|
// delta. **A defect that answers "all clear" is the one shape this record cannot take**, which is why
|
|
56
55
|
// the root is resolved rather than assumed (measured from `scripts/`: 18 of 25 entries `absent`).
|
|
57
|
-
// The observation ledger is dropped inside `tree_of`, above
|
|
56
|
+
// The observation ledger is dropped inside `tree_of`, above.
|
|
58
57
|
async function read_changed_tree(
|
|
59
58
|
paths?: ReadonlyArray<string>,
|
|
60
59
|
root?: string,
|
|
@@ -4,11 +4,11 @@ import { time_shell } from '#scripts/time-runtime/time-shell'
|
|
|
4
4
|
import { shell_segments } from './shell-segments'
|
|
5
5
|
|
|
6
6
|
// The trigger helpers the enumeration in `delivered-rules.ts` is built from, held here so a rule
|
|
7
|
-
// that lives in its own module can build its own row without importing the enumeration back
|
|
8
|
-
//
|
|
7
|
+
// that lives in its own module can build its own row without importing the enumeration back.
|
|
8
|
+
// `is_issue_filing` is the one three rows share — the WIP cap, the per-run
|
|
9
9
|
// filing cap and the fold — so it could not stay a private function of the file that spreads their rows.
|
|
10
10
|
|
|
11
|
-
// **Only `Bash`, and the omission is deliberate
|
|
11
|
+
// **Only `Bash`, and the omission is deliberate**: Claude Code denies one
|
|
12
12
|
// call of a turn and runs the rest, so a refused `Edit` would leave its siblings applied and itself
|
|
13
13
|
// not. Every rule delivered by the enumeration is therefore one whose binding moment is a shell call —
|
|
14
14
|
// so the tool-name guard belongs here rather than to each row, and a row states only what it looks for
|
|
@@ -34,7 +34,7 @@ const ISSUES_ENDPOINT = /repos\/[^\s'"]*\/issues(?=$|["'\s])/u
|
|
|
34
34
|
const TITLE_FIELD = /(?:-f|-F|--field|--raw-field)\s*'?title=/u
|
|
35
35
|
|
|
36
36
|
// A filing made by hand rather than through `josh issue:file` — the call the `direct-filing` row
|
|
37
|
-
// refuses on every occurrence
|
|
37
|
+
// refuses on every occurrence.
|
|
38
38
|
function is_direct_filing(command: string): boolean {
|
|
39
39
|
if (ISSUE_CREATE_COMMAND.test(command)) return true
|
|
40
40
|
|
|
@@ -3,7 +3,7 @@ import { oracle_tokens } from './decision-oracle-tokens'
|
|
|
3
3
|
|
|
4
4
|
// The batch oracles — the lane cut, the backlog budget and offer, the epic and post-merge steps, and
|
|
5
5
|
// `run:step` — kept beside the enumeration rather than inside it because `decision-oracle.ts` reached
|
|
6
|
-
// its file-size limit
|
|
6
|
+
// its file-size limit. They are one contiguous run of `DECISION_ORACLES`, so
|
|
7
7
|
// spreading them back in at the same position keeps the printed listing's order unchanged.
|
|
8
8
|
|
|
9
9
|
const {
|
|
@@ -24,11 +24,10 @@ const PRE_GATE_CUT_MD = '.claude/skills/workflow-commands/pre-gate-cut.md'
|
|
|
24
24
|
const BACKLOGRUN_MD = '.claude/skills/workflow-commands/backlogrun.md'
|
|
25
25
|
|
|
26
26
|
// The command reference in `docs/josh-commands.md` — one section per command, headed by the command
|
|
27
|
-
// itself.
|
|
28
|
-
//
|
|
29
|
-
//
|
|
30
|
-
//
|
|
31
|
-
// `lane:list` entries already use. joshuafolkken/kit#2254.
|
|
27
|
+
// itself. `backlogrun.md` is a manifest of pointers, so a decision (`run:merge`, `epic:next`,
|
|
28
|
+
// `backlog:budget`, `run:liveness`, `auto-ok:next`) has its verdict contract only in this reference.
|
|
29
|
+
// That makes it the single source and the section a reader is routed to, in the same
|
|
30
|
+
// `file.md → \`josh <command>\`` form the `epic:reconcile` and `lane:list` entries use.
|
|
32
31
|
const RUN_MERGE_REFERENCE = 'docs/josh-commands-run.md → `josh run:merge`'
|
|
33
32
|
const EPIC_NEXT_REFERENCE = 'docs/josh-commands-backlog.md → `josh epic:next`'
|
|
34
33
|
const BACKLOG_BUDGET_REFERENCE = 'docs/josh-commands-backlog.md → `josh backlog:budget`'
|
|
@@ -107,7 +106,7 @@ const BATCH_ORACLES: ReadonlyArray<DecisionOracle> = [
|
|
|
107
106
|
{
|
|
108
107
|
name: 'run:step',
|
|
109
108
|
decision: 'The run’s next single action, computed from the event stream, carry and issue state',
|
|
110
|
-
args: ISSUE_N_ARG
|
|
109
|
+
args: `[${ISSUE_N_ARG}]`,
|
|
111
110
|
// The non-command answers: `run:step` prints a runnable command for a phase with one to run, and
|
|
112
111
|
// one of these verdicts otherwise. A command line is not a vocabulary token, exactly as an issue
|
|
113
112
|
// number is not one for `backlog:next`.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { run_stage } from '#scripts/run/run-stage'
|
|
2
2
|
import type { DecisionOracle } from './decision-oracle'
|
|
3
3
|
|
|
4
|
-
// The stage-ladder oracle
|
|
4
|
+
// The stage-ladder oracle, kept beside the enumeration rather than inside it
|
|
5
5
|
// because `decision-oracle.ts` sits at its file-size limit. Where a run on an issue starts — and whether
|
|
6
6
|
// the command typed has already been reached — is computed by `run:entry` from the issue and the tree's
|
|
7
7
|
// hold, so the skill's stage table points at the command rather than re-deciding it in prose. The
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
// Vocabulary tokens and arguments that appear in more than one oracle entry, shared by
|
|
2
|
-
// `decision-oracle.ts` and `decision-oracle-batch.ts` so each string has one source
|
|
3
|
-
// (joshuafolkken/kit#3264).
|
|
2
|
+
// `decision-oracle.ts` and `decision-oracle-batch.ts` so each string has one source.
|
|
4
3
|
|
|
5
4
|
const oracle_tokens = {
|
|
6
5
|
REQUIRED: 'required',
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// The enumeration of decision oracles — commands that answer a rule question from mechanically
|
|
2
|
-
// readable inputs, making prose reasoning unnecessary
|
|
2
|
+
// readable inputs, making prose reasoning unnecessary.
|
|
3
3
|
//
|
|
4
4
|
// **Question 0 of the rule-placement criterion**: "Can the rule's answer be computed from
|
|
5
5
|
// mechanically readable inputs alone?" A yes means the rule is answered by a command on this list,
|
|
@@ -131,7 +131,7 @@ const DECISION_ORACLES: ReadonlyArray<DecisionOracle> = [
|
|
|
131
131
|
name: 'issue:fold',
|
|
132
132
|
decision: 'Whether findings filed from one session fold into one issue or stay separate',
|
|
133
133
|
args: '<title...>',
|
|
134
|
-
vocabulary: ['fold', 'separate', 'no-fold-needed'],
|
|
134
|
+
vocabulary: ['fold', 'separate', 'no-fold-needed', 'undetermined'],
|
|
135
135
|
single_source: SPLIT_ASSESSMENT_QUESTION,
|
|
136
136
|
},
|
|
137
137
|
{
|