@joshuafolkken/kit 1.1471.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 +6 -6
- package/.claude/skills/epic-commands/SKILL.md +26 -77
- package/.claude/skills/epic-commands/epic-bundle.md +12 -6
- package/.claude/skills/epic-commands/execution-waves.md +1 -2
- package/.claude/skills/verify-ui/SKILL.md +1 -2
- package/.claude/skills/workflow-commands/SKILL.md +12 -14
- package/.claude/skills/workflow-commands/background-commands.md +8 -12
- package/.claude/skills/workflow-commands/backlogrun-child.md +13 -18
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +7 -25
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +23 -28
- package/.claude/skills/workflow-commands/backlogrun-park.md +16 -31
- package/.claude/skills/workflow-commands/backlogrun-progress.md +12 -21
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +12 -12
- package/.claude/skills/workflow-commands/backlogrun-steps.md +12 -20
- package/.claude/skills/workflow-commands/backlogrun.md +32 -51
- package/.claude/skills/workflow-commands/chain-rule.md +18 -11
- package/.claude/skills/workflow-commands/delegation.md +13 -8
- package/.claude/skills/workflow-commands/entry-sequence.md +10 -12
- package/.claude/skills/workflow-commands/followup.md +10 -35
- package/.claude/skills/workflow-commands/fullrun-steps.md +38 -49
- package/.claude/skills/workflow-commands/fullrun.md +6 -8
- package/.claude/skills/workflow-commands/halfrun.md +20 -32
- package/.claude/skills/workflow-commands/into-target.md +1 -2
- package/.claude/skills/workflow-commands/issue-comments.md +19 -15
- package/.claude/skills/workflow-commands/issue-scout.md +5 -4
- package/.claude/skills/workflow-commands/kickoff.md +24 -23
- package/.claude/skills/workflow-commands/latest-gate.md +9 -18
- package/.claude/skills/workflow-commands/needs-human-review.md +11 -19
- package/.claude/skills/workflow-commands/observation-filing.md +4 -50
- package/.claude/skills/workflow-commands/observation-ledger.md +5 -10
- package/.claude/skills/workflow-commands/pre-gate-cut.md +22 -44
- package/.claude/skills/workflow-commands/prerequisite.md +11 -18
- package/.claude/skills/workflow-commands/progress-watcher.md +3 -8
- package/.claude/skills/workflow-commands/prrun.md +6 -12
- package/.claude/skills/workflow-commands/retrospective.md +5 -5
- package/.claude/skills/workflow-commands/split-assessment.md +14 -4
- package/.claude/skills/workflow-commands/target-repository.md +1 -2
- package/.claude/skills/workflow-commands/working-tree-hold.md +11 -13
- package/.codex/hooks.json +6 -6
- package/.github/actions/setup-node/action.yml +10 -1
- 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 +121 -11
- package/.github/workflows/publish.yml +10 -3
- package/.github/workflows/sonar-qube.yml +1 -0
- package/.prettierignore +2 -0
- package/.vscode/tasks.json +1 -2
- package/CLAUDE.md +4 -8
- package/README.md +4 -2
- package/SECURITY.md +1 -1
- package/cspell/index.yaml +7 -0
- package/dist/CLAUDE.md +4 -8
- package/dist/commands/document-read-cli.js +882 -0
- package/dist/commands/{document-section-cli.js → document-section-main.js} +137 -62
- 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-AS74OU3D.js → chunk-PT5R6UJD.js} +4582 -2118
- package/dist/hooks/chunk-TUIFS5E7.js +72 -0
- package/dist/hooks/{chunk-723HKZO5.js → chunk-VWWCFGWK.js} +1 -1
- package/dist/hooks/{chunk-E7OIKX5Z.js → chunk-WR2KQAYZ.js} +1863 -382
- package/dist/hooks/{chunk-KC5AK2GF.js → chunk-XGBNSWEI.js} +248 -46
- package/dist/hooks/chunk-YCDOIR3I.js +3456 -0
- package/dist/hooks/codex-hook-adapter.js +10 -19
- package/dist/hooks/format-edited.js +5 -5
- package/dist/hooks/inputs.json +436 -257
- package/dist/hooks/pretool-guard.js +7 -22
- package/dist/hooks/session-lang.js +380 -42
- package/dist/hooks/stop-guard.js +8711 -782
- package/dist/josh.js +5263 -997
- 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 +8 -4
- package/package.json +17 -53
- package/pnpm-workspace.yaml +4 -2
- package/prompts/coding-standards.md +1 -1
- package/prompts/collaboration-workflow/file-edits.md +1 -9
- package/prompts/collaboration-workflow/gh-rest.md +1 -2
- package/prompts/collaboration-workflow/issue-citation.md +2 -4
- package/prompts/collaboration-workflow/issue-template.md +42 -17
- package/prompts/collaboration-workflow/lane-instructions.md +34 -0
- package/prompts/collaboration-workflow/measurement.md +37 -0
- package/prompts/collaboration-workflow/operating-rules.md +6 -12
- package/prompts/collaboration-workflow/output-bounds.md +4 -9
- package/prompts/collaboration-workflow/overview.md +1 -1
- package/prompts/collaboration-workflow/plan-comment.md +3 -42
- package/prompts/collaboration-workflow/principles.md +19 -8
- package/prompts/collaboration-workflow/report-format.md +37 -57
- package/prompts/collaboration-workflow/residency.md +12 -8
- package/prompts/collaboration-workflow/rule-delivery.md +3 -11
- package/prompts/collaboration-workflow/shell-body.md +8 -18
- package/prompts/collaboration-workflow/turn-batching.md +4 -6
- package/prompts/collaboration-workflow/upstream-interrupt.md +16 -6
- package/prompts/collaboration-workflow/wip-cap.md +7 -7
- package/prompts/collaboration-workflow.md +4 -7
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +1 -2
- package/prompts/review.md +45 -26
- package/prompts/testing-guide.md +10 -45
- package/scripts/agent/agent-argv.ts +20 -4
- package/scripts/agent/agent-event.ts +15 -15
- package/scripts/agent/agent-exit-record.ts +13 -1
- package/scripts/agent/agent-role-profile.ts +101 -45
- package/scripts/agent/agent-safe-text.ts +60 -0
- package/scripts/agent/api-auth.ts +41 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/agent/claude-agent-argv.ts +14 -0
- package/scripts/agent/codex-agent-argv.ts +2 -0
- package/scripts/agent/lane-instructions.ts +144 -0
- 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 +6 -7
- 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 +54 -7
- 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 +39 -8
- 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 +69 -0
- 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 +137 -18
- 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 +2 -10
- package/scripts/delegation/investigation-guard.ts +15 -73
- package/scripts/delegation/investigation-reads.ts +3 -5
- 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 +9 -6
- package/scripts/document/document-scan.ts +1 -1
- package/scripts/document/document-section-cli.ts +17 -13
- package/scripts/document/document-section-main.ts +12 -0
- package/scripts/document/entry-read-budget.ts +2 -2
- package/scripts/document/read-set-cli.ts +4 -1
- package/scripts/epic/epic-audit-cli.ts +12 -6
- package/scripts/epic/epic-audit-orphans.ts +5 -8
- package/scripts/epic/epic-audit.ts +52 -1
- package/scripts/epic/epic-bundle-apply.ts +137 -0
- package/scripts/epic/epic-bundle-cli.ts +32 -121
- package/scripts/epic/epic-bundle-evidence.ts +49 -26
- package/scripts/epic/epic-bundle-format.ts +116 -0
- package/scripts/epic/epic-bundle-main.ts +17 -0
- package/scripts/epic/epic-bundle-referenced.ts +14 -3
- package/scripts/epic/epic-bundle.ts +17 -9
- 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 +31 -60
- 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 +73 -0
- package/scripts/gate/check-reuse.ts +141 -0
- 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 +150 -119
- package/scripts/gate/core-wait-record.ts +48 -0
- package/scripts/gate/core-wait.ts +162 -0
- package/scripts/gate/core-weights.ts +86 -0
- package/scripts/gate/free-cores.ts +72 -0
- package/scripts/gate/gate-ledger.ts +49 -7
- package/scripts/gate/gate-plan.ts +44 -15
- package/scripts/gate/gate-report.ts +29 -4
- package/scripts/gate/gate-run-steps.ts +195 -0
- package/scripts/gate/gate-skip.ts +12 -2
- package/scripts/gate/gate-steps.ts +12 -1
- package/scripts/gate/held-mark.ts +55 -0
- package/scripts/gate/input-fingerprint.ts +42 -0
- package/scripts/gate/machine-capacity.ts +124 -31
- package/scripts/gate/moved-paths.ts +67 -0
- package/scripts/gate/pre-commit-type-check.ts +14 -1
- 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 +65 -129
- 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-rest.ts +1 -0
- package/scripts/gh/git-gh-issue-write.ts +77 -17
- 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/gh/git-pr.ts +13 -1
- 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 +78 -0
- package/scripts/git/main-merge.ts +39 -14
- 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 +5 -16
- 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 +118 -0
- package/scripts/hooks/pre-push-unit.ts +4 -2
- package/scripts/hooks/pretool-guard-cli.ts +1 -8
- package/scripts/hooks/pretool-guard.ts +57 -69
- package/scripts/hooks/reserved-run.ts +67 -8
- package/scripts/hooks/run-hook.sh +18 -11
- package/scripts/hooks/shell-rules-notice.ts +37 -0
- package/scripts/hooks/stop-actions.ts +185 -0
- package/scripts/hooks/stop-guard.ts +72 -27
- package/scripts/init/hook-command-rewrite.ts +19 -5
- package/scripts/init/hook-launch.ts +15 -12
- 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 +60 -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 +33 -22
- package/scripts/issue/issue-cite-main.ts +12 -0
- package/scripts/issue/issue-classification.ts +13 -8
- 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 +7 -13
- 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 +19 -25
- 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/markdown-section.ts +19 -5
- 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 +82 -0
- package/scripts/josh/file-map-stamp.ts +49 -16
- package/scripts/josh/hook-decision.ts +32 -20
- package/scripts/josh/josh-command-map.ts +6 -1
- package/scripts/josh/josh-command-types.ts +65 -13
- package/scripts/josh/josh-commands-agent-hooks.ts +83 -0
- package/scripts/josh/josh-commands-ai.ts +169 -157
- 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 +31 -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 +112 -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 +149 -6
- package/scripts/josh/josh-logic.ts +11 -27
- package/scripts/josh/josh.ts +14 -5
- package/scripts/josh/package-directory.ts +18 -0
- 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 +19 -22
- package/scripts/lane/lane-check-stats.ts +97 -0
- package/scripts/lane/lane-child-invocation.ts +43 -4
- 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 +27 -6
- package/scripts/lane/lane-gap-stats.ts +156 -0
- package/scripts/lane/lane-guard-policy.ts +2 -2
- package/scripts/lane/lane-handoff.ts +76 -1
- package/scripts/lane/lane-held-stats.ts +129 -0
- package/scripts/lane/lane-install.ts +16 -15
- 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 +108 -97
- package/scripts/lane/lane-limit-cli.ts +19 -9
- package/scripts/lane/lane-measure-cli.ts +58 -10
- 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-preserve.ts +29 -1
- 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 +33 -10
- package/scripts/lane/lane-residents.ts +162 -0
- package/scripts/lane/lane-restart.ts +26 -27
- 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 +160 -0
- package/scripts/lane/lane-session-broker.ts +134 -134
- 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 +72 -0
- package/scripts/lane/lane-withdraw.ts +183 -0
- 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 +14 -5
- 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 +72 -33
- package/scripts/lint/lint-related-scope.ts +33 -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 +12 -11
- 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 +4 -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-check.ts +61 -0
- package/scripts/review/acceptance-map.ts +206 -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 +82 -16
- 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 +67 -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 +90 -3
- 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 +8 -0
- package/scripts/rules/firing-point.ts +6 -5
- package/scripts/rules/git-argv.ts +72 -14
- package/scripts/rules/git-force.ts +12 -2
- package/scripts/rules/guard-remedy.ts +121 -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 +76 -7
- 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/last-prompt.ts +50 -5
- package/scripts/rules/oracle-consulted.ts +10 -0
- package/scripts/rules/oracle-firing.ts +1 -0
- package/scripts/rules/oracle-list-cli.ts +7 -0
- package/scripts/rules/permission-guards.ts +3 -0
- package/scripts/rules/piped-verification.ts +4 -2
- 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 +12 -28
- package/scripts/rules/rule-rewrite.ts +114 -0
- package/scripts/rules/rule-value-cache.ts +4 -9
- package/scripts/rules/rule-value-cli.ts +51 -32
- package/scripts/rules/rule-value.ts +8 -2
- package/scripts/rules/shell-segments.ts +50 -0
- package/scripts/rules/stop-decision.ts +77 -0
- package/scripts/rules/stop-rule-rows.ts +64 -0
- package/scripts/rules/stop-rules.ts +150 -51
- package/scripts/rules/tail-commands.ts +15 -1
- 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 -30
- package/scripts/run/board/run-board-closed.ts +8 -2
- 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 +119 -31
- package/scripts/run/board/run-board-header.ts +86 -21
- 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 +118 -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 +240 -61
- 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 +153 -13
- package/scripts/run/board/run-board-reason.ts +238 -45
- 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 -47
- 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 +125 -0
- package/scripts/run/board/run-board-render.ts +206 -259
- package/scripts/run/board/run-board-roots.ts +54 -0
- package/scripts/run/board/run-board-row-yield.ts +10 -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 +23 -29
- package/scripts/run/board/run-board-status.ts +206 -79
- package/scripts/run/board/run-board-thanks-read.ts +2 -2
- package/scripts/run/board/run-board-tick.ts +123 -104
- 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-cli.ts +3 -2
- package/scripts/run/cut/run-cut-handoff.ts +2 -2
- package/scripts/run/cut/run-cut-report.ts +16 -0
- package/scripts/run/detached-launch.ts +23 -4
- package/scripts/run/entry/run-entry-cli.ts +8 -1
- 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 +7 -10
- package/scripts/run/event/run-event-scope.ts +20 -2
- package/scripts/run/event/run-event-stream-emit.ts +78 -11
- package/scripts/run/event/run-event-stream.ts +37 -7
- 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-hold-session.ts +46 -0
- package/scripts/run/hold/run-hold.ts +7 -1
- package/scripts/run/hold/run-stop-notify.ts +183 -0
- package/scripts/run/launch-priority.ts +32 -0
- package/scripts/run/merge/run-merge-auth.ts +31 -0
- package/scripts/run/merge/run-merge-cli.ts +72 -107
- 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 +123 -0
- package/scripts/run/merge/run-merge-steps.ts +128 -83
- package/scripts/run/merge/run-merge.ts +53 -40
- 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 +61 -30
- package/scripts/run/run-next.ts +1 -1
- package/scripts/run/run-parent-cut-hook.ts +2 -2
- package/scripts/run/run-poll-hook.ts +157 -0
- 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-cli.ts +22 -15
- package/scripts/run/run-step-section.ts +85 -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 +67 -151
- package/scripts/run/ship/run-ship-detach.ts +27 -7
- package/scripts/run/ship/run-ship-infra-retry.ts +59 -0
- package/scripts/run/ship/run-ship-next.ts +27 -3
- package/scripts/run/ship/run-ship-overlap.ts +232 -0
- 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 +102 -27
- package/scripts/run/ship/run-ship-preflight.ts +161 -30
- 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 +123 -15
- package/scripts/run/ship/run-ship-review-steps.ts +105 -149
- 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-context.ts +206 -0
- package/scripts/run/ship/run-ship-stop-text.ts +11 -6
- package/scripts/run/ship/run-ship-sync.ts +57 -12
- 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 +55 -6
- 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 +54 -21
- 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 +71 -137
- 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 +126 -14
- package/scripts/time-runtime/time-spans.ts +1 -0
- package/scripts/time-runtime/time-tool-call.ts +7 -0
- 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 +10 -3
- 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-43ZHT22P.js +0 -3495
- package/dist/hooks/chunk-CDY4NFQG.js +0 -15
- package/dist/hooks/chunk-EUMACUK2.js +0 -2038
- package/dist/hooks/chunk-H5HVWYXK.js +0 -359
- package/dist/hooks/chunk-IIGFYXKC.js +0 -7104
- package/dist/hooks/chunk-IX6TTTI6.js +0 -95
- package/dist/hooks/chunk-J47HU5H5.js +0 -237
- package/dist/hooks/chunk-K4EOONYM.js +0 -45
- package/dist/hooks/chunk-K4LMBQC2.js +0 -68
- package/dist/hooks/chunk-SHGPANFB.js +0 -56
- package/dist/hooks/chunk-YHBZAJSV.js +0 -79
- package/dist/hooks/chunk-YYPI7SJZ.js +0 -131
- package/dist/hooks/duplicate-read-guard.js +0 -30
- package/dist/hooks/investigation-guard.js +0 -32
- 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/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 -282
- package/scripts/rules/rule-registry.ts +0 -109
- package/scripts/run/run-stranded-cli.ts +0 -27
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { report_format_reference } from './report-format-reference'
|
|
2
|
+
import { report_labels, type ReportLabels } from './report-labels'
|
|
2
3
|
|
|
3
4
|
// The mechanical half of the two-layer work summary (`CLAUDE.md` Step 0, single-sourced in
|
|
4
5
|
// `prompts/collaboration-workflow/report-format.md`) is a fixed shape, yet only an advisory echo in
|
|
@@ -8,21 +9,13 @@ import { report_format_reference } from './report-format-reference'
|
|
|
8
9
|
// the overview. The judgement half — whether the subject is concrete — is deliberately left out,
|
|
9
10
|
// because a machine cannot answer it.
|
|
10
11
|
|
|
12
|
+
// The labels come from `report-labels.ts` in the session language — the same table
|
|
13
|
+
// `report:template` prints the skeleton from, so a skeleton it printed always passes.
|
|
11
14
|
const TEMPLATE_HEADING = report_format_reference.SUMMARY_TEMPLATE_HEADING
|
|
12
15
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const OVERVIEW_LABEL = '■ 概要'
|
|
17
|
-
const OVERVIEW_ITEM_LABELS = ['今こうなっている', 'こう直す', '確かめ方'] as const
|
|
18
|
-
const DETAILS_LABEL = '技術詳細'
|
|
19
|
-
const CHANGES_LABEL = '変更とテスト'
|
|
20
|
-
const REQUIRED_LABELS: ReadonlyArray<string> = [
|
|
21
|
-
OVERVIEW_LABEL,
|
|
22
|
-
...OVERVIEW_ITEM_LABELS,
|
|
23
|
-
DETAILS_LABEL,
|
|
24
|
-
CHANGES_LABEL,
|
|
25
|
-
]
|
|
16
|
+
function required_labels(labels: ReportLabels): ReadonlyArray<string> {
|
|
17
|
+
return [labels.overview, labels.now, labels.change, labels.check, labels.details, labels.changes]
|
|
18
|
+
}
|
|
26
19
|
|
|
27
20
|
// 80–100 chars is the guide; the ceiling is what a machine can enforce, so an overview sentence over
|
|
28
21
|
// this many characters is the violation and the lower bound stays the writer's judgement.
|
|
@@ -36,28 +29,13 @@ const FILE_EXTENSION_PATTERN = /\.(?:ts|tsx|js|jsx|mjs|cjs|svelte|json|yaml|yml|
|
|
|
36
29
|
const CLI_FLAG_PATTERN = /(?:^|\s)--[a-z]/u
|
|
37
30
|
const BOLD_MARKER = '**'
|
|
38
31
|
const LEADING_LABEL_PUNCTUATION = /^[\s::]+/u
|
|
32
|
+
const LETTER_PATTERN = /^\p{L}/u
|
|
39
33
|
|
|
40
34
|
// The case-based test declaration: the changes section carries a first tier
|
|
41
35
|
// of fixed-vocabulary cases — each non-applicable one crossed out with a reason — and a second tier
|
|
42
36
|
// of at-least-three "if it breaks" conditions. This checks the mechanical half: the two tier markers
|
|
43
37
|
// are present, an N/A cross-out carries a reason, and the second tier holds enough conditions (or the
|
|
44
38
|
// "never breaks" escape). Whether the cases are the right ones stays the judgement half.
|
|
45
|
-
// `report-format.md` is the single source and the document test pins these against it.
|
|
46
|
-
const CASE_LABEL = 'ケース'
|
|
47
|
-
const CASE_VOCABULARY: ReadonlyArray<string> = [
|
|
48
|
-
'正常',
|
|
49
|
-
'空・0件',
|
|
50
|
-
'1件',
|
|
51
|
-
'多数',
|
|
52
|
-
'境界',
|
|
53
|
-
'不正入力',
|
|
54
|
-
'重複',
|
|
55
|
-
'順序',
|
|
56
|
-
'null',
|
|
57
|
-
]
|
|
58
|
-
const BREAK_LABEL = '壊れるとしたら'
|
|
59
|
-
const NA_LABEL = '該当なし'
|
|
60
|
-
const NO_BREAK_ESCAPE = 'どう呼ばれても壊れない'
|
|
61
39
|
const MIN_BREAK_CONDITIONS = 3
|
|
62
40
|
const LIST_ITEM_PATTERN = /^\s*(?:\d+\.|[-*])\s+/u
|
|
63
41
|
const REASON_SEPARATORS = /^[\s::—|、,.。-]+/u
|
|
@@ -75,23 +53,37 @@ function is_fenced(summary: string): boolean {
|
|
|
75
53
|
return first_content_line(summary).startsWith('```')
|
|
76
54
|
}
|
|
77
55
|
|
|
78
|
-
|
|
79
|
-
|
|
56
|
+
// A label counts only where no letter follows it, so `Change` is not found inside `Changes and tests`.
|
|
57
|
+
function has_label(summary: string, label: string): boolean {
|
|
58
|
+
return summary
|
|
59
|
+
.split(label)
|
|
60
|
+
.slice(1)
|
|
61
|
+
.some((rest) => !LETTER_PATTERN.test(rest))
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function missing_labels(summary: string, labels: ReportLabels): ReadonlyArray<string> {
|
|
65
|
+
return required_labels(labels).filter((label) => !has_label(summary, label))
|
|
80
66
|
}
|
|
81
67
|
|
|
82
68
|
function line_index_of(lines: ReadonlyArray<string>, label: string): number {
|
|
83
69
|
return lines.findIndex((line) => line.includes(label))
|
|
84
70
|
}
|
|
85
71
|
|
|
86
|
-
//
|
|
87
|
-
//
|
|
88
|
-
function
|
|
72
|
+
// A section heading is a non-item line carrying the label, so an overview sentence that merely
|
|
73
|
+
// contains the word (`- **Now**: Details panel …`) does not end the region.
|
|
74
|
+
function heading_index_of(lines: ReadonlyArray<string>, label: string): number {
|
|
75
|
+
return lines.findIndex((line) => !line.startsWith(ITEM_LINE_PREFIX) && line.includes(label))
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// The overview region is the lines between the overview and details headings; the length and
|
|
79
|
+
// intrusion checks apply there alone, since the changes region legitimately carries file paths.
|
|
80
|
+
function overview_lines(summary: string, labels: ReportLabels): ReadonlyArray<string> {
|
|
89
81
|
const lines = summary.split('\n')
|
|
90
|
-
const start = line_index_of(lines,
|
|
82
|
+
const start = line_index_of(lines, labels.overview)
|
|
91
83
|
if (start < 0) return []
|
|
92
84
|
|
|
93
85
|
const after = lines.slice(start + 1)
|
|
94
|
-
const end =
|
|
86
|
+
const end = heading_index_of(after, labels.details)
|
|
95
87
|
|
|
96
88
|
return (end < 0 ? after : after.slice(0, end)).filter((line) => line.startsWith(ITEM_LINE_PREFIX))
|
|
97
89
|
}
|
|
@@ -107,10 +99,8 @@ function item_sentence(line: string): string {
|
|
|
107
99
|
return raw.replace(LEADING_LABEL_PUNCTUATION, '').trim()
|
|
108
100
|
}
|
|
109
101
|
|
|
110
|
-
function
|
|
111
|
-
return overview_lines(summary)
|
|
112
|
-
.map((line) => item_sentence(line))
|
|
113
|
-
.filter((sentence) => sentence.length > MAX_OVERVIEW_CHARS)
|
|
102
|
+
function overview_sentences(summary: string, labels: ReportLabels): ReadonlyArray<string> {
|
|
103
|
+
return overview_lines(summary, labels).map((line) => item_sentence(line))
|
|
114
104
|
}
|
|
115
105
|
|
|
116
106
|
function has_path_or_flag(sentence: string): boolean {
|
|
@@ -121,124 +111,114 @@ function has_path_or_flag(sentence: string): boolean {
|
|
|
121
111
|
)
|
|
122
112
|
}
|
|
123
113
|
|
|
124
|
-
function intruding_sentences(summary: string): ReadonlyArray<string> {
|
|
125
|
-
return overview_lines(summary)
|
|
126
|
-
.map((line) => item_sentence(line))
|
|
127
|
-
.filter((sentence) => has_path_or_flag(sentence))
|
|
128
|
-
}
|
|
129
|
-
|
|
130
114
|
function fence_violation(summary: string): ReadonlyArray<string> {
|
|
131
115
|
return is_fenced(summary)
|
|
132
116
|
? ['✖ the summary is wrapped in a code fence — write it as plain markdown']
|
|
133
117
|
: []
|
|
134
118
|
}
|
|
135
119
|
|
|
136
|
-
function label_violations(summary: string): ReadonlyArray<string> {
|
|
137
|
-
return missing_labels(summary).map((label) => `✖ missing label: ${label}`)
|
|
120
|
+
function label_violations(summary: string, labels: ReportLabels): ReadonlyArray<string> {
|
|
121
|
+
return missing_labels(summary, labels).map((label) => `✖ missing label: ${label}`)
|
|
138
122
|
}
|
|
139
123
|
|
|
140
|
-
function length_violations(summary: string): ReadonlyArray<string> {
|
|
141
|
-
return
|
|
142
|
-
(sentence) =>
|
|
143
|
-
|
|
124
|
+
function length_violations(summary: string, labels: ReportLabels): ReadonlyArray<string> {
|
|
125
|
+
return overview_sentences(summary, labels)
|
|
126
|
+
.filter((sentence) => sentence.length > MAX_OVERVIEW_CHARS)
|
|
127
|
+
.map((sentence) => `✖ overview line over ${String(MAX_OVERVIEW_CHARS)} chars: ${sentence}`)
|
|
144
128
|
}
|
|
145
129
|
|
|
146
|
-
function intrusion_violations(summary: string): ReadonlyArray<string> {
|
|
147
|
-
return
|
|
148
|
-
(sentence) =>
|
|
149
|
-
|
|
130
|
+
function intrusion_violations(summary: string, labels: ReportLabels): ReadonlyArray<string> {
|
|
131
|
+
return overview_sentences(summary, labels)
|
|
132
|
+
.filter((sentence) => has_path_or_flag(sentence))
|
|
133
|
+
.map((sentence) => `✖ file path or CLI flag in the overview: ${sentence}`)
|
|
150
134
|
}
|
|
151
135
|
|
|
152
|
-
// The changes region is every line after
|
|
153
|
-
// tiers and their markers live under the changes section alone.
|
|
154
|
-
|
|
136
|
+
// The changes region is every line after the changes label; the case checks apply there, since the
|
|
137
|
+
// two tiers and their markers live under the changes section alone. A wholly missing section is
|
|
138
|
+
// already a missing label, so an empty region keeps one absence from printing as two violations.
|
|
139
|
+
function changes_region_lines(summary: string, labels: ReportLabels): ReadonlyArray<string> {
|
|
155
140
|
const lines = summary.split('\n')
|
|
156
|
-
const start = line_index_of(lines,
|
|
141
|
+
const start = line_index_of(lines, labels.changes)
|
|
157
142
|
|
|
158
143
|
return start < 0 ? [] : lines.slice(start + 1)
|
|
159
144
|
}
|
|
160
145
|
|
|
161
|
-
// The case checks run only when the section exists — a wholly missing section is already a missing
|
|
162
|
-
// label, so gating here keeps one absence from printing as two violations.
|
|
163
|
-
function has_changes_section(summary: string): boolean {
|
|
164
|
-
return summary.includes(CHANGES_LABEL)
|
|
165
|
-
}
|
|
166
|
-
|
|
167
146
|
// The text after the N/A marker in a segment, with separators stripped — empty means no reason given.
|
|
168
|
-
function reason_after_na(segment: string): string {
|
|
147
|
+
function reason_after_na(segment: string, marker: string): string {
|
|
169
148
|
return segment
|
|
170
|
-
.slice(segment.indexOf(
|
|
149
|
+
.slice(segment.indexOf(marker) + marker.length)
|
|
171
150
|
.replace(REASON_SEPARATORS, '')
|
|
172
151
|
.trim()
|
|
173
152
|
}
|
|
174
153
|
|
|
175
154
|
// Cases are listed on one line separated by `/`, so each N/A cross-out is checked in its own segment
|
|
176
155
|
// — a reasonless second cross-out on a line whose first one carries a reason must not escape.
|
|
177
|
-
function line_has_reasonless_na(line: string): boolean {
|
|
156
|
+
function line_has_reasonless_na(line: string, marker: string): boolean {
|
|
178
157
|
return line
|
|
179
158
|
.split('/')
|
|
180
|
-
.some((segment) => segment.includes(
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
function na_lines_without_reason(lines: ReadonlyArray<string>): ReadonlyArray<string> {
|
|
184
|
-
return lines.filter((line) => line_has_reasonless_na(line))
|
|
159
|
+
.some((segment) => segment.includes(marker) && reason_after_na(segment, marker).length === 0)
|
|
185
160
|
}
|
|
186
161
|
|
|
187
|
-
function break_marker_index(lines: ReadonlyArray<string
|
|
188
|
-
return lines.findIndex((line) => line.includes(
|
|
162
|
+
function break_marker_index(lines: ReadonlyArray<string>, labels: ReportLabels): number {
|
|
163
|
+
return lines.findIndex((line) => line.includes(labels.if_it_breaks))
|
|
189
164
|
}
|
|
190
165
|
|
|
191
166
|
// The count of list items after the second-tier marker. Over-counting a later change block's items
|
|
192
167
|
// only relaxes the check, never fires a false violation, so the simple whole-tail count is enough.
|
|
193
|
-
function break_condition_count(lines: ReadonlyArray<string
|
|
194
|
-
const start = break_marker_index(lines)
|
|
168
|
+
function break_condition_count(lines: ReadonlyArray<string>, labels: ReportLabels): number {
|
|
169
|
+
const start = break_marker_index(lines, labels)
|
|
195
170
|
if (start < 0) return 0
|
|
196
171
|
|
|
197
172
|
return lines.slice(start + 1).filter((line) => LIST_ITEM_PATTERN.test(line)).length
|
|
198
173
|
}
|
|
199
174
|
|
|
200
|
-
function case_line_violations(summary: string): ReadonlyArray<string> {
|
|
175
|
+
function case_line_violations(summary: string, labels: ReportLabels): ReadonlyArray<string> {
|
|
201
176
|
if (
|
|
202
|
-
!
|
|
203
|
-
changes_region_lines(summary).some((line) => line.includes(
|
|
177
|
+
!summary.includes(labels.changes) ||
|
|
178
|
+
changes_region_lines(summary, labels).some((line) => line.includes(labels.cases))
|
|
204
179
|
) {
|
|
205
180
|
return []
|
|
206
181
|
}
|
|
207
182
|
|
|
208
|
-
return [`✖ no case tier (${
|
|
183
|
+
return [`✖ no case tier (${labels.cases}:) in ${labels.changes}`]
|
|
209
184
|
}
|
|
210
185
|
|
|
211
|
-
function na_reason_violations(summary: string): ReadonlyArray<string> {
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
() => `✖ ${NA_LABEL} without a reason — say why the case does not apply`,
|
|
216
|
-
)
|
|
186
|
+
function na_reason_violations(summary: string, labels: ReportLabels): ReadonlyArray<string> {
|
|
187
|
+
return changes_region_lines(summary, labels)
|
|
188
|
+
.filter((line) => line_has_reasonless_na(line, labels.not_applicable))
|
|
189
|
+
.map(() => `✖ ${labels.not_applicable} without a reason — say why the case does not apply`)
|
|
217
190
|
}
|
|
218
191
|
|
|
219
|
-
function break_violations(summary: string): ReadonlyArray<string> {
|
|
220
|
-
if (!
|
|
192
|
+
function break_violations(summary: string, labels: ReportLabels): ReadonlyArray<string> {
|
|
193
|
+
if (!summary.includes(labels.changes)) return []
|
|
221
194
|
|
|
222
|
-
const lines = changes_region_lines(summary)
|
|
223
|
-
if (lines.some((line) => line.includes(
|
|
224
|
-
if (break_marker_index(lines) < 0) return [`✖ no ${BREAK_LABEL} tier in ${CHANGES_LABEL}`]
|
|
225
|
-
if (break_condition_count(lines) >= MIN_BREAK_CONDITIONS) return []
|
|
195
|
+
const lines = changes_region_lines(summary, labels)
|
|
196
|
+
if (lines.some((line) => line.includes(labels.never_breaks))) return []
|
|
226
197
|
|
|
227
|
-
|
|
228
|
-
`✖
|
|
229
|
-
|
|
198
|
+
if (break_marker_index(lines, labels) < 0) {
|
|
199
|
+
return [`✖ no ${labels.if_it_breaks} tier in ${labels.changes}`]
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
if (break_condition_count(lines, labels) >= MIN_BREAK_CONDITIONS) return []
|
|
203
|
+
|
|
204
|
+
const needed = `${String(MIN_BREAK_CONDITIONS)} conditions or "${labels.never_breaks}"`
|
|
205
|
+
|
|
206
|
+
return [`✖ ${labels.if_it_breaks} needs ${needed}`]
|
|
230
207
|
}
|
|
231
208
|
|
|
232
209
|
// Every violation the mechanical checks find, in a fixed order; an empty array is a clean summary.
|
|
233
|
-
function lint_report(
|
|
210
|
+
function lint_report(
|
|
211
|
+
summary: string,
|
|
212
|
+
labels: ReportLabels = report_labels.session_labels(),
|
|
213
|
+
): ReadonlyArray<string> {
|
|
234
214
|
return [
|
|
235
215
|
...fence_violation(summary),
|
|
236
|
-
...label_violations(summary),
|
|
237
|
-
...length_violations(summary),
|
|
238
|
-
...intrusion_violations(summary),
|
|
239
|
-
...case_line_violations(summary),
|
|
240
|
-
...na_reason_violations(summary),
|
|
241
|
-
...break_violations(summary),
|
|
216
|
+
...label_violations(summary, labels),
|
|
217
|
+
...length_violations(summary, labels),
|
|
218
|
+
...intrusion_violations(summary, labels),
|
|
219
|
+
...case_line_violations(summary, labels),
|
|
220
|
+
...na_reason_violations(summary, labels),
|
|
221
|
+
...break_violations(summary, labels),
|
|
242
222
|
]
|
|
243
223
|
}
|
|
244
224
|
|
|
@@ -254,13 +234,8 @@ function with_reference(violations: ReadonlyArray<string>): ReadonlyArray<string
|
|
|
254
234
|
const report_lint = {
|
|
255
235
|
lint_report,
|
|
256
236
|
with_reference,
|
|
257
|
-
|
|
237
|
+
required_labels,
|
|
258
238
|
MAX_OVERVIEW_CHARS,
|
|
259
|
-
CASE_LABEL,
|
|
260
|
-
CASE_VOCABULARY,
|
|
261
|
-
BREAK_LABEL,
|
|
262
|
-
NA_LABEL,
|
|
263
|
-
NO_BREAK_ESCAPE,
|
|
264
239
|
MIN_BREAK_CONDITIONS,
|
|
265
240
|
}
|
|
266
241
|
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
import { fileURLToPath } from 'node:url'
|
|
3
|
+
import { cases_interaction_scan } from '#scripts/cases/cases-interaction-scan'
|
|
4
|
+
import { cases } from '#scripts/cases/cases-logic'
|
|
5
|
+
import { josh_environment_file } from '#scripts/josh/josh-environment-file'
|
|
6
|
+
import { session_language } from '#scripts/josh/session-language'
|
|
7
|
+
import { report_labels } from './report-labels'
|
|
8
|
+
import { report_template, type ChangeInput } from './report-template'
|
|
9
|
+
|
|
10
|
+
// `josh report:template summary|done [<path>...]` — print the work summary or the completion report
|
|
11
|
+
// skeleton in the session language. Each path is a file the change touches; it fills the target and
|
|
12
|
+
// changed-file lines, and for the summary its own change block, opened by the abnormal cases
|
|
13
|
+
// `josh cases` owes for it.
|
|
14
|
+
|
|
15
|
+
const ARGV_OFFSET = 2
|
|
16
|
+
const SUCCESS_EXIT_CODE = 0
|
|
17
|
+
const FAILURE_EXIT_CODE = 1
|
|
18
|
+
const USAGE = `Usage: josh report:template ${report_template.KINDS.join('|')} [<path>...]`
|
|
19
|
+
|
|
20
|
+
// The owed cases follow the session language, so an English skeleton carries English conditions. The
|
|
21
|
+
// shared-state and environment cases lead: they name the other components a change can break with,
|
|
22
|
+
// which the I/O cases after them do not.
|
|
23
|
+
async function change_for(path: string): Promise<ChangeInput> {
|
|
24
|
+
const { lang } = session_language.resolve_session_lang()
|
|
25
|
+
const findings = await cases_interaction_scan.scan([path])
|
|
26
|
+
const io_cases = cases.cases_for(cases.boundaries_in([path]), lang)
|
|
27
|
+
|
|
28
|
+
return {
|
|
29
|
+
path,
|
|
30
|
+
abnormal_cases: [...cases_interaction_scan.lines_for(findings, lang), ...io_cases],
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
35
|
+
const [kind = '', ...paths] = argv
|
|
36
|
+
|
|
37
|
+
if (!report_template.is_kind(kind)) {
|
|
38
|
+
console.error(USAGE)
|
|
39
|
+
|
|
40
|
+
return FAILURE_EXIT_CODE
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const changes = await Promise.all(paths.map(async (path) => await change_for(path)))
|
|
44
|
+
|
|
45
|
+
console.info(report_template.build(kind, changes, report_labels.session_labels()))
|
|
46
|
+
|
|
47
|
+
return SUCCESS_EXIT_CODE
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
51
|
+
josh_environment_file.load_environment_file()
|
|
52
|
+
process.exitCode = await run(argv)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const report_template_cli = { run }
|
|
56
|
+
|
|
57
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) await main(process.argv.slice(ARGV_OFFSET))
|
|
58
|
+
|
|
59
|
+
export { report_template_cli }
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import type { ReportLabels } from './report-labels'
|
|
2
|
+
import { report_lint } from './report-lint'
|
|
3
|
+
|
|
4
|
+
// The skeletons `report:template` prints — the work summary and the completion report — built from
|
|
5
|
+
// the one label table `report:lint` checks against, so a printed skeleton always passes the lint in
|
|
6
|
+
// the session's language. What a command can answer is filled in: each changed path gets its own
|
|
7
|
+
// change block, and the abnormal cases `josh cases` owes for that path open its "if it breaks" tier.
|
|
8
|
+
// The rest is a `<…>` placeholder, the sentences only the writer can supply.
|
|
9
|
+
|
|
10
|
+
type TemplateKind = 'summary' | 'done'
|
|
11
|
+
|
|
12
|
+
interface ChangeInput {
|
|
13
|
+
path: string
|
|
14
|
+
abnormal_cases: ReadonlyArray<string>
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const KINDS: ReadonlyArray<TemplateKind> = ['summary', 'done']
|
|
18
|
+
const KIND_NAMES: ReadonlySet<string> = new Set(KINDS)
|
|
19
|
+
const PLACEHOLDER = '<…>'
|
|
20
|
+
// The test line after the changed path: what changes, the test kind, the test file, the behavior.
|
|
21
|
+
const TEST_LINE = `${PLACEHOLDER} — Test: <Unit|E2E> — ${PLACEHOLDER} — ${PLACEHOLDER}`
|
|
22
|
+
|
|
23
|
+
function is_kind(value: string): value is TemplateKind {
|
|
24
|
+
return KIND_NAMES.has(value)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function bold(label: string): string {
|
|
28
|
+
return `**${label}**`
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function item(label: string, value: string): string {
|
|
32
|
+
return `- ${bold(label)}: ${value}`
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function code_list(paths: ReadonlyArray<string>): string {
|
|
36
|
+
return paths.length === 0 ? PLACEHOLDER : paths.map((path) => `\`${path}\``).join(', ')
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// The owed abnormal cases first, then placeholders up to the lint's minimum — never fewer than three.
|
|
40
|
+
function break_conditions(abnormal_cases: ReadonlyArray<string>): ReadonlyArray<string> {
|
|
41
|
+
const padding = Math.max(report_lint.MIN_BREAK_CONDITIONS - abnormal_cases.length, 0)
|
|
42
|
+
const conditions = [...abnormal_cases, ...Array.from({ length: padding }, () => PLACEHOLDER)]
|
|
43
|
+
|
|
44
|
+
return conditions.map((condition, index) => ` ${String(index + 1)}. ${condition}`)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function change_block(change: ChangeInput, index: number, labels: ReportLabels): string {
|
|
48
|
+
return [
|
|
49
|
+
`${String(index + 1)}. \`${change.path}\`: ${TEST_LINE}`,
|
|
50
|
+
` - ${labels.cases}: ${labels.case_vocabulary.join(' / ')}`,
|
|
51
|
+
` - ${labels.if_it_breaks}:`,
|
|
52
|
+
...break_conditions(change.abnormal_cases),
|
|
53
|
+
].join('\n')
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// No path still yields one block, so the skeleton keeps the shape the lint checks.
|
|
57
|
+
function change_blocks(changes: ReadonlyArray<ChangeInput>, labels: ReportLabels): string {
|
|
58
|
+
const blocks = changes.length === 0 ? [{ path: PLACEHOLDER, abnormal_cases: [] }] : changes
|
|
59
|
+
|
|
60
|
+
return blocks.map((change, index) => change_block(change, index, labels)).join('\n')
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function summary_template(changes: ReadonlyArray<ChangeInput>, labels: ReportLabels): string {
|
|
64
|
+
return [
|
|
65
|
+
bold(labels.overview),
|
|
66
|
+
'',
|
|
67
|
+
item(labels.now, PLACEHOLDER),
|
|
68
|
+
item(labels.change, PLACEHOLDER),
|
|
69
|
+
item(labels.check, PLACEHOLDER),
|
|
70
|
+
'',
|
|
71
|
+
bold(labels.details),
|
|
72
|
+
'',
|
|
73
|
+
`- ${labels.target}: ${code_list(changes.map((change) => change.path))}`,
|
|
74
|
+
`- ${labels.approach}: ${PLACEHOLDER}`,
|
|
75
|
+
`- ${labels.out_of_scope}: ${PLACEHOLDER}`,
|
|
76
|
+
'',
|
|
77
|
+
bold(labels.changes),
|
|
78
|
+
'',
|
|
79
|
+
change_blocks(changes, labels),
|
|
80
|
+
].join('\n')
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function done_template(changes: ReadonlyArray<ChangeInput>, labels: ReportLabels): string {
|
|
84
|
+
return [
|
|
85
|
+
bold(labels.completion),
|
|
86
|
+
'',
|
|
87
|
+
item(labels.cause, PLACEHOLDER),
|
|
88
|
+
item(labels.fix, PLACEHOLDER),
|
|
89
|
+
item(labels.result, `${PLACEHOLDER} (v<version>)`),
|
|
90
|
+
'',
|
|
91
|
+
bold(labels.details),
|
|
92
|
+
'',
|
|
93
|
+
`- ${labels.changed_files}: ${code_list(changes.map((change) => change.path))}`,
|
|
94
|
+
`- ${labels.test_results}: ${PLACEHOLDER}`,
|
|
95
|
+
`- ${labels.evidence}: ${PLACEHOLDER}`,
|
|
96
|
+
`- ${labels.caught_by}: ${PLACEHOLDER}`,
|
|
97
|
+
`- ${labels.remaining}: ${PLACEHOLDER}`,
|
|
98
|
+
].join('\n')
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function build(
|
|
102
|
+
kind: TemplateKind,
|
|
103
|
+
changes: ReadonlyArray<ChangeInput>,
|
|
104
|
+
labels: ReportLabels,
|
|
105
|
+
): string {
|
|
106
|
+
return kind === 'summary' ? summary_template(changes, labels) : done_template(changes, labels)
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const report_template = { KINDS, build, is_kind }
|
|
110
|
+
|
|
111
|
+
export type { ChangeInput, TemplateKind }
|
|
112
|
+
export { report_template }
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { git_gh_command } from '#scripts/gh/git-gh-command'
|
|
2
|
+
import { session_cite } from '#scripts/issue/session-cite'
|
|
3
|
+
import { acceptance_map, type Deferral } from './acceptance-map'
|
|
4
|
+
|
|
5
|
+
// The reads behind `acceptance_map`: the Issue as it reads at the merge, the pull request body, and
|
|
6
|
+
// whether each issue a deferral row names exists. Kept apart so the comparison stays pure.
|
|
7
|
+
|
|
8
|
+
const ISSUE_SEPARATOR = '#'
|
|
9
|
+
|
|
10
|
+
// `owner/repo#12` reads that repository's issue; a bare `#12` reads this one's.
|
|
11
|
+
async function is_found(deferral: Deferral): Promise<boolean> {
|
|
12
|
+
const [repo, number = ''] = deferral.issue.split(ISSUE_SEPARATOR)
|
|
13
|
+
const read = await git_gh_command.issue_get_body_classified(
|
|
14
|
+
number,
|
|
15
|
+
repo === '' ? undefined : repo,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
return read.kind === 'read'
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
async function absent_deferrals(
|
|
22
|
+
deferrals: ReadonlyArray<Deferral>,
|
|
23
|
+
): Promise<ReadonlyArray<string>> {
|
|
24
|
+
const found = await Promise.all(deferrals.map(async (deferral) => await is_found(deferral)))
|
|
25
|
+
|
|
26
|
+
return deferrals
|
|
27
|
+
.filter((_deferral, index) => found[index] !== true)
|
|
28
|
+
.map((deferral) => `- \`${deferral.id}\` names ${deferral.issue}`)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function unreadable_message(issue: string): string {
|
|
32
|
+
return `Issue ${session_cite.issue(issue)} could not be re-read to check its acceptance criteria, so the merge is refused; re-run once it can be.`
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// **An Issue that cannot be re-read is a refusal, not a pass** — the criteria it would have named are
|
|
36
|
+
// exactly what this gate exists to see. An Issue with no acceptance section merges as before.
|
|
37
|
+
// `josh ship`'s preflight asks the body it is about to deliver, so a missing table stops it before the
|
|
38
|
+
// review rather than at the merge.
|
|
39
|
+
async function body_refusal(
|
|
40
|
+
issue: string,
|
|
41
|
+
pr_body: string | undefined,
|
|
42
|
+
): Promise<string | undefined> {
|
|
43
|
+
const issue_read = await git_gh_command.issue_get_body_classified(issue)
|
|
44
|
+
|
|
45
|
+
if (issue_read.kind !== 'read') return unreadable_message(issue)
|
|
46
|
+
const criteria = acceptance_map.criteria_of(issue_read.text)
|
|
47
|
+
const comparison = acceptance_map.compare(criteria, acceptance_map.rows_of(pr_body))
|
|
48
|
+
const absent = await absent_deferrals(comparison.deferrals)
|
|
49
|
+
|
|
50
|
+
if (comparison.missing.length === 0 && absent.length === 0) return undefined
|
|
51
|
+
|
|
52
|
+
return acceptance_map.refusal_message(issue, comparison, absent)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
async function refusal(issue: string, branch_name: string): Promise<string | undefined> {
|
|
56
|
+
return await body_refusal(issue, await git_gh_command.pr_get_body(branch_name))
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const acceptance_map_check = { body_refusal, refusal }
|
|
60
|
+
|
|
61
|
+
export { acceptance_map_check }
|