@joshuafolkken/kit 1.1514.0 → 1.1784.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 -1
- package/.claude/settings.json +5 -5
- package/.claude/skills/epic-commands/SKILL.md +26 -65
- package/.claude/skills/epic-commands/epic-bundle.md +3 -1
- package/.claude/skills/workflow-commands/SKILL.md +5 -5
- package/.claude/skills/workflow-commands/background-commands.md +5 -5
- package/.claude/skills/workflow-commands/backlogrun-child.md +10 -8
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +7 -25
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +17 -13
- package/.claude/skills/workflow-commands/backlogrun-park.md +14 -23
- package/.claude/skills/workflow-commands/backlogrun-progress.md +2 -2
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +5 -5
- package/.claude/skills/workflow-commands/backlogrun-steps.md +10 -10
- package/.claude/skills/workflow-commands/backlogrun.md +1 -1
- package/.claude/skills/workflow-commands/chain-rule.md +13 -7
- package/.claude/skills/workflow-commands/delegation.md +6 -5
- package/.claude/skills/workflow-commands/entry-sequence.md +9 -9
- package/.claude/skills/workflow-commands/followup.md +9 -31
- package/.claude/skills/workflow-commands/fullrun-steps.md +36 -45
- package/.claude/skills/workflow-commands/fullrun.md +2 -2
- package/.claude/skills/workflow-commands/halfrun.md +17 -25
- package/.claude/skills/workflow-commands/issue-comments.md +16 -12
- package/.claude/skills/workflow-commands/issue-scout.md +2 -2
- package/.claude/skills/workflow-commands/kickoff.md +24 -23
- package/.claude/skills/workflow-commands/latest-gate.md +7 -12
- package/.claude/skills/workflow-commands/needs-human-review.md +9 -14
- package/.claude/skills/workflow-commands/observation-filing.md +4 -36
- package/.claude/skills/workflow-commands/observation-ledger.md +1 -1
- package/.claude/skills/workflow-commands/pre-gate-cut.md +13 -30
- package/.claude/skills/workflow-commands/prerequisite.md +10 -16
- package/.claude/skills/workflow-commands/progress-watcher.md +1 -1
- package/.claude/skills/workflow-commands/prrun.md +3 -7
- package/.claude/skills/workflow-commands/retrospective.md +1 -1
- package/.claude/skills/workflow-commands/split-assessment.md +13 -1
- package/.claude/skills/workflow-commands/working-tree-hold.md +9 -9
- package/.codex/hooks.json +5 -5
- package/.github/actions/setup-node/action.yml +9 -0
- package/.github/actions/setup-pnpm/action.yml +1 -1
- package/.github/dependabot.yml +16 -0
- package/.github/release.yml +0 -2
- package/.github/workflows/ci.yml +120 -10
- package/.github/workflows/publish.yml +8 -1
- package/.github/workflows/sonar-qube.yml +1 -0
- package/.prettierignore +2 -0
- package/.vscode/tasks.json +1 -2
- package/CLAUDE.md +3 -7
- package/README.md +4 -2
- package/SECURITY.md +1 -1
- package/dist/CLAUDE.md +3 -7
- package/dist/commands/document-read-cli.js +882 -0
- package/dist/commands/{document-section-cli.js → document-section-main.js} +79 -37
- package/dist/commands/read-set-cli.js +1867 -0
- package/dist/commands/run-prep-main.js +21653 -0
- package/dist/commands/run-step-cli.js +23880 -0
- package/dist/config-merge/index.js +5 -1
- package/dist/hooks/audit-provision.js +20 -35
- package/dist/hooks/{chunk-DGT54IH5.js → chunk-AZX4FGQ3.js} +63 -17
- package/dist/hooks/chunk-CWMBGKYW.js +6483 -0
- package/dist/hooks/chunk-O2YBIDSI.js +4306 -0
- package/dist/hooks/{chunk-TNUMY6NL.js → chunk-PT5R6UJD.js} +4193 -1900
- package/dist/hooks/chunk-TUIFS5E7.js +72 -0
- package/dist/hooks/{chunk-723HKZO5.js → chunk-VWWCFGWK.js} +1 -1
- package/dist/hooks/{chunk-APUO6U4J.js → chunk-WR2KQAYZ.js} +1843 -440
- package/dist/hooks/{chunk-O6GDRNJB.js → chunk-XGBNSWEI.js} +248 -46
- package/dist/hooks/chunk-YCDOIR3I.js +3456 -0
- package/dist/hooks/codex-hook-adapter.js +10 -22
- package/dist/hooks/format-edited.js +5 -6
- package/dist/hooks/inputs.json +443 -317
- package/dist/hooks/pretool-guard.js +7 -25
- package/dist/hooks/session-lang.js +44 -51
- package/dist/hooks/stop-guard.js +7716 -2187
- package/dist/josh.js +6002 -3583
- package/dist/self-sync-guard/index.js +74 -10
- package/dist/version/index.js +115 -406
- package/eslint/base.js +1 -1
- package/lefthook/base.yml +3 -1
- package/package.json +10 -48
- package/pnpm-workspace.yaml +4 -2
- package/prompts/coding-standards.md +1 -1
- package/prompts/collaboration-workflow/file-edits.md +1 -7
- package/prompts/collaboration-workflow/issue-citation.md +1 -1
- package/prompts/collaboration-workflow/issue-template.md +33 -16
- package/prompts/collaboration-workflow/lane-instructions.md +1 -2
- package/prompts/collaboration-workflow/measurement.md +37 -0
- package/prompts/collaboration-workflow/operating-rules.md +4 -6
- package/prompts/collaboration-workflow/output-bounds.md +2 -7
- package/prompts/collaboration-workflow/plan-comment.md +3 -42
- package/prompts/collaboration-workflow/principles.md +5 -0
- package/prompts/collaboration-workflow/report-format.md +31 -60
- package/prompts/collaboration-workflow/residency.md +2 -2
- package/prompts/collaboration-workflow/shell-body.md +6 -16
- package/prompts/collaboration-workflow/turn-batching.md +0 -2
- package/prompts/collaboration-workflow/upstream-interrupt.md +14 -4
- package/prompts/collaboration-workflow/wip-cap.md +1 -1
- package/prompts/collaboration-workflow.md +3 -7
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +1 -2
- package/prompts/review.md +41 -21
- package/prompts/testing-guide.md +8 -43
- package/scripts/agent/agent-event.ts +15 -15
- package/scripts/agent/agent-exit-record.ts +13 -1
- package/scripts/agent/api-auth.ts +41 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/auto-ok/auto-ok-cli.ts +14 -16
- package/scripts/auto-ok/auto-ok-judge-read.ts +12 -3
- package/scripts/auto-ok/auto-ok-judge-write.ts +46 -19
- package/scripts/auto-ok/auto-ok-judge.ts +13 -2
- package/scripts/auto-ok/auto-ok-main.ts +17 -0
- package/scripts/backlog/backlog-arrival.ts +14 -3
- package/scripts/backlog/backlog-budget-cli.ts +7 -33
- package/scripts/backlog/backlog-budget-main.ts +16 -0
- package/scripts/backlog/backlog-budget.ts +2 -3
- package/scripts/backlog/backlog-defect-priority.ts +4 -3
- package/scripts/backlog/backlog-drive-adopt.ts +67 -0
- package/scripts/backlog/backlog-drive-args.ts +4 -5
- package/scripts/backlog/backlog-drive-cli.ts +113 -28
- package/scripts/backlog/backlog-drive-hold.ts +162 -0
- package/scripts/backlog/backlog-drive-idle.ts +151 -0
- package/scripts/backlog/backlog-drive-judge.ts +25 -0
- package/scripts/backlog/backlog-drive-memory.ts +126 -0
- package/scripts/backlog/backlog-drive-named-offer.ts +5 -10
- package/scripts/backlog/backlog-drive-named.ts +53 -6
- package/scripts/backlog/backlog-drive-offer-argv.ts +3 -8
- package/scripts/backlog/backlog-drive-paused.ts +169 -0
- package/scripts/backlog/backlog-drive-restore.ts +30 -7
- package/scripts/backlog/backlog-drive-seats.ts +18 -8
- package/scripts/backlog/backlog-drive-token-handling.ts +38 -0
- package/scripts/backlog/backlog-drive.ts +79 -75
- package/scripts/backlog/backlog-next-main.ts +16 -0
- package/scripts/backlog/backlog-next-shared.ts +73 -0
- package/scripts/backlog/backlog-next.ts +48 -16
- package/scripts/backlog/backlog-occupied.ts +52 -39
- package/scripts/backlog/backlog-offer-cli.ts +6 -21
- package/scripts/backlog/backlog-offer-exclude.ts +15 -0
- package/scripts/backlog/backlog-offer-main.ts +12 -0
- package/scripts/backlog/backlog-offer.ts +36 -3
- package/scripts/backlog/backlog-overlap.ts +22 -4
- package/scripts/backlog/backlog-plan-read.ts +6 -2
- package/scripts/backlog/backlog-plan.ts +18 -4
- package/scripts/backlog/backlog-pool.ts +10 -10
- package/scripts/backlog/backlog-rank.ts +10 -2
- package/scripts/backlog/backlog-ready.ts +112 -30
- package/scripts/backlog/backlog-stalled-detect.ts +109 -36
- package/scripts/backlog/backlog-stalled.ts +52 -16
- package/scripts/backlog/backlog-wait-cause.ts +86 -0
- package/scripts/backlog/backlog-waves.ts +39 -13
- package/scripts/backlog/backlogrun-args.ts +19 -7
- package/scripts/backlog/backlogrun-cli.ts +19 -5
- package/scripts/backlog/backlogrun-launch.ts +6 -0
- package/scripts/backlog/backlogrun-restart.ts +97 -0
- package/scripts/backlog/backlogrun-stop.ts +79 -7
- package/scripts/behavior/behavior-cli.ts +2 -2
- package/scripts/behavior/behavior-rules.ts +47 -24
- package/scripts/build/build-bin.ts +2 -16
- package/scripts/build/build-claude-md.ts +0 -7
- package/scripts/build/build-commands.ts +0 -13
- package/scripts/build/build-hooks.ts +49 -48
- package/scripts/build/hook-bundle-stamp.ts +29 -11
- package/scripts/build/local-bin.ts +1 -1
- package/scripts/cases/cases-cli.ts +25 -13
- package/scripts/cases/cases-interaction-scan.ts +134 -0
- package/scripts/cases/cases-interaction.ts +183 -0
- package/scripts/cases/cases-logic.ts +39 -6
- package/scripts/ci/pr-classification-main.ts +18 -0
- package/scripts/ci/pr-classification.ts +10 -17
- package/scripts/clone/clone-scan.ts +1 -1
- package/scripts/cost-runtime/cost-blocks.ts +22 -37
- package/scripts/cost-runtime/cost-cli.ts +31 -14
- package/scripts/cost-runtime/cost-main.ts +12 -0
- package/scripts/cost-runtime/cost-transcript.ts +1 -0
- package/scripts/delegation/delegation-policy.ts +17 -4
- package/scripts/delegation/duplicate-read-guard.ts +0 -8
- package/scripts/delegation/investigation-guard.ts +0 -8
- package/scripts/delegation/investigation-reads.ts +3 -4
- package/scripts/dependabot/dependabot-cooldown.ts +194 -0
- package/scripts/discovery/repo-discovery.ts +24 -6
- package/scripts/doctor/doctor-consumer.ts +2 -5
- package/scripts/document/document-byte-budget.ts +8 -6
- package/scripts/document/document-scan.ts +1 -1
- package/scripts/document/document-section-cli.ts +0 -8
- package/scripts/document/document-section-main.ts +12 -0
- package/scripts/epic/epic-audit-cli.ts +12 -6
- package/scripts/epic/epic-bundle-apply.ts +137 -0
- package/scripts/epic/epic-bundle-cli.ts +32 -121
- package/scripts/epic/epic-bundle-format.ts +116 -0
- package/scripts/epic/epic-bundle-main.ts +17 -0
- package/scripts/epic/epic-busy.ts +5 -12
- package/scripts/epic/epic-classify.ts +24 -15
- package/scripts/epic/epic-cli-argv.ts +31 -0
- package/scripts/epic/epic-cli-decide.ts +42 -0
- package/scripts/epic/epic-cli.ts +6 -38
- package/scripts/epic/epic-close.ts +112 -55
- package/scripts/epic/epic-cross-repo.ts +4 -7
- package/scripts/epic/epic-decide.ts +119 -0
- package/scripts/epic/epic-decision.ts +9 -0
- package/scripts/epic/epic-fetch.ts +4 -0
- package/scripts/epic/epic-graph.ts +2 -0
- package/scripts/epic/epic-issue.ts +5 -1
- package/scripts/epic/epic-label-age.ts +1 -1
- package/scripts/epic/epic-lane-offer.ts +39 -4
- package/scripts/epic/epic-next-main.ts +24 -0
- package/scripts/epic/epic-next.ts +6 -24
- package/scripts/epic/epic-outside-blocker.ts +6 -2
- package/scripts/epic/epic-parse.ts +9 -3
- package/scripts/epic/epic-read.ts +1 -0
- package/scripts/epic/epic-reconcile.ts +39 -0
- package/scripts/epic/epic-run.ts +10 -1
- package/scripts/epic/epic-solo.ts +50 -14
- package/scripts/epic/epic.ts +41 -7
- package/scripts/exports/unused-members-cli.ts +2 -2
- package/scripts/followup/followup-checks-event.ts +8 -3
- package/scripts/followup/followup-coderabbit-wait.ts +82 -0
- package/scripts/followup/followup-review-gates.ts +81 -0
- package/scripts/followup/git-followup-stages.ts +13 -3
- package/scripts/followup/git-followup-workflow.ts +19 -66
- package/scripts/followup/git-pr-followup-wrapup.ts +9 -14
- package/scripts/followup/git-pr-followup.ts +36 -8
- package/scripts/fresh-machine/fresh-machine-cli.ts +1 -1
- package/scripts/fresh-machine/fresh-machine-run.ts +8 -8
- package/scripts/fresh-machine/specs/kit-test-backlogrun.json +1 -1
- package/scripts/gate/busy-average.ts +58 -0
- package/scripts/gate/check-cpu.ts +60 -0
- package/scripts/gate/check-inputs.ts +39 -95
- package/scripts/gate/check-reuse.ts +33 -54
- package/scripts/gate/command-memory.ts +192 -0
- package/scripts/gate/core-admission.ts +218 -28
- package/scripts/gate/core-budget-timing.ts +37 -0
- package/scripts/gate/core-budget.ts +80 -98
- package/scripts/gate/core-wait-record.ts +48 -0
- package/scripts/gate/core-wait.ts +37 -5
- package/scripts/gate/core-weights.ts +86 -0
- package/scripts/gate/free-cores.ts +27 -4
- package/scripts/gate/gate-ledger.ts +32 -4
- package/scripts/gate/gate-plan.ts +41 -34
- package/scripts/gate/gate-report.ts +14 -2
- package/scripts/gate/gate-run-steps.ts +53 -8
- package/scripts/gate/gate-skip.ts +12 -2
- package/scripts/gate/gate-steps.ts +12 -1
- package/scripts/gate/input-fingerprint.ts +42 -0
- package/scripts/gate/machine-capacity.ts +65 -31
- package/scripts/gate/moved-paths.ts +67 -0
- package/scripts/gate/project-checks.ts +5 -12
- package/scripts/gate/scoped-green.ts +12 -8
- package/scripts/gate/since-green.ts +62 -0
- package/scripts/gate/toolchain-inputs.ts +115 -0
- package/scripts/gate/verification-gate.ts +27 -24
- package/scripts/gate/verification-inputs.ts +250 -0
- package/scripts/gh/gh-author-association.ts +96 -9
- package/scripts/gh/git-ai-review-scan.ts +4 -2
- package/scripts/gh/git-gh-api-path.ts +15 -0
- package/scripts/gh/git-gh-branch-rules.ts +73 -0
- package/scripts/gh/git-gh-conditional.ts +5 -2
- package/scripts/gh/git-gh-issue-read.ts +5 -1
- package/scripts/gh/git-gh-issue-write.ts +67 -29
- package/scripts/gh/git-gh-issue.ts +7 -3
- package/scripts/gh/git-gh-poll-read.ts +89 -0
- package/scripts/gh/git-gh-pr-auto-merge.ts +8 -3
- package/scripts/gh/git-gh-pr-rest.ts +1 -1
- package/scripts/gh/git-gh-pr-snapshot.ts +33 -20
- package/scripts/gh/git-gh-pr.ts +27 -15
- package/scripts/gh/git-pr-checks-eval.ts +39 -7
- package/scripts/gh/git-pr-checks-parse.ts +39 -9
- package/scripts/gh/git-pr-merge-checked.ts +80 -0
- package/scripts/git/base-tree.ts +19 -2
- package/scripts/git/changed-file-scope.ts +6 -4
- package/scripts/git/changed-paths.ts +18 -1
- package/scripts/git/git-diff-reads.ts +27 -2
- package/scripts/git/git-grep-hits.ts +85 -0
- package/scripts/git/git-location-environment.ts +1 -1
- package/scripts/git/git-merge-conflicts.ts +83 -0
- package/scripts/git/git-preflight.ts +37 -12
- package/scripts/git/git-push-transport.ts +1 -2
- package/scripts/git/git-schemas.ts +17 -7
- package/scripts/git/git-spawn.ts +1 -2
- package/scripts/git/git-status.ts +4 -4
- package/scripts/git/main-merge-main.ts +12 -0
- package/scripts/git/main-merge-regenerate.ts +2 -2
- package/scripts/git/main-merge.ts +25 -9
- package/scripts/git/main-sync-main.ts +12 -0
- package/scripts/git/main-sync.ts +0 -9
- package/scripts/git/stash/git-stash.ts +27 -4
- package/scripts/git/stash/{stash-pop-args.ts → stash-args.ts} +13 -10
- package/scripts/git/stash/stash-pop-cli.ts +6 -12
- package/scripts/git/stash/stash-pop-main.ts +12 -0
- package/scripts/git/stash/stash-push-cli.ts +76 -0
- package/scripts/git/stash/stash-push-main.ts +12 -0
- package/scripts/hooks/batch-guard.ts +0 -8
- package/scripts/hooks/check-commit-message-main.ts +8 -0
- package/scripts/hooks/check-commit-message.ts +4 -7
- package/scripts/hooks/format-edited-file.ts +8 -24
- package/scripts/hooks/pre-commit-lint.ts +30 -3
- package/scripts/hooks/pre-push-unit.ts +4 -2
- package/scripts/hooks/pretool-guard-cli.ts +1 -8
- package/scripts/hooks/pretool-guard.ts +32 -19
- package/scripts/hooks/reserved-run.ts +67 -9
- package/scripts/hooks/run-hook.sh +13 -4
- package/scripts/hooks/shell-rules-notice.ts +37 -0
- package/scripts/hooks/stop-actions.ts +2 -21
- package/scripts/hooks/stop-guard.ts +13 -9
- package/scripts/init/hook-command-rewrite.ts +19 -5
- package/scripts/init/hook-launch.ts +15 -17
- package/scripts/init/init-actions.ts +0 -6
- package/scripts/init/init-ai-copy.ts +10 -36
- package/scripts/init/init-bootstrap.ts +9 -8
- package/scripts/init/init-dry-run-report.ts +1 -1
- package/scripts/init/init-dry-run.ts +1 -1
- package/scripts/init/init-file-action.ts +7 -9
- package/scripts/init/init-logic-json-merge.ts +2 -2
- package/scripts/init/init-logic-migrate.ts +9 -82
- package/scripts/init/init-logic.ts +3 -2
- package/scripts/init/init-main.ts +12 -0
- package/scripts/init/init.ts +5 -12
- package/scripts/init/kit-development-versions.ts +3 -7
- package/scripts/init/kit-written-paths.ts +2 -2
- package/scripts/init/project-profile.ts +5 -4
- package/scripts/init/tsconfig-preset-migration.ts +2 -1
- package/scripts/init/vscode-tasks.ts +1 -1
- package/scripts/issue/defect-origin-cli.ts +106 -0
- package/scripts/issue/defect-origin-line.ts +60 -0
- package/scripts/issue/defect-origin-main.ts +11 -0
- package/scripts/issue/defect-origin.ts +114 -0
- package/scripts/issue/defect-rate-cli.ts +34 -78
- package/scripts/issue/defect-rate.ts +0 -16
- package/scripts/issue/defect-report-cli.ts +128 -0
- package/scripts/issue/defect-report-format.ts +56 -0
- package/scripts/issue/defect-report-main.ts +11 -0
- package/scripts/issue/defect-report.ts +160 -0
- package/scripts/issue/expected-effect-lint.ts +1 -0
- package/scripts/issue/issue-already-done-cli.ts +62 -0
- package/scripts/issue/issue-body-or-comment.ts +40 -0
- package/scripts/issue/issue-cite-cli.ts +0 -9
- package/scripts/issue/issue-cite-main.ts +12 -0
- package/scripts/issue/issue-classification.ts +12 -7
- package/scripts/issue/issue-comment-cli.ts +10 -24
- package/scripts/issue/issue-comment-main.ts +12 -0
- package/scripts/issue/issue-evidence-exit.ts +100 -0
- package/scripts/issue/issue-file-cli.ts +29 -7
- package/scripts/issue/issue-file.ts +19 -19
- package/scripts/issue/issue-fold-cli.ts +2 -11
- package/scripts/issue/issue-fold-main.ts +12 -0
- package/scripts/issue/issue-labels.ts +81 -90
- package/scripts/issue/issue-lint-cli.ts +2 -10
- package/scripts/issue/issue-lint-main.ts +12 -0
- package/scripts/issue/issue-measured-cli.ts +56 -0
- package/scripts/issue/issue-merged.ts +19 -2
- package/scripts/issue/issue-not-before-label.ts +135 -0
- package/scripts/issue/issue-not-before.ts +111 -0
- package/scripts/issue/issue-number-shape.ts +15 -1
- package/scripts/issue/issue-park.ts +28 -0
- package/scripts/issue/issue-plan-cli.ts +151 -0
- package/scripts/issue/issue-priority.ts +151 -0
- package/scripts/issue/issue-rank.ts +7 -1
- package/scripts/issue/issue-read-cli.ts +3 -10
- package/scripts/issue/issue-read-main.ts +12 -0
- package/scripts/issue/issue-read.ts +29 -5
- package/scripts/issue/issue-release-cli.ts +0 -10
- package/scripts/issue/issue-release-main.ts +13 -0
- package/scripts/issue/issue-release.ts +7 -12
- package/scripts/issue/issue-sample-gate.ts +192 -0
- package/scripts/issue/issue-sample-source.ts +76 -0
- package/scripts/issue/issue-scout-cli.ts +0 -11
- package/scripts/issue/issue-scout-main.ts +14 -0
- package/scripts/issue/issue-state-cli.ts +0 -10
- package/scripts/issue/issue-state-main.ts +12 -0
- package/scripts/issue/issue-watch-diff.ts +56 -15
- package/scripts/issue/issue-watch.ts +2 -1
- package/scripts/issue/issue-wip.ts +2 -7
- package/scripts/issue/measure-rerun-cli.ts +13 -8
- package/scripts/issue/plan-consumers-cli.ts +39 -0
- package/scripts/issue/plan-consumers-main.ts +11 -0
- package/scripts/issue/plan-consumers-section.ts +55 -0
- package/scripts/issue/plan-consumers.ts +127 -0
- package/scripts/josh/agent-session-environment.ts +1 -1
- package/scripts/josh/command-usage.ts +15 -43
- package/scripts/josh/file-map-stamp.ts +49 -16
- package/scripts/josh/hook-decision.ts +32 -20
- package/scripts/josh/josh-command-map.ts +4 -1
- package/scripts/josh/josh-command-types.ts +12 -6
- package/scripts/josh/josh-commands-agent-hooks.ts +83 -0
- package/scripts/josh/josh-commands-ai.ts +157 -158
- package/scripts/josh/josh-commands-backlog.ts +82 -16
- package/scripts/josh/josh-commands-clone.ts +1 -0
- package/scripts/josh/josh-commands-development.ts +111 -71
- package/scripts/josh/josh-commands-document.ts +43 -1
- package/scripts/josh/josh-commands-epic.ts +171 -0
- package/scripts/josh/josh-commands-hooks.ts +25 -2
- package/scripts/josh/josh-commands-issue-write.ts +181 -0
- package/scripts/josh/josh-commands-issue.ts +124 -24
- package/scripts/josh/josh-commands-lane.ts +103 -2
- package/scripts/josh/josh-commands-lint.ts +19 -8
- package/scripts/josh/josh-commands-maintenance.ts +112 -4
- package/scripts/josh/josh-commands-pause.ts +29 -0
- package/scripts/josh/josh-commands-progress.ts +87 -0
- package/scripts/josh/josh-commands-project.ts +138 -9
- package/scripts/josh/josh-commands-review.ts +124 -0
- package/scripts/josh/josh-commands-run.ts +211 -23
- package/scripts/josh/josh-commands-ship.ts +169 -0
- package/scripts/josh/josh-commands-split.ts +9 -0
- package/scripts/josh/josh-commands-versioning.ts +49 -2
- package/scripts/josh/josh-commands-workflow.ts +144 -6
- package/scripts/josh/josh-logic.ts +6 -13
- package/scripts/josh/package-directory.ts +2 -4
- package/scripts/josh/process-identity.ts +13 -4
- package/scripts/josh/session-language-cli.ts +4 -8
- package/scripts/josh/session-language-main.ts +13 -0
- package/scripts/josh/session-language.ts +6 -1
- package/scripts/josh/shared-cache.ts +90 -0
- package/scripts/josh/stamp-file.ts +9 -15
- package/scripts/lane/lane-await.ts +51 -12
- package/scripts/lane/lane-cache.ts +5 -30
- package/scripts/lane/lane-capacity.ts +14 -23
- package/scripts/lane/lane-check-stats.ts +62 -21
- package/scripts/lane/lane-child-invocation.ts +8 -0
- package/scripts/lane/lane-cli.ts +15 -5
- package/scripts/lane/lane-close.ts +86 -18
- package/scripts/lane/lane-core-wait-stats.ts +66 -0
- package/scripts/lane/lane-dispatch.ts +24 -3
- package/scripts/lane/lane-gap-stats.ts +156 -0
- package/scripts/lane/lane-handoff.ts +69 -1
- package/scripts/lane/lane-held-stats.ts +129 -0
- package/scripts/lane/lane-install.ts +4 -11
- package/scripts/lane/lane-launch-cli.ts +0 -9
- package/scripts/lane/lane-launch-main.ts +12 -0
- package/scripts/lane/lane-ledger-schema.ts +266 -0
- package/scripts/lane/lane-ledger.ts +92 -123
- package/scripts/lane/lane-limit-cli.ts +12 -1
- package/scripts/lane/lane-measure-cli.ts +57 -11
- package/scripts/lane/lane-open.ts +9 -1
- package/scripts/lane/lane-parked.ts +3 -3
- package/scripts/lane/lane-pause-cli.ts +130 -0
- package/scripts/lane/lane-pause.ts +158 -0
- package/scripts/lane/lane-process-table.ts +166 -0
- package/scripts/lane/lane-reap-settle.ts +124 -0
- package/scripts/lane/lane-reap.ts +50 -15
- package/scripts/lane/lane-registry.ts +24 -3
- package/scripts/lane/lane-residents.ts +162 -0
- package/scripts/lane/lane-restart.ts +22 -2
- package/scripts/lane/lane-round-two-stats.ts +49 -0
- package/scripts/lane/lane-sampler.ts +4 -0
- package/scripts/lane/lane-session-action.ts +19 -5
- package/scripts/lane/lane-session-broker.ts +102 -21
- package/scripts/lane/lane-snapshot-trace.ts +84 -0
- package/scripts/lane/lane-spans.ts +51 -0
- package/scripts/lane/lane-spent.ts +6 -3
- package/scripts/lane/lane-stage-stats.ts +7 -2
- package/scripts/lane/lane-state.ts +302 -0
- package/scripts/lane/lane-stats.ts +58 -4
- package/scripts/lane/lane-stop-stats.ts +113 -37
- package/scripts/lane/lane-test-related-stats.ts +127 -0
- package/scripts/lane/lane-transcript-calls.ts +145 -0
- package/scripts/lane/lane-transcript-stats.ts +168 -0
- package/scripts/lane/lane-vacant.ts +13 -3
- package/scripts/lane/lane-withdraw-cli.ts +5 -4
- package/scripts/lane/lane-withdraw.ts +50 -49
- package/scripts/lane/process-directories.ts +70 -0
- package/scripts/lane/process-lane-marks.ts +94 -0
- package/scripts/lib/atomic-write.ts +62 -0
- package/scripts/lib/buffered-process.ts +12 -5
- package/scripts/lib/cli-flags.ts +53 -0
- package/scripts/lib/figure-format.ts +63 -0
- package/scripts/lib/json-value.ts +9 -1
- package/scripts/lib/package-manifest.ts +35 -0
- package/scripts/lib/read-file.ts +3 -1
- package/scripts/lib/stamped-memo.ts +63 -0
- package/scripts/lib/stdout-on-stderr.ts +24 -0
- package/scripts/lib/timeouts.ts +9 -0
- package/scripts/lib/transcript-record.ts +91 -0
- package/scripts/lines/effective-limit.ts +1 -1
- package/scripts/lint/eslint-cache-dependencies.ts +145 -0
- package/scripts/lint/eslint-daemon.ts +265 -0
- package/scripts/lint/format.ts +11 -2
- package/scripts/lint/import-graph.ts +279 -0
- package/scripts/lint/lint-gate-scope.ts +102 -0
- package/scripts/lint/lint-parallel-main.ts +19 -0
- package/scripts/lint/lint-parallel.ts +62 -30
- package/scripts/lint/lint-related-scope.ts +30 -24
- package/scripts/lint/lint-related.ts +38 -6
- package/scripts/notify/confirmation-options.ts +1 -2
- package/scripts/notify/telegram-notify.ts +20 -20
- package/scripts/notify/telegram-test-logic.ts +0 -1
- package/scripts/notify/telegram-test-main.ts +8 -0
- package/scripts/notify/telegram-test.ts +2 -6
- package/scripts/observations/observation-ledger.ts +13 -0
- package/scripts/observations/observations-flush-landing.ts +5 -3
- package/scripts/observations/observations-flush.ts +6 -1
- package/scripts/overrides/overrides-check.ts +2 -5
- package/scripts/overrides/overrides-files.ts +2 -1
- package/scripts/overrides/overrides-logic.ts +3 -6
- package/scripts/package/verify-optional-eslint-install.ts +8 -6
- package/scripts/propagate/propagate-publish.ts +2 -7
- package/scripts/propagate/propagate-targets.ts +4 -12
- package/scripts/refactor/import-graph.ts +9 -7
- package/scripts/release/github-release-runs.ts +17 -6
- package/scripts/release/release-approval-prune.ts +18 -0
- package/scripts/release/release-history.ts +1 -3
- package/scripts/release/release-progress.ts +42 -22
- package/scripts/release/release-publish-run.ts +39 -0
- package/scripts/release/release-publish.ts +6 -6
- package/scripts/release/release-scope-cli.ts +0 -10
- package/scripts/release/release-scope-main.ts +12 -0
- package/scripts/repo/repo-setting.ts +3 -6
- package/scripts/repo/required-checks-logic.ts +6 -15
- package/scripts/report/report-format-reference.ts +2 -0
- package/scripts/report/report-labels.ts +155 -0
- package/scripts/report/report-lint-cli.ts +3 -0
- package/scripts/report/report-lint.ts +85 -110
- package/scripts/report/report-template-cli.ts +59 -0
- package/scripts/report/report-template.ts +112 -0
- package/scripts/review/acceptance-map.ts +1 -0
- package/scripts/review/removed-tests-check.ts +86 -0
- package/scripts/review/removed-tests.ts +149 -0
- package/scripts/review/review-brief-cli.ts +81 -15
- package/scripts/review/review-brief-main.ts +12 -0
- package/scripts/review/review-brief.ts +31 -3
- package/scripts/review/review-code-tree.ts +10 -6
- package/scripts/review/review-comment-round.ts +26 -8
- package/scripts/review/review-finding-ledger.ts +30 -15
- package/scripts/review/review-interaction.ts +94 -0
- package/scripts/review/review-readers-scan.ts +163 -0
- package/scripts/review/review-record-cli.ts +69 -30
- package/scripts/review/review-record-main.ts +12 -0
- package/scripts/review/review-round-one-blobs.ts +221 -0
- package/scripts/review/review-round2-cli.ts +49 -12
- package/scripts/review/review-round2.ts +80 -12
- package/scripts/review/review-stamps.ts +19 -1
- package/scripts/review/review-stop-log.ts +96 -0
- package/scripts/review/review-stops-cli.ts +85 -0
- package/scripts/review/review-tree.ts +6 -17
- package/scripts/review/review-untouched-readers.ts +146 -0
- package/scripts/review/test-titles.ts +118 -0
- package/scripts/rules/agent-model.ts +8 -0
- package/scripts/rules/bash-triggers.ts +46 -3
- package/scripts/rules/decision-oracle-batch.ts +9 -1
- package/scripts/rules/decision-oracle.ts +2 -2
- package/scripts/rules/delivered-rules.ts +80 -2
- package/scripts/rules/destructive-command.ts +8 -1
- package/scripts/rules/direct-filing.ts +10 -2
- package/scripts/rules/direct-issue-comment.ts +117 -0
- package/scripts/rules/direct-pr-create.ts +69 -3
- package/scripts/rules/early-heartbeat.ts +2 -1
- package/scripts/rules/file-body.ts +7 -0
- package/scripts/rules/filing-cap.ts +7 -0
- package/scripts/rules/git-argv.ts +72 -14
- package/scripts/rules/git-force.ts +12 -2
- package/scripts/rules/guard-remedy.ts +4 -0
- package/scripts/rules/implementation-cut-verdict.ts +1 -1
- package/scripts/rules/implementation-cut.ts +11 -3
- package/scripts/rules/index-guard.ts +8 -1
- package/scripts/rules/issue-comments.ts +9 -1
- package/scripts/rules/josh-git-bare.ts +7 -0
- package/scripts/rules/lane-background.ts +67 -25
- package/scripts/rules/lane-carry-conflict.ts +6 -0
- package/scripts/rules/lane-direct-tool.ts +74 -0
- package/scripts/rules/lane-interactive-ask.ts +9 -2
- package/scripts/rules/lane-park.ts +45 -23
- package/scripts/rules/lane-split-park.ts +10 -2
- package/scripts/rules/lane-switch-main.ts +7 -0
- package/scripts/rules/oracle-consulted.ts +10 -0
- package/scripts/rules/oracle-firing.ts +1 -0
- package/scripts/rules/permission-guards.ts +3 -0
- package/scripts/rules/piped-verification.ts +1 -1
- package/scripts/rules/poll-loop.ts +7 -0
- package/scripts/rules/pr-merge.ts +123 -0
- package/scripts/rules/protected-files.ts +32 -5
- package/scripts/rules/raw-field-body.ts +6 -0
- package/scripts/rules/rule-body-guard.ts +8 -0
- package/scripts/rules/rule-list.ts +9 -28
- package/scripts/rules/rule-value-cache.ts +4 -9
- package/scripts/rules/rule-value-cli.ts +51 -32
- package/scripts/rules/rule-value.ts +1 -1
- package/scripts/rules/shell-segments.ts +35 -0
- package/scripts/rules/stop-rule-rows.ts +64 -0
- package/scripts/rules/stop-rules.ts +3 -4
- package/scripts/rules/test-declared-commit.ts +11 -1
- package/scripts/rules/third-party-write.ts +7 -0
- package/scripts/rules/timed-rerun.ts +69 -0
- package/scripts/rules/worktree-guard.ts +13 -3
- package/scripts/run/board/run-board-app-name.ts +23 -0
- package/scripts/run/board/run-board-cli.ts +65 -32
- package/scripts/run/board/run-board-earlier.ts +94 -0
- package/scripts/run/board/run-board-ending-reason.ts +67 -0
- package/scripts/run/board/run-board-estimate-schedule.ts +103 -0
- package/scripts/run/board/run-board-estimate.ts +98 -0
- package/scripts/run/board/run-board-fit.ts +153 -36
- package/scripts/run/board/run-board-fold.ts +123 -0
- package/scripts/run/board/run-board-fresh.ts +2 -2
- package/scripts/run/board/run-board-gather-live.ts +29 -0
- package/scripts/run/board/run-board-gather-thread.ts +189 -0
- package/scripts/run/board/run-board-gather-worker.ts +29 -0
- package/scripts/run/board/run-board-gather.ts +187 -0
- package/scripts/run/board/run-board-github.ts +118 -38
- package/scripts/run/board/run-board-header.ts +82 -20
- package/scripts/run/board/run-board-keys.ts +58 -0
- package/scripts/run/board/run-board-kind.ts +20 -6
- package/scripts/run/board/run-board-labels.ts +116 -71
- package/scripts/run/board/run-board-lane-state.ts +109 -0
- package/scripts/run/board/run-board-lane-time.ts +122 -0
- package/scripts/run/board/run-board-layout.ts +239 -60
- package/scripts/run/board/run-board-length.ts +52 -0
- package/scripts/run/board/run-board-machine.ts +8 -4
- package/scripts/run/board/run-board-main.ts +12 -0
- package/scripts/run/board/run-board-notes.ts +52 -31
- package/scripts/run/board/run-board-now.ts +1 -1
- package/scripts/run/board/run-board-operation.ts +15 -33
- package/scripts/run/board/run-board-phase.ts +1 -1
- package/scripts/run/board/run-board-plan-shared.ts +115 -0
- package/scripts/run/board/run-board-plan.ts +55 -3
- package/scripts/run/board/run-board-planning.ts +45 -0
- package/scripts/run/board/run-board-priority.ts +44 -0
- package/scripts/run/board/run-board-process-groups.ts +195 -0
- package/scripts/run/board/run-board-read.ts +151 -27
- package/scripts/run/board/run-board-reason.ts +235 -51
- package/scripts/run/board/run-board-released.ts +35 -0
- package/scripts/run/board/run-board-render-checks.ts +39 -5
- package/scripts/run/board/run-board-render-condition.ts +96 -0
- package/scripts/run/board/run-board-render-drawn.ts +67 -0
- package/scripts/run/board/run-board-render-foot.ts +59 -0
- package/scripts/run/board/run-board-render-icon.ts +35 -0
- package/scripts/run/board/run-board-render-lanes.ts +145 -0
- package/scripts/run/board/run-board-render-lead.ts +80 -0
- package/scripts/run/board/run-board-render-legend.ts +117 -48
- package/scripts/run/board/run-board-render-notes.ts +156 -29
- package/scripts/run/board/run-board-render-processes.ts +196 -0
- package/scripts/run/board/run-board-render-section.ts +119 -0
- package/scripts/run/board/run-board-render-slot.ts +3 -36
- package/scripts/run/board/run-board-render-tail.ts +115 -48
- package/scripts/run/board/run-board-render-time.ts +56 -0
- package/scripts/run/board/run-board-render-title.ts +117 -24
- package/scripts/run/board/run-board-render-waits.ts +104 -20
- package/scripts/run/board/run-board-render.ts +207 -265
- package/scripts/run/board/run-board-roots.ts +54 -0
- package/scripts/run/board/run-board-row-yield.ts +9 -4
- package/scripts/run/board/run-board-setup.ts +1 -12
- package/scripts/run/board/run-board-snapshot.ts +111 -0
- package/scripts/run/board/run-board-spin.ts +2 -2
- package/scripts/run/board/run-board-state.ts +22 -33
- package/scripts/run/board/run-board-status.ts +147 -71
- package/scripts/run/board/run-board-thanks-read.ts +2 -2
- package/scripts/run/board/run-board-tick.ts +122 -107
- package/scripts/run/board/run-board-usage-board.ts +78 -0
- package/scripts/run/board/run-board-usage-lanes.ts +113 -0
- package/scripts/run/board/run-board-usage-listing.ts +93 -0
- package/scripts/run/board/run-board-usage-read.ts +120 -150
- package/scripts/run/board/run-board-usage-rusage.ts +19 -7
- package/scripts/run/board/run-board-usage-text.ts +139 -51
- package/scripts/run/board/run-board-usage-top.ts +102 -0
- package/scripts/run/board/run-board-usage.ts +89 -72
- package/scripts/run/board/run-board-usual.ts +20 -9
- package/scripts/run/carry/run-carry-args.ts +4 -7
- package/scripts/run/carry/run-carry-conversation.ts +1 -1
- package/scripts/run/carry/run-carry.ts +9 -4
- package/scripts/run/cut/run-cut-handoff.ts +2 -2
- package/scripts/run/event/run-event-cli.ts +1 -5
- package/scripts/run/event/run-event-filed.ts +12 -6
- package/scripts/run/event/run-event-follow.ts +2 -3
- package/scripts/run/event/run-event-render.ts +6 -10
- package/scripts/run/event/run-event-scope.ts +2 -2
- package/scripts/run/event/run-event-stream-emit.ts +82 -22
- package/scripts/run/event/run-event-stream.ts +34 -8
- package/scripts/run/hold/run-hold-adopt.ts +65 -0
- package/scripts/run/hold/run-hold-cli.ts +93 -22
- package/scripts/run/hold/run-hold-main.ts +12 -0
- package/scripts/run/hold/run-hold-member.ts +37 -0
- package/scripts/run/hold/run-stop-notify.ts +183 -0
- package/scripts/run/merge/run-merge-auth.ts +31 -0
- package/scripts/run/merge/run-merge-cli.ts +62 -48
- package/scripts/run/merge/run-merge-close.ts +74 -0
- package/scripts/run/merge/run-merge-collect.ts +6 -13
- package/scripts/run/merge/run-merge-driver.ts +71 -0
- package/scripts/run/merge/run-merge-main.ts +12 -0
- package/scripts/run/merge/run-merge-outcome.ts +23 -0
- package/scripts/run/merge/run-merge-restart.ts +39 -0
- package/scripts/run/merge/run-merge-ship.ts +20 -4
- package/scripts/run/merge/run-merge-signals.ts +33 -9
- package/scripts/run/merge/run-merge-steps.ts +120 -85
- package/scripts/run/merge/run-merge.ts +38 -37
- package/scripts/run/park/run-park-cli.ts +91 -0
- package/scripts/run/park/run-park.ts +88 -0
- package/scripts/run/park/run-stalled.ts +68 -0
- package/scripts/run/pause/run-pause-cli.ts +73 -0
- package/scripts/run/pause/run-pause.ts +251 -0
- package/scripts/run/progress/run-progress-cli.ts +4 -12
- package/scripts/run/progress/run-progress-clock.ts +1 -1
- package/scripts/run/progress/run-progress-config.ts +6 -14
- package/scripts/run/progress/run-progress-main.ts +12 -0
- package/scripts/run/progress/run-progress.ts +1 -4
- package/scripts/run/review/run-review.ts +2 -1
- package/scripts/run/run-ending.ts +1 -0
- package/scripts/run/run-invocation.ts +5 -6
- package/scripts/run/run-liveness-cli.ts +6 -8
- package/scripts/run/run-liveness.ts +60 -29
- package/scripts/run/run-next.ts +1 -1
- package/scripts/run/run-parent-cut-hook.ts +2 -2
- package/scripts/run/run-preflight.ts +18 -3
- package/scripts/run/run-prep-cli.ts +1 -10
- package/scripts/run/run-prep-locate.ts +7 -50
- package/scripts/run/run-prep-main.ts +12 -0
- package/scripts/run/run-prep.ts +6 -0
- package/scripts/run/run-report-cli.ts +101 -13
- package/scripts/run/run-report-handoff.ts +114 -0
- package/scripts/run/run-step.ts +1 -1
- package/scripts/run/run-stranded-detect.ts +13 -0
- package/scripts/run/run-watcher-guard-cli.ts +1 -1
- package/scripts/run/run-watcher-guard.ts +1 -1
- package/scripts/run/ship/run-ship-args.ts +121 -0
- package/scripts/run/ship/run-ship-body-draft.ts +110 -0
- package/scripts/run/ship/run-ship-cli.ts +63 -140
- package/scripts/run/ship/run-ship-detach.ts +19 -8
- package/scripts/run/ship/run-ship-infra-retry.ts +59 -0
- package/scripts/run/ship/run-ship-next.ts +18 -2
- package/scripts/run/ship/run-ship-overlap.ts +42 -5
- package/scripts/run/ship/run-ship-place.ts +96 -0
- package/scripts/run/ship/run-ship-pre-detach-timed.ts +43 -0
- package/scripts/run/ship/run-ship-pre-detach.ts +81 -24
- package/scripts/run/ship/run-ship-preflight.ts +137 -32
- package/scripts/run/ship/run-ship-probe.ts +11 -3
- package/scripts/run/ship/run-ship-relaunch-cap.ts +70 -0
- package/scripts/run/ship/run-ship-removed-rows.ts +61 -0
- package/scripts/run/ship/run-ship-return.ts +107 -23
- package/scripts/run/ship/run-ship-review-steps.ts +105 -151
- package/scripts/run/ship/run-ship-review.ts +73 -6
- package/scripts/run/ship/run-ship-reviewer.ts +207 -0
- package/scripts/run/ship/run-ship-stage.ts +55 -6
- package/scripts/run/ship/run-ship-steps.ts +46 -15
- package/scripts/run/ship/run-ship-stop-cause.ts +135 -0
- package/scripts/run/ship/run-ship-stop-text.ts +11 -6
- package/scripts/run/ship/run-ship-sync.ts +43 -6
- package/scripts/run/ship/run-ship.ts +30 -2
- package/scripts/run/tidy/run-tidy-cli.ts +0 -4
- package/scripts/run/tidy/run-tidy-lanes.ts +3 -0
- package/scripts/run/tidy/run-tidy-main.ts +8 -0
- package/scripts/run/wake/run-wake-cli.ts +119 -100
- package/scripts/run/wake/run-wake-code.ts +83 -0
- package/scripts/run/wake/run-wake-driver.ts +19 -8
- package/scripts/run/wake/run-wake-loop.ts +34 -3
- package/scripts/run/wake/run-wake-main.ts +13 -0
- package/scripts/run/wake/run-wake-ports.ts +90 -0
- package/scripts/run/wake/run-wake-takeover.ts +66 -0
- package/scripts/run/wake/run-wake.ts +2 -1
- package/scripts/safe-chain/pack-hook.ts +2 -2
- package/scripts/safe-chain/preinstall-command.ts +2 -1
- package/scripts/safe-chain/project-config.ts +3 -9
- package/scripts/security/security-audit-main.ts +8 -0
- package/scripts/security/security-audit-provision-logic.ts +0 -11
- package/scripts/security/security-audit-provision-main.ts +12 -0
- package/scripts/security/security-audit-provision.ts +11 -26
- package/scripts/security/security-audit.ts +6 -7
- package/scripts/self-sync-guard/self-sync-guard-logic.ts +6 -13
- package/scripts/split/split-assess-cli.ts +2 -2
- package/scripts/split/split-assess.ts +15 -0
- package/scripts/split/split-measure.ts +65 -0
- package/scripts/sync/claude-settings-merge.ts +8 -15
- package/scripts/sync/directory-copy-guard.ts +4 -9
- package/scripts/sync/file-content.ts +78 -8
- package/scripts/sync/sync-ai-files.ts +3 -5
- package/scripts/sync/sync-configs.ts +11 -23
- package/scripts/sync/sync-hook-safety.ts +4 -10
- package/scripts/sync/sync-main.ts +11 -0
- package/scripts/sync/sync.ts +25 -37
- package/scripts/test/test-declared-changed.ts +2 -2
- package/scripts/test/test-declared.ts +1 -1
- package/scripts/test/test-e2e-guard.ts +25 -1
- package/scripts/test/test-e2e-stamp.ts +38 -0
- package/scripts/test/test-pinned-logic.ts +145 -0
- package/scripts/test/test-pinned-main.ts +78 -0
- package/scripts/test/test-pinned.ts +100 -0
- package/scripts/test/test-read-map.ts +264 -0
- package/scripts/test/test-read-recording.ts +91 -0
- package/scripts/test/test-read-trace.ts +148 -0
- package/scripts/test/test-red-main.ts +12 -0
- package/scripts/test/test-red.ts +12 -30
- package/scripts/test/test-related-main.ts +18 -0
- package/scripts/test/test-related-record.ts +119 -0
- package/scripts/test/test-related-scope.ts +229 -43
- package/scripts/test/test-related.ts +300 -22
- package/scripts/test/test-unit-guard-main.ts +15 -0
- package/scripts/test/test-unit-guard.ts +42 -24
- package/scripts/test/unit-count-file.ts +37 -0
- package/scripts/test/unit-run-marker.ts +162 -0
- package/scripts/test/unit-setup-files.ts +51 -0
- package/scripts/test/unit-worker-share.ts +61 -149
- package/scripts/test/whole-suite-files.ts +63 -0
- package/scripts/time-runtime/time-background.ts +20 -2
- package/scripts/time-runtime/time-bundles.ts +4 -3
- package/scripts/time-runtime/time-density-hook.ts +8 -6
- package/scripts/time-runtime/time-followup-stage.ts +1 -3
- package/scripts/time-runtime/time-format.ts +5 -28
- package/scripts/time-runtime/time-markers.ts +10 -1
- package/scripts/time-runtime/time-shell.ts +97 -10
- package/scripts/time-runtime/time-transcript-line.ts +49 -62
- package/scripts/uninstall/uninstall.ts +1 -1
- package/scripts/version/bump-version-main.ts +12 -0
- package/scripts/version/bump-version.ts +25 -25
- package/scripts/version/effective-upstream.ts +6 -12
- package/scripts/version/latest-corepack.ts +17 -32
- package/scripts/version/latest-if-required-cli.ts +93 -0
- package/scripts/version/latest-lane-guard-main.ts +8 -0
- package/scripts/version/latest-lane-guard.ts +0 -4
- package/scripts/version/latest-scope-cli.ts +0 -9
- package/scripts/version/latest-scope-main.ts +12 -0
- package/scripts/version/latest-update.ts +5 -5
- package/scripts/version/npm-registry.ts +44 -6
- package/scripts/version/publishable-range-check.ts +5 -16
- package/scripts/version/release-age.ts +1 -1
- package/scripts/version/release-hold.ts +1 -1
- package/scripts/version/release-window.ts +38 -0
- package/scripts/version/running-binary.ts +1 -1
- package/scripts/version/safe-chain-version-update.ts +3 -8
- package/scripts/version/version-targets.ts +6 -28
- package/templates/dependabot.yml +29 -0
- package/templates/gitignore +4 -1
- package/templates/pnpm-workspace.basic.yaml +1 -1
- package/templates/sonar-project.properties +3 -2
- package/templates/workflows/ci.yml +12 -4
- package/templates/workflows/github-release.yml +4 -0
- package/tsconfig.sonar.json +1 -1
- package/.ncurc.json +0 -3
- package/dist/hooks/batch-guard.js +0 -29
- package/dist/hooks/chunk-4KKD2UTK.js +0 -66
- package/dist/hooks/chunk-6TS2JD6D.js +0 -237
- package/dist/hooks/chunk-7DSBJVFH.js +0 -50
- package/dist/hooks/chunk-A65Y4YOR.js +0 -79
- package/dist/hooks/chunk-CDY4NFQG.js +0 -15
- package/dist/hooks/chunk-EFXE6C37.js +0 -81
- package/dist/hooks/chunk-GP4IEC4O.js +0 -20
- package/dist/hooks/chunk-JP45SOCJ.js +0 -56
- package/dist/hooks/chunk-LAOV7NLM.js +0 -45
- package/dist/hooks/chunk-M4HGZV7U.js +0 -83
- package/dist/hooks/chunk-PF2NZL2A.js +0 -131
- package/dist/hooks/chunk-PTICX4OL.js +0 -358
- package/dist/hooks/chunk-RT27QRJW.js +0 -6247
- package/dist/hooks/chunk-SYOTDYCI.js +0 -3533
- package/dist/hooks/chunk-UPUZF3AN.js +0 -279
- package/dist/hooks/chunk-WK6SMBIC.js +0 -3180
- package/dist/hooks/duplicate-read-guard.js +0 -30
- package/dist/hooks/investigation-guard.js +0 -29
- package/scripts/backlog/backlog-stalled-cli.ts +0 -30
- package/scripts/cost-runtime/cost-format.ts +0 -29
- package/scripts/init/basic-path-migration.ts +0 -24
- package/scripts/issue/issue-backlinks-cli.ts +0 -93
- package/scripts/josh/josh-commands-guard.ts +0 -38
- package/scripts/josh/josh-usage-automation.ts +0 -121
- package/scripts/josh/josh-usage-backlog.ts +0 -180
- package/scripts/josh/josh-usage-developer.ts +0 -230
- package/scripts/josh/josh-usage-hooks.ts +0 -38
- package/scripts/josh/josh-usage-issue.ts +0 -205
- package/scripts/josh/josh-usage-review.ts +0 -101
- package/scripts/josh/josh-usage-run.ts +0 -252
- package/scripts/josh/josh-usage-session.ts +0 -238
- package/scripts/josh/josh-usage-workflow.ts +0 -212
- package/scripts/lint/cross-file-recheck.ts +0 -155
- package/scripts/registry-migration/migrate-logic.ts +0 -237
- package/scripts/registry-migration/migrate.ts +0 -292
- package/scripts/registry-migration/user-npmrc.ts +0 -15
- package/scripts/rules/rule-guard.ts +0 -23
- package/scripts/rules/rule-registry-rows.ts +0 -292
- package/scripts/rules/rule-registry.ts +0 -112
- package/scripts/run/run-stranded-cli.ts +0 -27
|
@@ -1,292 +0,0 @@
|
|
|
1
|
-
import { existsSync, rmSync, writeFileSync } from 'node:fs'
|
|
2
|
-
import path from 'node:path'
|
|
3
|
-
import { fileURLToPath } from 'node:url'
|
|
4
|
-
import { file_reader } from '#scripts/lib/read-file'
|
|
5
|
-
import { timed_fetch } from '#scripts/lib/timed-fetch'
|
|
6
|
-
import { COMMAND_TIMEOUT_MS, INSTALL_TIMEOUT_MS } from '#scripts/lib/timeouts'
|
|
7
|
-
import { execa } from 'execa'
|
|
8
|
-
import { z } from 'zod'
|
|
9
|
-
import { migrate_logic, type MigrationPlan } from './migrate-logic'
|
|
10
|
-
import { user_npmrc } from './user-npmrc'
|
|
11
|
-
|
|
12
|
-
const NPMRC = '.npmrc'
|
|
13
|
-
const LOCKFILE = 'pnpm-lock.yaml'
|
|
14
|
-
const WORKSPACE = 'pnpm-workspace.yaml'
|
|
15
|
-
const PUBLIC_REGISTRY = 'https://registry.npmjs.org/'
|
|
16
|
-
const SCOPE = '@joshuafolkken/'
|
|
17
|
-
const manifest_schema = z.looseObject({
|
|
18
|
-
dependencies: z.record(z.string(), z.string()).optional(),
|
|
19
|
-
devDependencies: z.record(z.string(), z.string()).optional(),
|
|
20
|
-
optionalDependencies: z.record(z.string(), z.string()).optional(),
|
|
21
|
-
peerDependencies: z.record(z.string(), z.string()).optional(),
|
|
22
|
-
})
|
|
23
|
-
const version_schema = z.looseObject({
|
|
24
|
-
dist: z.looseObject({ integrity: z.string(), tarball: z.string() }),
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
function is_public_npm_url(value: string): boolean {
|
|
28
|
-
try {
|
|
29
|
-
const url = new URL(value)
|
|
30
|
-
|
|
31
|
-
return url.origin === 'https://registry.npmjs.org' && url.username === '' && url.password === ''
|
|
32
|
-
} catch {
|
|
33
|
-
return false
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
interface VersionCheck {
|
|
38
|
-
missing: ReadonlyArray<string>
|
|
39
|
-
integrities: ReadonlyMap<string, string>
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
async function probe_integrity(
|
|
43
|
-
name: string,
|
|
44
|
-
version: string,
|
|
45
|
-
probe_version: MigrationDependencies['fetch_version'],
|
|
46
|
-
): Promise<string | undefined> {
|
|
47
|
-
if (!version) return undefined
|
|
48
|
-
|
|
49
|
-
return await probe_version(name, version)
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
interface MigrationDependencies {
|
|
53
|
-
fetch_version: (name: string, version: string) => Promise<string | undefined>
|
|
54
|
-
install: (cwd: string) => Promise<void>
|
|
55
|
-
effective_registry: (cwd: string) => Promise<string>
|
|
56
|
-
user_npmrc: string
|
|
57
|
-
environment: NodeJS.ProcessEnv
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
interface MigrationContext {
|
|
61
|
-
cwd: string
|
|
62
|
-
npmrc_path: string
|
|
63
|
-
lockfile_path: string
|
|
64
|
-
workspace_path: string
|
|
65
|
-
original_npmrc: string
|
|
66
|
-
original_lockfile: string
|
|
67
|
-
original_workspace: string
|
|
68
|
-
has_npmrc: boolean
|
|
69
|
-
has_lockfile: boolean
|
|
70
|
-
has_workspace: boolean
|
|
71
|
-
plan: MigrationPlan
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
function read_file(file_path: string): string {
|
|
75
|
-
return file_reader.read_file_or_empty(file_path)
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
function has_registry_override(environment: NodeJS.ProcessEnv): boolean {
|
|
79
|
-
return Object.keys(environment).some((key) =>
|
|
80
|
-
/^(?:npm|pnpm)_config_.*(?:joshuafolkken.*registry|userconfig)/iu.test(key),
|
|
81
|
-
)
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
function manifest_packages(content: string): ReadonlyArray<string> {
|
|
85
|
-
const manifest = manifest_schema.parse(JSON.parse(content))
|
|
86
|
-
const sections = ['dependencies', 'devDependencies', 'optionalDependencies', 'peerDependencies']
|
|
87
|
-
|
|
88
|
-
return sections.flatMap((section) => {
|
|
89
|
-
const value: unknown = Reflect.get(manifest, section)
|
|
90
|
-
if (typeof value !== 'object' || value === null) return []
|
|
91
|
-
|
|
92
|
-
return Object.keys(value).filter((name) => name.startsWith(SCOPE))
|
|
93
|
-
})
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
function restore(context: MigrationContext): void {
|
|
97
|
-
if (context.has_npmrc) writeFileSync(context.npmrc_path, context.original_npmrc)
|
|
98
|
-
else rmSync(context.npmrc_path, { force: true })
|
|
99
|
-
writeFileSync(context.lockfile_path, context.original_lockfile)
|
|
100
|
-
if (context.has_workspace) writeFileSync(context.workspace_path, context.original_workspace)
|
|
101
|
-
else rmSync(context.workspace_path, { force: true })
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
async function verify_public_versions(
|
|
105
|
-
lockfile: string,
|
|
106
|
-
probe_version: MigrationDependencies['fetch_version'],
|
|
107
|
-
): Promise<VersionCheck> {
|
|
108
|
-
const versions = migrate_logic.scoped_versions(lockfile)
|
|
109
|
-
// Each probe reads its own package, so they run together; the report keeps the lockfile's order.
|
|
110
|
-
const probed = await Promise.all(
|
|
111
|
-
versions.map(async ([name, version]) => await probe_integrity(name, version, probe_version)),
|
|
112
|
-
)
|
|
113
|
-
const missing: Array<string> = []
|
|
114
|
-
const integrities = new Map<string, string>()
|
|
115
|
-
|
|
116
|
-
for (const [index, [name, version]] of versions.entries()) {
|
|
117
|
-
const integrity = probed[index]
|
|
118
|
-
const id = `${name}@${version}`
|
|
119
|
-
if (integrity === undefined) missing.push(id)
|
|
120
|
-
else integrities.set(id, integrity)
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
return { missing, integrities }
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
function report_context(context: MigrationContext): void {
|
|
127
|
-
console.info(`Current registry and planned change: ${context.plan.change}`)
|
|
128
|
-
console.info(`Installed scoped packages: ${context.plan.packages.join(', ') || '(none)'}`)
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
function create_context(cwd: string, dependencies: MigrationDependencies): MigrationContext {
|
|
132
|
-
const npmrc_path = path.join(cwd, NPMRC)
|
|
133
|
-
const lockfile_path = path.join(cwd, LOCKFILE)
|
|
134
|
-
const workspace_path = path.join(cwd, WORKSPACE)
|
|
135
|
-
const original_npmrc = read_file(npmrc_path)
|
|
136
|
-
const original_lockfile = read_file(lockfile_path)
|
|
137
|
-
const original_workspace = read_file(workspace_path)
|
|
138
|
-
const plan = migrate_logic.plan(original_npmrc, dependencies.user_npmrc, original_lockfile)
|
|
139
|
-
|
|
140
|
-
return {
|
|
141
|
-
cwd,
|
|
142
|
-
npmrc_path,
|
|
143
|
-
lockfile_path,
|
|
144
|
-
workspace_path,
|
|
145
|
-
original_npmrc,
|
|
146
|
-
original_lockfile,
|
|
147
|
-
original_workspace,
|
|
148
|
-
plan,
|
|
149
|
-
has_npmrc: existsSync(npmrc_path),
|
|
150
|
-
has_lockfile: existsSync(lockfile_path),
|
|
151
|
-
has_workspace: existsSync(workspace_path),
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
function initial_block(
|
|
156
|
-
context: MigrationContext,
|
|
157
|
-
dependencies: MigrationDependencies,
|
|
158
|
-
): string | undefined {
|
|
159
|
-
if (!context.has_lockfile) return 'No lockfile; run pnpm install before migrating.'
|
|
160
|
-
const manifest = manifest_packages(read_file(path.join(context.cwd, 'package.json')))
|
|
161
|
-
const missing_lock = manifest.filter((name) => !context.plan.packages.includes(name))
|
|
162
|
-
const blocked = [...context.plan.blocked, ...missing_lock]
|
|
163
|
-
if (!context.plan.packages.includes(`${SCOPE}kit`)) blocked.push('kit is absent from lockfile')
|
|
164
|
-
if (has_registry_override(dependencies.environment)) blocked.push('registry environment override')
|
|
165
|
-
if (blocked.length === 0) return undefined
|
|
166
|
-
|
|
167
|
-
return `Migration blocked: ${blocked.join(', ')}. Keep GitHub Packages until every package is available on npm.`
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
async function verify_resolution(
|
|
171
|
-
context: MigrationContext,
|
|
172
|
-
dependencies: MigrationDependencies,
|
|
173
|
-
integrities: ReadonlyMap<string, string>,
|
|
174
|
-
): Promise<void> {
|
|
175
|
-
await dependencies.install(context.cwd)
|
|
176
|
-
|
|
177
|
-
if (read_file(context.workspace_path) !== context.original_workspace) {
|
|
178
|
-
throw new Error('pnpm changed pnpm-workspace.yaml outside the migration')
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
const actual = await dependencies.effective_registry(context.cwd)
|
|
182
|
-
if (!is_public_npm_url(actual)) throw new Error(`effective registry is ${actual}`)
|
|
183
|
-
const lockfile = read_file(context.lockfile_path)
|
|
184
|
-
const old_tarballs = migrate_logic.github_tarballs(lockfile)
|
|
185
|
-
if (old_tarballs.length > 0) throw new Error(`GitHub tarballs remain: ${old_tarballs.join(', ')}`)
|
|
186
|
-
|
|
187
|
-
if (migrate_logic.rewrite_scoped_lockfile(lockfile, integrities) !== lockfile) {
|
|
188
|
-
throw new Error('lockfile integrity does not match public npm')
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
async function apply(
|
|
193
|
-
context: MigrationContext,
|
|
194
|
-
dependencies: MigrationDependencies,
|
|
195
|
-
integrities: ReadonlyMap<string, string>,
|
|
196
|
-
): Promise<string> {
|
|
197
|
-
try {
|
|
198
|
-
writeFileSync(context.npmrc_path, context.plan.content)
|
|
199
|
-
writeFileSync(
|
|
200
|
-
context.lockfile_path,
|
|
201
|
-
migrate_logic.rewrite_scoped_lockfile(context.original_lockfile, integrities),
|
|
202
|
-
)
|
|
203
|
-
await verify_resolution(context, dependencies, integrities)
|
|
204
|
-
} catch (error) {
|
|
205
|
-
restore(context)
|
|
206
|
-
|
|
207
|
-
return `Migration blocked; original settings restored: ${String(error)}`
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
return 'Migrated to public npm. The project registry and lockfile now resolve from npm.'
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
function is_already_migrated(
|
|
214
|
-
context: MigrationContext,
|
|
215
|
-
integrities: ReadonlyMap<string, string>,
|
|
216
|
-
): boolean {
|
|
217
|
-
return (
|
|
218
|
-
context.plan.content === context.original_npmrc &&
|
|
219
|
-
migrate_logic.rewrite_scoped_lockfile(context.original_lockfile, integrities) ===
|
|
220
|
-
context.original_lockfile
|
|
221
|
-
)
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
async function migrate(cwd: string, dependencies: MigrationDependencies): Promise<string> {
|
|
225
|
-
const context = create_context(cwd, dependencies)
|
|
226
|
-
|
|
227
|
-
report_context(context)
|
|
228
|
-
const block = initial_block(context, dependencies)
|
|
229
|
-
if (block !== undefined) return block
|
|
230
|
-
const version_check = await verify_public_versions(
|
|
231
|
-
context.original_lockfile,
|
|
232
|
-
dependencies.fetch_version,
|
|
233
|
-
)
|
|
234
|
-
|
|
235
|
-
if (version_check.missing.length > 0) {
|
|
236
|
-
return `Migration blocked: unpublished on npm: ${version_check.missing.join(', ')}.`
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
if (is_already_migrated(context, version_check.integrities)) {
|
|
240
|
-
return 'Already using public npm; no changes made.'
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
return await apply(context, dependencies, version_check.integrities)
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
async function fetch_version(name: string, version: string): Promise<string | undefined> {
|
|
247
|
-
const encoded = encodeURIComponent(name)
|
|
248
|
-
const response = await timed_fetch(`${PUBLIC_REGISTRY}${encoded}/${encodeURIComponent(version)}`)
|
|
249
|
-
|
|
250
|
-
if (!response.ok) return undefined
|
|
251
|
-
const parsed = version_schema.safeParse(await response.json())
|
|
252
|
-
if (!parsed.success || !is_public_npm_url(parsed.data.dist.tarball)) return undefined
|
|
253
|
-
|
|
254
|
-
return parsed.data.dist.integrity
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
async function install(cwd: string): Promise<void> {
|
|
258
|
-
await execa('pnpm', ['install', '--lockfile-only', '--ignore-scripts', '--force'], {
|
|
259
|
-
cwd,
|
|
260
|
-
timeout: INSTALL_TIMEOUT_MS,
|
|
261
|
-
})
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
async function effective_registry(cwd: string): Promise<string> {
|
|
265
|
-
const result = await execa('pnpm', ['config', 'get', '@joshuafolkken:registry'], {
|
|
266
|
-
cwd,
|
|
267
|
-
timeout: COMMAND_TIMEOUT_MS,
|
|
268
|
-
})
|
|
269
|
-
|
|
270
|
-
return result.stdout.trim()
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
async function main(): Promise<void> {
|
|
274
|
-
const result = await migrate(process.cwd(), {
|
|
275
|
-
fetch_version,
|
|
276
|
-
install,
|
|
277
|
-
effective_registry,
|
|
278
|
-
user_npmrc: user_npmrc.read(),
|
|
279
|
-
environment: process.env,
|
|
280
|
-
})
|
|
281
|
-
|
|
282
|
-
console.info(result)
|
|
283
|
-
|
|
284
|
-
if (result.startsWith('Migration blocked') || result.startsWith('No lockfile')) process.exit(1)
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
if (process.argv[1] === fileURLToPath(import.meta.url)) await main()
|
|
288
|
-
|
|
289
|
-
const registry_migration = { migrate, install, effective_registry }
|
|
290
|
-
|
|
291
|
-
export { registry_migration }
|
|
292
|
-
export type { MigrationDependencies }
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import os from 'node:os'
|
|
2
|
-
import path from 'node:path'
|
|
3
|
-
import { file_reader } from '#scripts/lib/read-file'
|
|
4
|
-
|
|
5
|
-
const NPMRC = '.npmrc'
|
|
6
|
-
|
|
7
|
-
function read(home: string = os.homedir()): string {
|
|
8
|
-
const file = path.join(home, NPMRC)
|
|
9
|
-
|
|
10
|
-
return file_reader.read_file_or_empty(file)
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
const user_npmrc = { read }
|
|
14
|
-
|
|
15
|
-
export { user_npmrc }
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env tsx
|
|
2
|
-
import { text } from 'node:stream/consumers'
|
|
3
|
-
import { fileURLToPath } from 'node:url'
|
|
4
|
-
import { hook_decision } from '#scripts/josh/hook-decision'
|
|
5
|
-
import { delivered_rules } from './delivered-rules'
|
|
6
|
-
|
|
7
|
-
// The hook entry point for trigger-delivered rules.
|
|
8
|
-
//
|
|
9
|
-
// **It is the same shape `batch-guard.ts` and `investigation-guard.ts` already have**, and
|
|
10
|
-
// deliberately so: read the payload on stdin, ask the rule, write the one envelope Claude Code
|
|
11
|
-
// understands. What differs is only that this one asks an *enumeration* rather than a single rule —
|
|
12
|
-
// so the next rule that leaves residency costs one row in `delivered-rules.ts` and no new process,
|
|
13
|
-
// no new settings entry and no new test file.
|
|
14
|
-
|
|
15
|
-
const rule_delivery = delivered_rules.delivery
|
|
16
|
-
const { is_enabled, SWITCH_ENV_KEY } = delivered_rules
|
|
17
|
-
|
|
18
|
-
if (process.argv[1] === fileURLToPath(import.meta.url)) {
|
|
19
|
-
if (process.stdin.isTTY) hook_decision.report_no_payload('rule:guard')
|
|
20
|
-
else hook_decision.write_decision(await text(process.stdin), rule_delivery)
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export { is_enabled, rule_delivery, SWITCH_ENV_KEY }
|
|
@@ -1,292 +0,0 @@
|
|
|
1
|
-
// The `pnpm josh rule:guard` rows of the rule registry (`rule-registry.ts`), split out by size: the
|
|
2
|
-
// human-readable side of each `delivered-rules.ts` row, keyed by the row's `id`.
|
|
3
|
-
|
|
4
|
-
interface RegisteredRule {
|
|
5
|
-
id: string
|
|
6
|
-
title: string
|
|
7
|
-
// The single source of the rule's procedure.
|
|
8
|
-
topic: string
|
|
9
|
-
// The hook command that delivers it.
|
|
10
|
-
entry: string
|
|
11
|
-
fires: string
|
|
12
|
-
// The silent turn — it matches the state in which the rule is already kept.
|
|
13
|
-
quiet: string
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
const RULE_GUARD = 'pnpm josh rule:guard'
|
|
17
|
-
const OPERATING_RULES = '`operating-rules.md`'
|
|
18
|
-
const PRE_GATE_CUT = '`.claude/skills/workflow-commands/pre-gate-cut.md`'
|
|
19
|
-
const SHELL_BODY = '`shell-body.md`'
|
|
20
|
-
const BACKGROUND_COMMANDS = '`.claude/skills/workflow-commands/background-commands.md`'
|
|
21
|
-
const BACKLOGRUN_LANES = '`.claude/skills/workflow-commands/backlogrun-lanes.md`'
|
|
22
|
-
const GIT_RULES = '`CLAUDE.md` → Git Rules'
|
|
23
|
-
|
|
24
|
-
const GUARD_ROWS: ReadonlyArray<RegisteredRule> = [
|
|
25
|
-
{
|
|
26
|
-
id: 'third-party-write',
|
|
27
|
-
title: 'Third-party write',
|
|
28
|
-
topic: '`upstream-interrupt.md`',
|
|
29
|
-
entry: RULE_GUARD,
|
|
30
|
-
fires:
|
|
31
|
-
'a `gh api` write (field flag or a write method) to a repository whose owner is not this session. Every occurrence',
|
|
32
|
-
quiet: 'a read, or a first-party owner (`pnpm josh repo:party`)',
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
id: 'direct-filing',
|
|
36
|
-
title: 'Direct filing',
|
|
37
|
-
topic: '`docs/josh-commands-backlog.md` → `josh issue:file`',
|
|
38
|
-
entry: RULE_GUARD,
|
|
39
|
-
fires:
|
|
40
|
-
'a `Bash` that creates an Issue outside `josh issue:file` (`gh issue create`, or a POST with `title` to `…/issues`); the refusal hands over the `pnpm josh issue:file` form. Every occurrence',
|
|
41
|
-
quiet:
|
|
42
|
-
'filing through `pnpm josh issue:file` — the duplicate scan, the body check and `epic:bundle` all run',
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
id: 'filing-cap',
|
|
46
|
-
title: 'The 10-Issue filing cap per run',
|
|
47
|
-
topic: '`.claude/skills/workflow-commands/prerequisite.md`, `observation-filing.md`',
|
|
48
|
-
entry: RULE_GUARD,
|
|
49
|
-
fires:
|
|
50
|
-
'the 11th `pnpm josh issue:file` in a run that already has 10 filings not refused; failed calls do not count. Every occurrence',
|
|
51
|
-
quiet: 'fewer than 10 filings not refused',
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
id: 'issue-comments',
|
|
55
|
-
title: 'Reading Issue comments',
|
|
56
|
-
topic: '`issue-comments.md`',
|
|
57
|
-
entry: RULE_GUARD,
|
|
58
|
-
fires:
|
|
59
|
-
'a `Bash` that reads only the Issue body (`gh issue view <N>`, or a GET ending in `…/issues/<N>`). Refused until it is re-read with the comments',
|
|
60
|
-
quiet:
|
|
61
|
-
'no Issue read, or a read with `--comments` / `--json comments` / `…/comments` from the start',
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
id: 'shell-body',
|
|
65
|
-
title: 'No body on the shell',
|
|
66
|
-
topic: SHELL_BODY,
|
|
67
|
-
entry: RULE_GUARD,
|
|
68
|
-
fires:
|
|
69
|
-
'a double-quoted body value (`-f body="…"` / `-f "body=…"` / `--body "…"` / `--notify-message "…"`) carrying a backtick or `$`',
|
|
70
|
-
quiet: 'the shell does not evaluate the body',
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
id: 'raw-field-body',
|
|
74
|
-
title: 'Posting `@path` literally',
|
|
75
|
-
topic: SHELL_BODY,
|
|
76
|
-
entry: RULE_GUARD,
|
|
77
|
-
fires: 'a raw field (`-f` / `--raw-field`) passing `body=@<path>`. Every occurrence',
|
|
78
|
-
quiet: '`-F` / `--field body=@`, a body without `@`, or `pnpm josh issue:comment`',
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
id: 'piped-verification',
|
|
82
|
-
title: 'Piped verification',
|
|
83
|
-
topic: '`output-bounds.md`',
|
|
84
|
-
entry: RULE_GUARD,
|
|
85
|
-
fires:
|
|
86
|
-
'a pass/fail josh check (`gate` / `check` / `lint*` / `cspell*` / `test*` / `eval` / `overrides` / `ranges`) in front of a pipe — rewritten under `set -o pipefail` when every filter is `tail` or a full-reading `grep`, refused otherwise',
|
|
87
|
-
quiet: 'the exit code reaches the caller — a failure reads as a failure',
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
id: 'early-heartbeat',
|
|
91
|
-
title: 'Early progress report',
|
|
92
|
-
topic:
|
|
93
|
-
'`.claude/skills/workflow-commands/progress-watcher.md` → "Progress while the run is quiet"',
|
|
94
|
-
entry: RULE_GUARD,
|
|
95
|
-
fires:
|
|
96
|
-
'a `Bash` whose only purpose is waiting (`sleep` alone, or `echo` / `:` / `date`) while a timer is live or before the interval. Every occurrence',
|
|
97
|
-
quiet: 'no hand-made wait timer — `run:progress` holds the one clock',
|
|
98
|
-
},
|
|
99
|
-
{
|
|
100
|
-
id: 'test-declared',
|
|
101
|
-
title: 'Test declaration',
|
|
102
|
-
topic: '`CLAUDE.md` → Code Change Rules',
|
|
103
|
-
entry: RULE_GUARD,
|
|
104
|
-
fires: '`pnpm josh git -y` (`josh g`) while `pnpm josh test:declared` answers `required`',
|
|
105
|
-
quiet: '`exempt` (non-runtime only) or `satisfied` (tests included)',
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
id: 'lane-background',
|
|
109
|
-
title: 'Lane child background push',
|
|
110
|
-
topic: BACKGROUND_COMMANDS,
|
|
111
|
-
entry: RULE_GUARD,
|
|
112
|
-
fires:
|
|
113
|
-
'a dispatched lane child backgrounding `josh gate` / `git` / `followup` / `ship`; it hands over `pnpm josh ship --detach`. Every occurrence',
|
|
114
|
-
quiet: 'not a lane child, or the foreground `ship --detach`',
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
id: 'run-tail',
|
|
118
|
-
title: 'Idle run tail',
|
|
119
|
-
topic: BACKGROUND_COMMANDS,
|
|
120
|
-
entry: RULE_GUARD,
|
|
121
|
-
fires:
|
|
122
|
-
'`pnpm josh git -y` (`josh g`, `--yes` alike) issued in the **foreground**. Every occurrence',
|
|
123
|
-
quiet: 'issued in the background — its completion resumes the run',
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
id: 'pre-gate-cut',
|
|
127
|
-
title: 'The cut before the gate',
|
|
128
|
-
topic: PRE_GATE_CUT,
|
|
129
|
-
entry: RULE_GUARD,
|
|
130
|
-
fires:
|
|
131
|
-
'`pnpm josh gate` (`josh ga`) in a lane work tree whose `JOSH_LANE_CHILD` names the Issue and has no cut record',
|
|
132
|
-
quiet: 'outside a lane, no marker (a person in the lane), or already cut',
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
id: 'lane-split-park',
|
|
136
|
-
title: 'A split is not a park',
|
|
137
|
-
topic: '`.claude/skills/workflow-commands/backlogrun-park.md` → "Splitting a child mid-run"',
|
|
138
|
-
entry: RULE_GUARD,
|
|
139
|
-
fires:
|
|
140
|
-
'a lane child that promoted its Issue to an epic this run parking it (`needs-decision`, `confirmation` notify). Every occurrence',
|
|
141
|
-
quiet: 'no promotion this run',
|
|
142
|
-
},
|
|
143
|
-
{
|
|
144
|
-
id: 'lane-park',
|
|
145
|
-
title: 'Lane child park',
|
|
146
|
-
topic: PRE_GATE_CUT,
|
|
147
|
-
entry: RULE_GUARD,
|
|
148
|
-
fires: 'a dispatched lane child issuing `pnpm josh notify --task-type confirmation`',
|
|
149
|
-
quiet: 'not a lane child, or not a stop notification',
|
|
150
|
-
},
|
|
151
|
-
{
|
|
152
|
-
id: 'lane-interactive-ask',
|
|
153
|
-
title: 'Lane child interactive ask',
|
|
154
|
-
topic: `${PRE_GATE_CUT} → "The interactive ask is refused one call earlier"`,
|
|
155
|
-
entry: RULE_GUARD,
|
|
156
|
-
fires:
|
|
157
|
-
"a dispatched lane child's `AskUserQuestion`; it hands over the park procedure. Every occurrence",
|
|
158
|
-
quiet: 'not a lane child, or not an interactive tool',
|
|
159
|
-
},
|
|
160
|
-
{
|
|
161
|
-
id: 'agent-model',
|
|
162
|
-
title: 'Subagent model named',
|
|
163
|
-
topic:
|
|
164
|
-
'`.claude/skills/workflow-commands/delegation.md` → "A `general-purpose` subagent names its model"',
|
|
165
|
-
entry: RULE_GUARD,
|
|
166
|
-
fires:
|
|
167
|
-
'an `Agent` / `Task` call of the `general-purpose` type with no `model`. Every occurrence',
|
|
168
|
-
quiet: 'a named agent type, or a `model` set',
|
|
169
|
-
},
|
|
170
|
-
{
|
|
171
|
-
id: 'lane-carry-conflict',
|
|
172
|
-
title: 'Lane child carry commands',
|
|
173
|
-
topic: BACKLOGRUN_LANES,
|
|
174
|
-
entry: RULE_GUARD,
|
|
175
|
-
fires: 'a dispatched lane child running `pnpm josh run:merge` / `run:carry`. Every occurrence',
|
|
176
|
-
quiet: 'not a lane child — the parent owns the run budget',
|
|
177
|
-
},
|
|
178
|
-
{
|
|
179
|
-
id: 'lane-switch-main',
|
|
180
|
-
title: 'Lane child on `git switch main`',
|
|
181
|
-
topic: BACKLOGRUN_LANES,
|
|
182
|
-
entry: RULE_GUARD,
|
|
183
|
-
fires:
|
|
184
|
-
'a dispatched lane child switching to the default branch or running `josh main:sync`. Every occurrence',
|
|
185
|
-
quiet: 'not a lane child — `pnpm josh main:merge` brings the default in at the gate',
|
|
186
|
-
},
|
|
187
|
-
{
|
|
188
|
-
id: 'josh-git-bare',
|
|
189
|
-
title: 'Bare `pnpm josh git`',
|
|
190
|
-
topic: GIT_RULES,
|
|
191
|
-
entry: RULE_GUARD,
|
|
192
|
-
fires:
|
|
193
|
-
'`pnpm josh git` without `-y`, whose staging prompt cancels with no TTY. Every occurrence',
|
|
194
|
-
quiet: '`pnpm josh git -y`',
|
|
195
|
-
},
|
|
196
|
-
{
|
|
197
|
-
id: 'git-force',
|
|
198
|
-
title: 'Force push / branch delete',
|
|
199
|
-
topic: OPERATING_RULES,
|
|
200
|
-
entry: RULE_GUARD,
|
|
201
|
-
fires:
|
|
202
|
-
'a `git push` / `git branch` read as force (`--force` / `-f` / `-uf` …) or delete (`--delete` / `-d` / `-D` / `:branch`) in any spelling. Every occurrence',
|
|
203
|
-
quiet: 'a plain `git push` / `git branch`',
|
|
204
|
-
},
|
|
205
|
-
{
|
|
206
|
-
id: 'worktree-mutation',
|
|
207
|
-
title: 'Unauthorized work-tree mutation',
|
|
208
|
-
topic: OPERATING_RULES,
|
|
209
|
-
entry: RULE_GUARD,
|
|
210
|
-
fires:
|
|
211
|
-
'`git checkout -- <path>` / `git restore <path>` / forced `git clean -f` / an unauthorized `git stash` (bare, push without a message, positional pop). Every occurrence',
|
|
212
|
-
quiet: '`git stash push -m`, `git stash list`, `pnpm josh git`, `pnpm josh stash:pop`',
|
|
213
|
-
},
|
|
214
|
-
{
|
|
215
|
-
id: 'file-body',
|
|
216
|
-
title: 'No file body on the shell',
|
|
217
|
-
topic: '`file-edits.md`',
|
|
218
|
-
entry: RULE_GUARD,
|
|
219
|
-
fires:
|
|
220
|
-
'a heredoc write to an existing file, a writing `node -e` / interpreter heredoc, or `perl -0pi -e`. Every occurrence',
|
|
221
|
-
quiet: 'a new file, a read-only heredoc, or a short `sed -i`',
|
|
222
|
-
},
|
|
223
|
-
{
|
|
224
|
-
id: 'index-mutation',
|
|
225
|
-
title: 'Index mutation',
|
|
226
|
-
topic: OPERATING_RULES,
|
|
227
|
-
entry: RULE_GUARD,
|
|
228
|
-
fires:
|
|
229
|
-
'`git add` / `commit` / `reset` / `rm` / `mv` / `restore --staged` in any spelling. Every occurrence',
|
|
230
|
-
quiet: '`pnpm josh git` — the approved commit flow',
|
|
231
|
-
},
|
|
232
|
-
{
|
|
233
|
-
id: 'destructive-command',
|
|
234
|
-
title: 'Destructive command',
|
|
235
|
-
topic: OPERATING_RULES,
|
|
236
|
-
entry: RULE_GUARD,
|
|
237
|
-
fires:
|
|
238
|
-
'`rm -rf` (any spelling), `gh repo delete` / `archive`, `gh pr close`, `gh api -X DELETE`. Every occurrence',
|
|
239
|
-
quiet: "`gh issue close` or removing an Issue label — the workflow's own steps",
|
|
240
|
-
},
|
|
241
|
-
{
|
|
242
|
-
id: 'protected-file',
|
|
243
|
-
title: 'Protected file',
|
|
244
|
-
topic: OPERATING_RULES,
|
|
245
|
-
entry: RULE_GUARD,
|
|
246
|
-
fires:
|
|
247
|
-
'a `Read` of `.env`, or an `Edit` / `Write` of `.claude/settings.json` outside kit. Every occurrence',
|
|
248
|
-
quiet: "kit itself, or the user's `~/.claude/settings.json`",
|
|
249
|
-
},
|
|
250
|
-
{
|
|
251
|
-
id: 'direct-pr-create',
|
|
252
|
-
title: 'Direct PR creation',
|
|
253
|
-
topic: GIT_RULES,
|
|
254
|
-
entry: RULE_GUARD,
|
|
255
|
-
fires:
|
|
256
|
-
'`gh pr create`, or a `gh api` write to `repos/<o>/<r>/pulls`; it points at `pnpm josh pr`. Every occurrence',
|
|
257
|
-
quiet: '`pnpm josh pr`, or reading a PR — the path that writes `closes #N`',
|
|
258
|
-
},
|
|
259
|
-
{
|
|
260
|
-
id: 'poll-loop',
|
|
261
|
-
title: 'Output poll loop',
|
|
262
|
-
topic: BACKGROUND_COMMANDS,
|
|
263
|
-
entry: RULE_GUARD,
|
|
264
|
-
fires:
|
|
265
|
-
"a hand-written `while` / `until` wait loop over a command's output, a marker file or a process. Every occurrence",
|
|
266
|
-
quiet: 'the command started with `run_in_background` — its exit ends the wait',
|
|
267
|
-
},
|
|
268
|
-
{
|
|
269
|
-
id: 'implementation-cut',
|
|
270
|
-
title: 'The implementation-phase cut',
|
|
271
|
-
topic: `${PRE_GATE_CUT} → "It is a guard, fired at the edit that crosses the threshold"`,
|
|
272
|
-
entry: RULE_GUARD,
|
|
273
|
-
fires:
|
|
274
|
-
'an `Edit` / `Write` by an uncut lane child whose recent context is over the `pnpm josh cost --cut` threshold; it hands over `pnpm josh run:cut --impl <N> --handoff <path>`. At each threshold crossing',
|
|
275
|
-
quiet: 'not a lane child, a non-editing tool, already cut, or under the threshold',
|
|
276
|
-
},
|
|
277
|
-
{
|
|
278
|
-
id: 'rule-body',
|
|
279
|
-
title: 'Question 0 and the ordering question before writing a rule into prose',
|
|
280
|
-
topic: '`residency.md`',
|
|
281
|
-
entry: RULE_GUARD,
|
|
282
|
-
fires:
|
|
283
|
-
'an `Edit` / `Write` to `CLAUDE.md` / `prompts/**/*.md` / `.claude/skills/**/*.md` appending at least the threshold. Refused until both `pnpm josh oracle:list` and `pnpm josh run:step` ran',
|
|
284
|
-
quiet:
|
|
285
|
-
'not a rule document, an append under the threshold (typo, link swap, deletion), or both commands ran',
|
|
286
|
-
},
|
|
287
|
-
]
|
|
288
|
-
|
|
289
|
-
const rule_registry_rows = { GUARD_ROWS, RULE_GUARD }
|
|
290
|
-
|
|
291
|
-
export type { RegisteredRule }
|
|
292
|
-
export { rule_registry_rows }
|