mandrel 2.59.0 → 2.61.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/.agents/README.md +21 -19
- package/.agents/agents/acceptance-critic.md +24 -43
- package/.agents/agents/story-worker.md +20 -21
- package/.agents/docs/agentrc-reference.json +5 -84
- package/.agents/docs/configuration.md +48 -132
- package/.agents/docs/workflows.md +2 -2
- package/.agents/instructions.md +5 -8
- package/.agents/rules/ci-remediation.md +41 -8
- package/.agents/rules/gherkin-standards.md +4 -0
- package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
- package/.agents/schemas/agentrc.schema.json +16 -496
- package/.agents/schemas/story-deliver-terminal.schema.json +13 -3
- package/.agents/schemas/validation-evidence.schema.json +2 -1
- package/.agents/scripts/README.md +23 -13
- package/.agents/scripts/acceptance-eval.js +35 -169
- package/.agents/scripts/agents-bootstrap-github.js +27 -129
- package/.agents/scripts/apply-quality-bootstrap.js +4 -40
- package/.agents/scripts/audit-baselines.js +6 -27
- package/.agents/scripts/audit-labels-bootstrap.js +5 -29
- package/.agents/scripts/audit-to-stories.js +91 -361
- package/.agents/scripts/boot-sweep.js +19 -72
- package/.agents/scripts/bootstrap.js +74 -395
- package/.agents/scripts/ceremony-derive.js +10 -41
- package/.agents/scripts/check-arch-cycles.js +14 -64
- package/.agents/scripts/check-baselines.js +8 -48
- package/.agents/scripts/check-context-budget.js +105 -311
- package/.agents/scripts/check-cyclomatic.js +12 -44
- package/.agents/scripts/check-dead-exports.js +13 -64
- package/.agents/scripts/check-doc-links.js +38 -186
- package/.agents/scripts/check-gherkin-corpus.js +24 -127
- package/.agents/scripts/check-test-temp-hygiene.js +28 -169
- package/.agents/scripts/coverage-capture.js +34 -98
- package/.agents/scripts/deliver-light.js +25 -171
- package/.agents/scripts/deliver-recover.js +6 -42
- package/.agents/scripts/deliver-run.js +534 -0
- package/.agents/scripts/diagnose-friction.js +24 -116
- package/.agents/scripts/drain-pending-cleanup.js +1 -1
- package/.agents/scripts/evidence-gate.js +23 -85
- package/.agents/scripts/file-ci-gap.js +57 -49
- package/.agents/scripts/generate-config-docs.js +30 -170
- package/.agents/scripts/generate-lens-checklists.js +8 -52
- package/.agents/scripts/generate-skills-index.js +14 -112
- package/.agents/scripts/generate-workflows-doc.js +10 -70
- package/.agents/scripts/git-cleanup.js +2 -34
- package/.agents/scripts/lib/Graph.js +24 -81
- package/.agents/scripts/lib/ITicketingProvider.js +47 -143
- package/.agents/scripts/lib/Logger.js +14 -76
- package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
- package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
- package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
- package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
- package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
- package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
- package/.agents/scripts/lib/audit-baselines/read.js +3 -16
- package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
- package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
- package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
- package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
- package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
- package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
- package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
- package/.agents/scripts/lib/audit-suite/findings.js +12 -52
- package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
- package/.agents/scripts/lib/audit-suite/index.js +1 -15
- package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
- package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
- package/.agents/scripts/lib/audit-suite/runner.js +13 -43
- package/.agents/scripts/lib/audit-suite/selector.js +49 -349
- package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
- package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
- package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
- package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
- package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
- package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
- package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
- package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
- package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
- package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
- package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
- package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
- package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
- package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
- package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
- package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
- package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
- package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
- package/.agents/scripts/lib/baseline-loader.js +12 -51
- package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
- package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
- package/.agents/scripts/lib/baselines/components.js +10 -61
- package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
- package/.agents/scripts/lib/baselines/crap-preview-incremental.js +7 -19
- package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
- package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
- package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
- package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
- package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
- package/.agents/scripts/lib/baselines/envelope.js +13 -129
- package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
- package/.agents/scripts/lib/baselines/git-base.js +23 -142
- package/.agents/scripts/lib/baselines/kernel.js +11 -111
- package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
- package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
- package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
- package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
- package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
- package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
- package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
- package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
- package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
- package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
- package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
- package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
- package/.agents/scripts/lib/baselines/path-canon.js +19 -128
- package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
- package/.agents/scripts/lib/baselines/reader.js +14 -107
- package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
- package/.agents/scripts/lib/baselines/scope.js +11 -135
- package/.agents/scripts/lib/baselines/writer.js +16 -149
- package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
- package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
- package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
- package/.agents/scripts/lib/bdd-step-index.js +26 -100
- package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
- package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
- package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
- package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
- package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
- package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
- package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
- package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
- package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
- package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
- package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
- package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
- package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
- package/.agents/scripts/lib/bootstrap/summary.js +1 -8
- package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
- package/.agents/scripts/lib/branch-name-guard.js +4 -23
- package/.agents/scripts/lib/changed-files.js +39 -121
- package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
- package/.agents/scripts/lib/checks/index.js +18 -101
- package/.agents/scripts/lib/checks/loop-health.js +11 -53
- package/.agents/scripts/lib/checks/state.js +16 -91
- package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
- package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
- package/.agents/scripts/lib/child-exec.js +39 -108
- package/.agents/scripts/lib/cli/standard-args.js +9 -116
- package/.agents/scripts/lib/cli-args.js +31 -146
- package/.agents/scripts/lib/cli-usage.js +5 -27
- package/.agents/scripts/lib/cli-utils.js +2 -12
- package/.agents/scripts/lib/close-validation/commands.js +13 -76
- package/.agents/scripts/lib/close-validation/gates.js +92 -331
- package/.agents/scripts/lib/close-validation/process.js +121 -151
- package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
- package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
- package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
- package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
- package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
- package/.agents/scripts/lib/close-validation/runner.js +53 -110
- package/.agents/scripts/lib/command-header.js +6 -28
- package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
- package/.agents/scripts/lib/config/baselines.js +3 -14
- package/.agents/scripts/lib/config/ci.js +8 -38
- package/.agents/scripts/lib/config/commands.js +1 -15
- package/.agents/scripts/lib/config/defaults.js +4 -33
- package/.agents/scripts/lib/config/delivery-routing.js +6 -34
- package/.agents/scripts/lib/config/explain.js +10 -83
- package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
- package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +3 -31
- package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
- package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
- package/.agents/scripts/lib/config/gates/index.js +2 -17
- package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
- package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
- package/.agents/scripts/lib/config/gates/shared.js +4 -64
- package/.agents/scripts/lib/config/github.js +4 -22
- package/.agents/scripts/lib/config/limits.js +4 -57
- package/.agents/scripts/lib/config/paths.js +2 -21
- package/.agents/scripts/lib/config/qa.js +4 -38
- package/.agents/scripts/lib/config/quality.js +76 -432
- package/.agents/scripts/lib/config/runners.js +12 -56
- package/.agents/scripts/lib/config/runtime.js +13 -57
- package/.agents/scripts/lib/config/shared.js +2 -16
- package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
- package/.agents/scripts/lib/config/temp-paths.js +40 -280
- package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
- package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
- package/.agents/scripts/lib/config-resolver.js +11 -52
- package/.agents/scripts/lib/config-schema-shared.js +1 -4
- package/.agents/scripts/lib/config-settings-schema-delivery.js +16 -291
- package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
- package/.agents/scripts/lib/config-settings-schema.js +37 -274
- package/.agents/scripts/lib/coverage-baseline.js +20 -110
- package/.agents/scripts/lib/coverage-capture-fullscope.js +18 -35
- package/.agents/scripts/lib/coverage-capture-incremental.js +15 -45
- package/.agents/scripts/lib/coverage-capture-usage.js +8 -25
- package/.agents/scripts/lib/coverage-capture.js +99 -224
- package/.agents/scripts/lib/coverage-utils.js +14 -79
- package/.agents/scripts/lib/cpu-pool.js +17 -123
- package/.agents/scripts/lib/crap-baseline-join.js +16 -88
- package/.agents/scripts/lib/crap-coordinates.js +6 -25
- package/.agents/scripts/lib/crap-engine.js +40 -153
- package/.agents/scripts/lib/crap-method-identity.js +16 -78
- package/.agents/scripts/lib/crap-utils.js +31 -155
- package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
- package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
- package/.agents/scripts/lib/dead-exports-knip.js +18 -56
- package/.agents/scripts/lib/dead-exports-mode.js +5 -24
- package/.agents/scripts/lib/degraded-mode.js +3 -26
- package/.agents/scripts/lib/dependency-parser.js +8 -40
- package/.agents/scripts/lib/dependency-version.js +13 -35
- package/.agents/scripts/lib/detect-package-manager.js +6 -36
- package/.agents/scripts/lib/doc-tiers.js +22 -124
- package/.agents/scripts/lib/duplicate-search.js +8 -72
- package/.agents/scripts/lib/env-loader.js +5 -27
- package/.agents/scripts/lib/error-redactor.js +6 -31
- package/.agents/scripts/lib/errors/index.js +2 -22
- package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
- package/.agents/scripts/lib/escomplex-kernel.js +21 -123
- package/.agents/scripts/lib/feedback-loop/graduator-core.js +94 -419
- package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
- package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -149
- package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
- package/.agents/scripts/lib/findings/classify-finding.js +14 -69
- package/.agents/scripts/lib/findings/promote-finding.js +14 -112
- package/.agents/scripts/lib/findings/provenance-field.js +11 -52
- package/.agents/scripts/lib/findings/route-finding.js +37 -255
- package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
- package/.agents/scripts/lib/findings/severity.js +18 -104
- package/.agents/scripts/lib/format-generated-json.js +12 -44
- package/.agents/scripts/lib/full-suite-lock.js +160 -429
- package/.agents/scripts/lib/full-suite-queue.js +213 -0
- package/.agents/scripts/lib/gates/baseline-store.js +5 -9
- package/.agents/scripts/lib/gates/friction.js +1 -3
- package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
- package/.agents/scripts/lib/gh-exec.js +123 -191
- package/.agents/scripts/lib/git/cached-fetch.js +9 -52
- package/.agents/scripts/lib/git/sync-from-base.js +15 -107
- package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
- package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
- package/.agents/scripts/lib/git-utils.js +37 -161
- package/.agents/scripts/lib/github/framework-repo.js +8 -71
- package/.agents/scripts/lib/github-url.js +2 -17
- package/.agents/scripts/lib/import-graph.js +11 -38
- package/.agents/scripts/lib/install-cmd-parser.js +4 -13
- package/.agents/scripts/lib/json-utils.js +3 -18
- package/.agents/scripts/lib/label-constants.js +16 -111
- package/.agents/scripts/lib/label-taxonomy.js +4 -30
- package/.agents/scripts/lib/maintainability-engine.js +12 -80
- package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
- package/.agents/scripts/lib/maintainability-utils.js +16 -92
- package/.agents/scripts/lib/mandrel-catalog.js +12 -70
- package/.agents/scripts/lib/notifications/notifier.js +13 -38
- package/.agents/scripts/lib/npm-scripts.js +4 -23
- package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
- package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
- package/.agents/scripts/lib/observability/signal-validator.js +5 -37
- package/.agents/scripts/lib/observability/signals-writer.js +11 -121
- package/.agents/scripts/lib/observability/source-classifier.js +22 -203
- package/.agents/scripts/lib/observability/terse-result.js +14 -47
- package/.agents/scripts/lib/onboard/init-tail.js +13 -74
- package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
- package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
- package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
- package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
- package/.agents/scripts/lib/orchestration/ceremony-routing.js +28 -156
- package/.agents/scripts/lib/orchestration/change-set.js +7 -36
- package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
- package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
- package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
- package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
- package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
- package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
- package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
- package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
- package/.agents/scripts/lib/orchestration/check-state.js +92 -0
- package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
- package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +121 -157
- package/.agents/scripts/lib/orchestration/code-review.js +24 -128
- package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
- package/.agents/scripts/lib/orchestration/complexity-gate.js +118 -462
- package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
- package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
- package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
- package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
- package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
- package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
- package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
- package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
- package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
- package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
- package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
- package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
- package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
- package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
- package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
- package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
- package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
- package/.agents/scripts/lib/orchestration/light-suitability.js +37 -307
- package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
- package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
- package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
- package/.agents/scripts/lib/orchestration/plan-context.js +55 -318
- package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
- package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
- package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
- package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
- package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
- package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
- package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +16 -78
- package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
- package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
- package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
- package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
- package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
- package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
- package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +71 -289
- package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +96 -362
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +9 -39
- package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +60 -186
- package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
- package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
- package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
- package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
- package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
- package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
- package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
- package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
- package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
- package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
- package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
- package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
- package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
- package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
- package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
- package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
- package/.agents/scripts/lib/orchestration/review-depth.js +12 -91
- package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
- package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
- package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
- package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
- package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
- package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
- package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
- package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
- package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
- package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
- package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
- package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
- package/.agents/scripts/lib/orchestration/run-epilogue.js +245 -326
- package/.agents/scripts/lib/orchestration/run-scoped-config.js +55 -159
- package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
- package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
- package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
- package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
- package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +20 -82
- package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
- package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
- package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
- package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
- package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +96 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
- package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
- package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
- package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
- package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
- package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +180 -273
- package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
- package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
- package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
- package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
- package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
- package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
- package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
- package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
- package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -200
- package/.agents/scripts/lib/orchestration/story-follow-ups.js +167 -252
- package/.agents/scripts/lib/orchestration/story-init-envelope.js +52 -0
- package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
- package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
- package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -135
- package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
- package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
- package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
- package/.agents/scripts/lib/orchestration/ticket-validator.js +63 -344
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -261
- package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
- package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
- package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
- package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
- package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
- package/.agents/scripts/lib/path-security.js +3 -6
- package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
- package/.agents/scripts/lib/preflight-runner.js +13 -69
- package/.agents/scripts/lib/process-group.js +143 -0
- package/.agents/scripts/lib/project-root.js +2 -8
- package/.agents/scripts/lib/provider-factory.js +2 -25
- package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
- package/.agents/scripts/lib/qa/qa-session.js +15 -69
- package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
- package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
- package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
- package/.agents/scripts/lib/reserved-test-ids.js +9 -47
- package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
- package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
- package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
- package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
- package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
- package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
- package/.agents/scripts/lib/signals/detectors/common.js +12 -38
- package/.agents/scripts/lib/signals/index.js +2 -19
- package/.agents/scripts/lib/signals/schema.js +14 -109
- package/.agents/scripts/lib/signals/write.js +2 -11
- package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
- package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
- package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
- package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
- package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
- package/.agents/scripts/lib/single-story-sweep.js +14 -97
- package/.agents/scripts/lib/skills/parse-skill.js +13 -59
- package/.agents/scripts/lib/skills/skills-index.js +8 -29
- package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
- package/.agents/scripts/lib/source-extensions.js +11 -42
- package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
- package/.agents/scripts/lib/stdio-flush.js +9 -36
- package/.agents/scripts/lib/story-adjacency.js +8 -40
- package/.agents/scripts/lib/story-body/body-format-lints.js +51 -66
- package/.agents/scripts/lib/story-body/footer-block.js +11 -44
- package/.agents/scripts/lib/story-body/story-body.js +123 -344
- package/.agents/scripts/lib/temp-retention.js +42 -143
- package/.agents/scripts/lib/templates/decomposer-prompts.js +18 -80
- package/.agents/scripts/lib/test-env.js +12 -65
- package/.agents/scripts/lib/test-run-credit.js +10 -65
- package/.agents/scripts/lib/test-runner-contract.js +19 -74
- package/.agents/scripts/lib/test-temp.js +38 -184
- package/.agents/scripts/lib/test-tiers.js +12 -96
- package/.agents/scripts/lib/ticket-body-sections.js +21 -96
- package/.agents/scripts/lib/transpile.js +15 -74
- package/.agents/scripts/lib/util/concurrent-map.js +6 -25
- package/.agents/scripts/lib/util/parse-id-list.js +8 -34
- package/.agents/scripts/lib/util/poll-loop.js +8 -28
- package/.agents/scripts/lib/util/with-timeout.js +2 -11
- package/.agents/scripts/lib/validation-evidence.js +21 -96
- package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
- package/.agents/scripts/lib/wave-runner/live-probe.js +67 -209
- package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
- package/.agents/scripts/lib/workers/crap-worker.js +11 -64
- package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
- package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
- package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
- package/.agents/scripts/lib/workflow-closure.js +22 -105
- package/.agents/scripts/lib/workspace-provisioner.js +16 -54
- package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
- package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
- package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
- package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
- package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
- package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
- package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
- package/.agents/scripts/lib/worktree-manager.js +15 -40
- package/.agents/scripts/lint-issue-body.js +12 -68
- package/.agents/scripts/mandrel-update-preflight.js +10 -70
- package/.agents/scripts/merge-baseline.js +30 -105
- package/.agents/scripts/nav-registry-diff.js +22 -108
- package/.agents/scripts/notify.js +12 -69
- package/.agents/scripts/plan-context.js +97 -92
- package/.agents/scripts/plan-critics.js +12 -66
- package/.agents/scripts/plan-persist.js +71 -137
- package/.agents/scripts/plan-run-epilogue.js +20 -43
- package/.agents/scripts/pr-watch-with-update.js +79 -263
- package/.agents/scripts/providers/github/auth.js +3 -8
- package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
- package/.agents/scripts/providers/github/board-add.js +5 -21
- package/.agents/scripts/providers/github/branch-protection.js +11 -43
- package/.agents/scripts/providers/github/cache.js +2 -14
- package/.agents/scripts/providers/github/comments.js +7 -40
- package/.agents/scripts/providers/github/compose.js +3 -19
- package/.agents/scripts/providers/github/errors.js +22 -125
- package/.agents/scripts/providers/github/issues.js +31 -123
- package/.agents/scripts/providers/github/labels.js +24 -124
- package/.agents/scripts/providers/github/mappers.js +5 -27
- package/.agents/scripts/providers/github/merge-methods.js +3 -22
- package/.agents/scripts/providers/github/project-board.js +2 -17
- package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
- package/.agents/scripts/providers/github/request-helpers.js +5 -32
- package/.agents/scripts/providers/github/search-budget.js +9 -39
- package/.agents/scripts/providers/github/search-query.js +5 -26
- package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
- package/.agents/scripts/providers/github/sub-issues.js +7 -36
- package/.agents/scripts/providers/github/tickets.js +32 -134
- package/.agents/scripts/providers/github.js +18 -59
- package/.agents/scripts/prune-plan-run-labels.js +12 -46
- package/.agents/scripts/quality-preview.js +35 -220
- package/.agents/scripts/resolve-doc-tiers.js +3 -26
- package/.agents/scripts/resolve-stories.js +16 -67
- package/.agents/scripts/resync-status-column.js +6 -25
- package/.agents/scripts/run-tests.js +29 -104
- package/.agents/scripts/single-story-close.js +23 -135
- package/.agents/scripts/single-story-confirm-merge.js +32 -139
- package/.agents/scripts/single-story-init.js +47 -259
- package/.agents/scripts/stories-wave-tick.js +179 -415
- package/.agents/scripts/sync-agentrc.js +3 -21
- package/.agents/scripts/sync-claude-agents.js +9 -55
- package/.agents/scripts/sync-claude-commands.js +20 -110
- package/.agents/scripts/test-wrapper.js +6 -43
- package/.agents/scripts/update-coverage-baseline.js +5 -22
- package/.agents/scripts/update-crap-baseline.js +7 -30
- package/.agents/scripts/update-duplication-baseline.js +16 -92
- package/.agents/scripts/update-maintainability-baseline.js +8 -62
- package/.agents/scripts/update-ticket-state.js +1 -7
- package/.agents/scripts/validate-skills.js +6 -26
- package/.agents/skills/core/gates-and-baselines/reference.md +0 -1
- package/.agents/skills/skills.index.json +2 -2
- package/.agents/skills/stack/qa/playwright/SKILL.md +26 -0
- package/.agents/templates/agent-protocol.md +2 -2
- package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
- package/.agents/workflows/audit-accessibility.md +4 -7
- package/.agents/workflows/audit-adrs.md +3 -6
- package/.agents/workflows/audit-architecture.md +3 -11
- package/.agents/workflows/audit-baselines.md +6 -9
- package/.agents/workflows/audit-clean-code.md +8 -12
- package/.agents/workflows/audit-data-model.md +3 -7
- package/.agents/workflows/audit-dependencies.md +4 -7
- package/.agents/workflows/audit-devops.md +4 -8
- package/.agents/workflows/audit-documentation.md +1 -4
- package/.agents/workflows/audit-mobile.md +4 -7
- package/.agents/workflows/audit-navigability.md +3 -6
- package/.agents/workflows/audit-performance.md +2 -4
- package/.agents/workflows/audit-privacy.md +4 -7
- package/.agents/workflows/audit-quality.md +4 -7
- package/.agents/workflows/audit-security.md +4 -7
- package/.agents/workflows/audit-seo.md +4 -7
- package/.agents/workflows/audit-sre.md +4 -7
- package/.agents/workflows/audit-to-stories.md +17 -30
- package/.agents/workflows/audit-ux-ui.md +4 -7
- package/.agents/workflows/helpers/acceptance-self-eval.md +84 -157
- package/.agents/workflows/helpers/audit-lens-core.md +1 -1
- package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
- package/.agents/workflows/helpers/code-review.md +4 -2
- package/.agents/workflows/helpers/deliver-digest.md +37 -28
- package/.agents/workflows/helpers/deliver-light.md +92 -101
- package/.agents/workflows/helpers/deliver-reference.md +162 -220
- package/.agents/workflows/helpers/deliver-story-reference.md +197 -607
- package/.agents/workflows/helpers/deliver-story.md +17 -18
- package/.agents/workflows/helpers/plan-reference.md +125 -167
- package/.agents/workflows/helpers/qa-core.md +12 -0
- package/.agents/workflows/mandrel-deliver.md +47 -31
- package/.agents/workflows/mandrel-plan.md +22 -21
- package/.agents/workflows/mandrel-update.md +36 -21
- package/.agents/workflows/memory-consolidate.md +1 -1
- package/.agents/workflows/qa-assist.md +27 -71
- package/.agents/workflows/qa-explore.md +19 -59
- package/.agents/workflows/qa-run.md +11 -33
- package/README.md +1 -1
- package/bin/mandrel.js +5 -46
- package/bin/postinstall.js +18 -107
- package/docs/CHANGELOG.md +60 -0
- package/lib/cli/doctor.js +11 -71
- package/lib/cli/init.js +26 -165
- package/lib/cli/migrate.js +5 -64
- package/lib/cli/registry.js +84 -467
- package/lib/cli/sync-agents.js +4 -64
- package/lib/cli/sync-commands.js +11 -64
- package/lib/cli/sync.js +34 -213
- package/lib/cli/uninstall.js +40 -219
- package/lib/cli/update.js +326 -523
- package/lib/cli/version-check.js +8 -72
- package/lib/cli/version-helpers.js +14 -87
- package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
- package/lib/migrations/index.js +17 -92
- package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
- package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
- package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
- package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
- package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
- package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
- package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
- package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
- package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +21 -0
- package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
- package/package.json +17 -14
- package/.agents/docs/SDLC.md +0 -590
- package/.agents/docs/quality-gates.md +0 -1179
- package/.agents/rules/known-tooling-behavior.md +0 -150
- package/.agents/rules/orchestration-error-handling.md +0 -61
- package/.agents/rules/test-seams.md +0 -59
- package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
- package/.agents/schemas/baselines/lint.schema.json +0 -47
- package/.agents/schemas/model-attribution.schema.json +0 -53
- package/.agents/scripts/check-action-pinning.js +0 -260
- package/.agents/scripts/check-audit-attribution.js +0 -302
- package/.agents/scripts/check-baseline-drift.js +0 -211
- package/.agents/scripts/check-baseline-scope.js +0 -362
- package/.agents/scripts/check-generated-validator.js +0 -202
- package/.agents/scripts/check-knip-entries.js +0 -159
- package/.agents/scripts/check-lifecycle-lint.js +0 -294
- package/.agents/scripts/check-pinned-override-notes.js +0 -102
- package/.agents/scripts/check-schema-references.js +0 -366
- package/.agents/scripts/check-test-portability.js +0 -512
- package/.agents/scripts/check-workflow-citations.js +0 -332
- package/.agents/scripts/check-workflow-cli-lint.js +0 -299
- package/.agents/scripts/check-workflow-timeouts.js +0 -291
- package/.agents/scripts/install-matrix-assert.js +0 -326
- package/.agents/scripts/lib/audit-advisories.js +0 -195
- package/.agents/scripts/lib/audit-attribution.js +0 -134
- package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
- package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
- package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
- package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
- package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
- package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
- package/.agents/scripts/lib/c8-cli-path.js +0 -21
- package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
- package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
- package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
- package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
- package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
- package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
- package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
- package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
- package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
- package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
- package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
- package/.agents/scripts/lib/fs-walk.js +0 -52
- package/.agents/scripts/lib/knip-config-resolver.js +0 -181
- package/.agents/scripts/lib/knip-entry-sync.js +0 -452
- package/.agents/scripts/lib/orchestration/model-attribution.js +0 -418
- package/.agents/scripts/lib/orchestration/story-plan-state.js +0 -33
- package/.agents/scripts/lib/orchestration/structured-comment-parser.js +0 -67
- package/.agents/scripts/lib/pinned-override-notes.js +0 -88
- package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
- package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
- package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
- package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
- package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
- package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
- package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
- package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
- package/.agents/scripts/lib/test-isolate/runner.js +0 -483
- package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
- package/.agents/scripts/lib/test-profile/render-report.js +0 -45
- package/.agents/scripts/lint-label-vocabulary.js +0 -214
- package/.agents/scripts/post-structured-comment.js +0 -127
- package/.agents/scripts/provision-git-hooks.js +0 -85
- package/.agents/scripts/prune-baseline-orphans.js +0 -181
- package/.agents/scripts/run-coverage.js +0 -197
- package/.agents/scripts/run-lint.js +0 -133
- package/.agents/scripts/run-test-profile.js +0 -129
- package/.agents/scripts/run-verify.js +0 -118
- package/.agents/scripts/test-isolate.js +0 -55
- package/.agents/scripts/update-dead-exports-baseline.js +0 -321
|
@@ -1,38 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* lib/findings/semantic-issue-search.js —
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* candidate search that surfaces issues likely to describe the same problem as
|
|
6
|
-
* a finding, *before* the exact fingerprint confirmation in
|
|
7
|
-
* `route-finding.js` runs. The fingerprint is precise but brittle — a reworded
|
|
8
|
-
* title or a moved file produces a fresh sha even when the underlying problem
|
|
9
|
-
* is the same. The semantic pass casts a wider net so the confirmation stage
|
|
10
|
-
* has the right candidates to inspect.
|
|
11
|
-
*
|
|
12
|
-
* The search scans BOTH open and closed issues, and explicitly includes the
|
|
13
|
-
* sub-issues of any in-scope Epic (a regression that was closed under a prior
|
|
14
|
-
* Epic, or a still-open sibling Story, must be reachable). Epic sub-issues are
|
|
15
|
-
* fetched through the same injected port so a closed-then-reopened problem is
|
|
16
|
-
* never missed.
|
|
17
|
-
*
|
|
18
|
-
* Pure orchestration: no network I/O lives here. The `search` port — and the
|
|
19
|
-
* optional `listEpicSubIssues` port — are injected by the caller (production
|
|
20
|
-
* wires them to the GitHub provider; tests pass in-memory stubs). The unit
|
|
21
|
-
* test for this module performs no network calls.
|
|
2
|
+
* lib/findings/semantic-issue-search.js — meaning-first candidate search that
|
|
3
|
+
* widens the pool `route-finding.js` confirms, catching drifted fingerprints.
|
|
4
|
+
* Ports are injected.
|
|
22
5
|
*/
|
|
23
6
|
|
|
24
7
|
const DEFAULT_LIMIT = 25;
|
|
25
8
|
|
|
26
9
|
/**
|
|
27
|
-
*
|
|
28
|
-
* headroom under GitHub Search's 256-char limit for the `repo:` / `type:`
|
|
29
|
-
* qualifiers `searchIssues` appends (Story #4678).
|
|
10
|
+
* Headroom under GitHub Search's 256-char limit for appended qualifiers.
|
|
30
11
|
*/
|
|
31
12
|
const DEFAULT_QUERY_BUDGET = 200;
|
|
32
13
|
|
|
33
14
|
/**
|
|
34
|
-
* Normalise a free-text string for token comparison: lowercased, trimmed,
|
|
35
|
-
* punctuation collapsed to spaces.
|
|
36
15
|
* @param {unknown} value
|
|
37
16
|
* @returns {string}
|
|
38
17
|
*/
|
|
@@ -45,8 +24,6 @@ function normaliseText(value) {
|
|
|
45
24
|
}
|
|
46
25
|
|
|
47
26
|
/**
|
|
48
|
-
* Tokenise normalised text into a Set of words, dropping very short noise
|
|
49
|
-
* tokens that carry no discriminating signal.
|
|
50
27
|
* @param {string} text
|
|
51
28
|
* @returns {Set<string>}
|
|
52
29
|
*/
|
|
@@ -59,8 +36,7 @@ function tokenize(text) {
|
|
|
59
36
|
}
|
|
60
37
|
|
|
61
38
|
/**
|
|
62
|
-
*
|
|
63
|
-
* empty so an empty query never spuriously matches.
|
|
39
|
+
* 0 when either set is empty, so an empty query never matches.
|
|
64
40
|
* @param {Set<string>} a
|
|
65
41
|
* @param {Set<string>} b
|
|
66
42
|
* @returns {number} similarity in [0, 1]
|
|
@@ -76,10 +52,7 @@ function jaccard(a, b) {
|
|
|
76
52
|
}
|
|
77
53
|
|
|
78
54
|
/**
|
|
79
|
-
*
|
|
80
|
-
* `primaryFile` like `src/very/deep/module.js` contributes only `module.js`
|
|
81
|
-
* to the query — the basename carries the discriminating signal while the
|
|
82
|
-
* mangled path spends the character budget for nothing (Story #4678).
|
|
55
|
+
* Only the basename carries signal; the full path would waste query budget.
|
|
83
56
|
* @param {unknown} value
|
|
84
57
|
* @returns {string}
|
|
85
58
|
*/
|
|
@@ -90,12 +63,8 @@ function basename(value) {
|
|
|
90
63
|
}
|
|
91
64
|
|
|
92
65
|
/**
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
* both the (production) full-text search port and the local relevance scorer
|
|
96
|
-
* key on. The result is filled highest-signal-first (title, then area, then
|
|
97
|
-
* basename) up to `budget` characters on a whole-token boundary so a long title
|
|
98
|
-
* over a deep path never blows GitHub Search's length limit (Story #4678).
|
|
66
|
+
* Title, area, file basename — highest signal first, cut to `budget` on a
|
|
67
|
+
* token boundary.
|
|
99
68
|
* @param {object} finding
|
|
100
69
|
* @param {object} [options]
|
|
101
70
|
* @param {number} [options.budget] — max query length in characters.
|
|
@@ -121,9 +90,7 @@ export function buildQuery(finding, { budget = DEFAULT_QUERY_BUDGET } = {}) {
|
|
|
121
90
|
}
|
|
122
91
|
|
|
123
92
|
/**
|
|
124
|
-
*
|
|
125
|
-
* dominates; body overlap is a weaker secondary signal so a verbose body
|
|
126
|
-
* cannot drown out a precise title match.
|
|
93
|
+
* Title overlap dominates so a verbose body cannot drown a precise title.
|
|
127
94
|
* @param {Set<string>} queryTokens
|
|
128
95
|
* @param {{ title?: string, body?: string }} issue
|
|
129
96
|
* @returns {number} relevance score in [0, 1]
|
|
@@ -135,7 +102,6 @@ function scoreIssue(queryTokens, issue) {
|
|
|
135
102
|
}
|
|
136
103
|
|
|
137
104
|
/**
|
|
138
|
-
* De-duplicate issue records by `number`, keeping the first occurrence.
|
|
139
105
|
* @param {Array<{ number?: number }>} issues
|
|
140
106
|
* @returns {Array<object>}
|
|
141
107
|
*/
|
|
@@ -152,28 +118,17 @@ function dedupeByNumber(issues) {
|
|
|
152
118
|
}
|
|
153
119
|
|
|
154
120
|
/**
|
|
155
|
-
*
|
|
121
|
+
* Candidates scored locally by token overlap, best-first.
|
|
156
122
|
*
|
|
157
|
-
*
|
|
158
|
-
* full-text search across open AND closed issues). When an `epicId` is in
|
|
159
|
-
* scope and a `listEpicSubIssues` port is supplied, that Epic's sub-issues
|
|
160
|
-
* are folded into the candidate pool so a regression closed under a prior
|
|
161
|
-
* Epic — or an open sibling Story — is never missed. The pooled candidates
|
|
162
|
-
* are scored locally by token overlap and returned best-first.
|
|
163
|
-
*
|
|
164
|
-
* @param {object} finding — canonical finding ({ title, area, primaryFile, ... }).
|
|
123
|
+
* @param {object} finding
|
|
165
124
|
* @param {object} ports
|
|
166
125
|
* @param {(query: string) => Promise<Array<{ number: number, state: string, title?: string, body?: string }>>} ports.search
|
|
167
|
-
* Required. Queries both open and closed issues for the finding's query text.
|
|
168
126
|
* @param {(epicId: number) => Promise<Array<{ number: number, state: string, title?: string, body?: string }>>} [ports.listEpicSubIssues]
|
|
169
|
-
* Optional. Lists the sub-issues of the in-scope Epic.
|
|
170
127
|
* @param {object} [options]
|
|
171
|
-
* @param {number|null} [options.epicId]
|
|
172
|
-
* @param {number} [options.limit]
|
|
173
|
-
* @param {number} [options.minScore]
|
|
174
|
-
* (default 0; every scanned issue is a candidate).
|
|
128
|
+
* @param {number|null} [options.epicId]
|
|
129
|
+
* @param {number} [options.limit]
|
|
130
|
+
* @param {number} [options.minScore]
|
|
175
131
|
* @returns {Promise<Array<{ number: number, state: string, title?: string, body?: string, score: number }>>}
|
|
176
|
-
* candidates sorted by descending relevance score.
|
|
177
132
|
*/
|
|
178
133
|
export async function searchSemanticCandidates(
|
|
179
134
|
finding,
|
|
@@ -1,30 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* lib/findings/severity.js —
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* the shared findings core previously each declared their own severity list —
|
|
6
|
-
* `classify-finding.js` (`[unknown, low, medium, high, critical]`),
|
|
7
|
-
* `promote-finding.js` (`SEVERITY_RANK` over `[critical … info]`), and the
|
|
8
|
-
* `qa-ledger` JSON schema (`[critical, high, medium, low, info]`). Because
|
|
9
|
-
* `severity` is a `fingerprintFinding` identity field
|
|
10
|
-
* (`route-finding.js`), the same finding could hash to different SHAs depending
|
|
11
|
-
* on which path normalised its severity, silently weakening dedup. This module
|
|
12
|
-
* collapses all three onto one enum + one normaliser so the fingerprint is
|
|
13
|
-
* stable regardless of the code path that produced the severity.
|
|
14
|
-
*
|
|
15
|
-
* The canonical order is `critical | high | medium | low | info`, highest →
|
|
16
|
-
* lowest, and it MUST match the `severity` enum in
|
|
17
|
-
* `.agents/schemas/qa-ledger.schema.json`. Pure module: no I/O, no
|
|
18
|
-
* module-level state beyond the frozen constants.
|
|
2
|
+
* lib/findings/severity.js — the one severity vocabulary. Severity is a
|
|
3
|
+
* fingerprint field, so every path must normalise it identically. Order MUST
|
|
4
|
+
* match the `severity` enum in `qa-ledger.schema.json`.
|
|
19
5
|
*/
|
|
20
6
|
|
|
21
|
-
/**
|
|
22
|
-
* The closed, canonical set of severity values, ordered highest → lowest.
|
|
23
|
-
* This is the ONLY definition of the severity vocabulary in the findings core;
|
|
24
|
-
* `classify-finding.js` and `promote-finding.js` re-export / import it rather
|
|
25
|
-
* than re-declaring their own list. Mirrors the `severity` enum in
|
|
26
|
-
* `qa-ledger.schema.json`.
|
|
27
|
-
*/
|
|
7
|
+
/** Highest → lowest. */
|
|
28
8
|
export const SEVERITIES = Object.freeze([
|
|
29
9
|
'critical',
|
|
30
10
|
'high',
|
|
@@ -33,34 +13,11 @@ export const SEVERITIES = Object.freeze([
|
|
|
33
13
|
'info',
|
|
34
14
|
]);
|
|
35
15
|
|
|
36
|
-
/**
|
|
37
|
-
* The severity applied when a finding carries no recognisable severity. `info`
|
|
38
|
-
* is the canonical floor (lowest level). The ledger/finding schemas REQUIRE a
|
|
39
|
-
* severity drawn from {@link SEVERITIES}, so this fallback only fires on
|
|
40
|
-
* malformed input — and because both the classify and promote paths share it,
|
|
41
|
-
* malformed input still fingerprints identically across the two paths.
|
|
42
|
-
*/
|
|
43
16
|
const DEFAULT_SEVERITY = 'info';
|
|
44
17
|
|
|
45
18
|
const SEVERITY_SET = new Set(SEVERITIES);
|
|
46
19
|
|
|
47
|
-
/**
|
|
48
|
-
* Non-canonical spellings that resolve onto a canonical level (Story #4877).
|
|
49
|
-
*
|
|
50
|
-
* The vocabulary drifted because four modules each carried their own partial
|
|
51
|
-
* copy of it: `audit-to-stories/parse-audit-md.js` recognised
|
|
52
|
-
* `critical|high|medium|mod|moderate|low` and nothing else, `audit-to-stories.js`
|
|
53
|
-
* ranked `critical|high|medium|low`, and `audit-to-stories/seed-from-findings.js`
|
|
54
|
-
* ordered the same four. None of them knew `info` — the canonical floor — so an
|
|
55
|
-
* `Info` / `Informational` finding parsed to `null`, tallied as `unknown`, and
|
|
56
|
-
* was dropped by EVERY severity-filtered run (including `--severity low`).
|
|
57
|
-
* Folding the alias table in here makes this module the only place the
|
|
58
|
-
* vocabulary is written down.
|
|
59
|
-
*
|
|
60
|
-
* Keys are already lower-cased and trimmed by {@link normalizeSeverity}.
|
|
61
|
-
*
|
|
62
|
-
* @type {Readonly<Record<string, string>>}
|
|
63
|
-
*/
|
|
20
|
+
/** @type {Readonly<Record<string, string>>} */
|
|
64
21
|
const SEVERITY_ALIASES = Object.freeze({
|
|
65
22
|
blocker: 'critical',
|
|
66
23
|
major: 'high',
|
|
@@ -72,13 +29,7 @@ const SEVERITY_ALIASES = Object.freeze({
|
|
|
72
29
|
trivial: 'info',
|
|
73
30
|
});
|
|
74
31
|
|
|
75
|
-
/**
|
|
76
|
-
* Numeric rank for "highest severity wins" comparisons, derived from the
|
|
77
|
-
* canonical order so the ranking has exactly one source. `critical` is the
|
|
78
|
-
* highest rank (`SEVERITIES.length - 1`); `info` is `0`.
|
|
79
|
-
*
|
|
80
|
-
* @type {Readonly<Record<string, number>>}
|
|
81
|
-
*/
|
|
32
|
+
/** @type {Readonly<Record<string, number>>} */
|
|
82
33
|
export const SEVERITY_RANK = Object.freeze(
|
|
83
34
|
Object.fromEntries(
|
|
84
35
|
SEVERITIES.map((severity, index) => [
|
|
@@ -89,15 +40,11 @@ export const SEVERITY_RANK = Object.freeze(
|
|
|
89
40
|
);
|
|
90
41
|
|
|
91
42
|
/**
|
|
92
|
-
*
|
|
93
|
-
* whitespace-insensitive. A non-string, empty, or unrecognised value resolves
|
|
94
|
-
* to `fallback` (default {@link DEFAULT_SEVERITY}) rather than throwing — the
|
|
95
|
-
* findings pipeline treats severity as advisory signal, never a hard gate.
|
|
43
|
+
* Never throws — severity is advisory, never a gate.
|
|
96
44
|
*
|
|
97
|
-
* @param {unknown} value
|
|
98
|
-
* @param {string} [fallback=DEFAULT_SEVERITY]
|
|
99
|
-
*
|
|
100
|
-
* @returns {string} one of {@link SEVERITIES}.
|
|
45
|
+
* @param {unknown} value
|
|
46
|
+
* @param {string} [fallback=DEFAULT_SEVERITY]
|
|
47
|
+
* @returns {string}
|
|
101
48
|
*/
|
|
102
49
|
export function normalizeSeverity(value, fallback = DEFAULT_SEVERITY) {
|
|
103
50
|
if (typeof value !== 'string') return fallback;
|
|
@@ -107,33 +54,12 @@ export function normalizeSeverity(value, fallback = DEFAULT_SEVERITY) {
|
|
|
107
54
|
}
|
|
108
55
|
|
|
109
56
|
/**
|
|
110
|
-
*
|
|
111
|
-
* fingerprint
|
|
112
|
-
*
|
|
113
|
-
* `severity` is a `fingerprintFinding` identity field
|
|
114
|
-
* (`route-finding.js`), so whatever this returns is folded into the sha that
|
|
115
|
-
* deduplicates findings against already-filed Issues. That makes the severity
|
|
116
|
-
* pipeline and the severity *identity* two different jobs with two different
|
|
117
|
-
* failure modes:
|
|
57
|
+
* Fingerprint-only projection: absent stays `''` and unknown passes through,
|
|
58
|
+
* so no filed fingerprint moves; aliases resolve, so the hash is invariant
|
|
59
|
+
* under normalisation.
|
|
118
60
|
*
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
* - This function must NOT. Folding `info` in where the previous
|
|
122
|
-
* implementation folded the empty string would re-mint the fingerprint of
|
|
123
|
-
* every finding that carries no severity, silently breaking dedup for all of
|
|
124
|
-
* them. An absent severity therefore stays the empty string, exactly as the
|
|
125
|
-
* raw `String(value).toLowerCase().trim()` it replaces produced.
|
|
126
|
-
*
|
|
127
|
-
* What it *does* change is alias resolution: `Informational` and `info` project
|
|
128
|
-
* onto the same `info`, so the fingerprint is **invariant** under the
|
|
129
|
-
* normalization this Story introduces — a finding hashes the same whether it is
|
|
130
|
-
* fingerprinted before or after {@link normalizeSeverity} has run over it. An
|
|
131
|
-
* unrecognised non-empty value is passed through verbatim rather than collapsed,
|
|
132
|
-
* again so no already-filed fingerprint moves.
|
|
133
|
-
*
|
|
134
|
-
* @param {unknown} value — the raw severity field off a finding.
|
|
135
|
-
* @returns {string} a canonical level, the empty string when absent, or the
|
|
136
|
-
* lower-cased raw value when it is neither canonical nor a known alias.
|
|
61
|
+
* @param {unknown} value
|
|
62
|
+
* @returns {string}
|
|
137
63
|
*/
|
|
138
64
|
export function fingerprintSeverity(value) {
|
|
139
65
|
if (typeof value !== 'string') return '';
|
|
@@ -143,13 +69,8 @@ export function fingerprintSeverity(value) {
|
|
|
143
69
|
}
|
|
144
70
|
|
|
145
71
|
/**
|
|
146
|
-
*
|
|
147
|
-
*
|
|
148
|
-
* {@link normalizeSeverity}, so the result is always one of {@link SEVERITIES}.
|
|
149
|
-
*
|
|
150
|
-
* @param {Iterable<unknown>} values — raw severity strings (or anything
|
|
151
|
-
* `normalizeSeverity` accepts).
|
|
152
|
-
* @returns {string} one of {@link SEVERITIES}.
|
|
72
|
+
* @param {Iterable<unknown>} values
|
|
73
|
+
* @returns {string}
|
|
153
74
|
*/
|
|
154
75
|
export function highestSeverity(values) {
|
|
155
76
|
let best = DEFAULT_SEVERITY;
|
|
@@ -165,14 +86,7 @@ export function highestSeverity(values) {
|
|
|
165
86
|
return best;
|
|
166
87
|
}
|
|
167
88
|
|
|
168
|
-
/**
|
|
169
|
-
* Internals reached by the unit tests only. The floor and the alias table are
|
|
170
|
-
* consumed exclusively by this module's own exported functions, so they are
|
|
171
|
-
* not public API — but the alias table carries a structural invariant (no
|
|
172
|
-
* alias shadows a canonical level, every target IS one) that cannot be proven
|
|
173
|
-
* through `normalizeSeverity` alone, since that function returns a canonical
|
|
174
|
-
* value by construction.
|
|
175
|
-
*/
|
|
89
|
+
/** Test-only: the alias-table invariant is unobservable via the API. */
|
|
176
90
|
export const __testing = {
|
|
177
91
|
DEFAULT_SEVERITY,
|
|
178
92
|
SEVERITY_ALIASES,
|
|
@@ -1,40 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* format-generated-json.js — run generated JSON through
|
|
3
|
-
*
|
|
4
|
-
* commit
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* expands every array across multiple lines. Biome collapses short ones
|
|
8
|
-
* that fit inside `lineWidth` (`"allowedTools": ["Read", "Bash"]`), and
|
|
9
|
-
* lint-staged runs `biome format --write` over staged JSON at commit
|
|
10
|
-
* time — so the committed artifact is Biome-shaped while a fresh
|
|
11
|
-
* generator run is not. The gap means regenerating on a clean tree
|
|
12
|
-
* always leaves format drift, and a `<generate>` → `lint` sequence fails
|
|
13
|
-
* on `biome ci` even when the generator's own `--check` reports the
|
|
14
|
-
* artifact semantically fresh (Story #4546).
|
|
15
|
-
*
|
|
16
|
-
* Running the real formatter, rather than hand-matching its array
|
|
17
|
-
* collapsing, keeps this correct by construction across future formatter
|
|
18
|
-
* and `lineWidth` changes.
|
|
19
|
-
*
|
|
20
|
-
* Stdin mode is deliberate: Biome's configured `formatWrite` command is
|
|
21
|
-
* whole-tree (`biome format --write .`), which is a far broader side
|
|
22
|
-
* effect than a generator should have. `--stdin-file-path` makes this a
|
|
23
|
-
* pure content transform with no filesystem writes.
|
|
2
|
+
* format-generated-json.js — run generated JSON through Biome so a fresh
|
|
3
|
+
* generator run matches the Biome-shaped committed artifact (lint-staged
|
|
4
|
+
* formats at commit; `JSON.stringify` does not collapse short arrays).
|
|
5
|
+
* Stdin mode keeps it a pure transform — the configured `formatWrite` is
|
|
6
|
+
* whole-tree.
|
|
24
7
|
*/
|
|
25
8
|
|
|
26
9
|
import { spawnSync } from 'node:child_process';
|
|
27
10
|
import process from 'node:process';
|
|
28
11
|
import { Logger } from './Logger.js';
|
|
29
12
|
|
|
30
|
-
/**
|
|
13
|
+
/** A hung formatter must not wedge a generator run. */
|
|
31
14
|
const FORMATTER_TIMEOUT_MS = 30_000;
|
|
32
15
|
|
|
33
|
-
/**
|
|
34
|
-
* Warn once about a fallback and return null for the caller to act on.
|
|
35
|
-
* Owning the message here keeps every caller's write path a single
|
|
36
|
-
* `formatGeneratedJson(...) ?? serialized` expression.
|
|
37
|
-
*/
|
|
16
|
+
/** Callers write `formatGeneratedJson(...) ?? serialized`. */
|
|
38
17
|
function fallback(filename) {
|
|
39
18
|
Logger.warn(
|
|
40
19
|
`project formatter (biome) unavailable — writing unformatted ${filename}; ` +
|
|
@@ -44,20 +23,10 @@ function fallback(filename) {
|
|
|
44
23
|
}
|
|
45
24
|
|
|
46
25
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* failing formatter warns and returns `null` for the caller to fall back
|
|
52
|
-
* on its own serialization rather than failing the generator. That is
|
|
53
|
-
* safe wherever the artifact's freshness check compares parsed objects
|
|
54
|
-
* rather than bytes — formatting carries no semantic content.
|
|
55
|
-
*
|
|
56
|
-
* `--no` keeps npx from reaching the network to install a missing Biome.
|
|
57
|
-
* `filename` is passed as a bare basename: Biome only needs it to infer
|
|
58
|
-
* the language and match config overrides, and a basename cannot carry
|
|
59
|
-
* the spaces that would break arg quoting under the Windows `shell:
|
|
60
|
-
* true` spawn.
|
|
26
|
+
* Best-effort: consumers may lack Biome, so failure warns and returns `null`
|
|
27
|
+
* — safe where freshness compares parsed objects, not bytes. `--no` stops
|
|
28
|
+
* npx installing from the network; `filename` is a bare basename so it
|
|
29
|
+
* cannot carry spaces that break Windows shell quoting.
|
|
61
30
|
*
|
|
62
31
|
* @param {string} source Text to format.
|
|
63
32
|
* @param {object} opts
|
|
@@ -79,8 +48,7 @@ export function formatGeneratedJson(
|
|
|
79
48
|
cwd,
|
|
80
49
|
input: source,
|
|
81
50
|
encoding: 'utf8',
|
|
82
|
-
//
|
|
83
|
-
// spawn without a shell since CVE-2024-27980.
|
|
51
|
+
// `.cmd` shims need a shell on Windows since CVE-2024-27980.
|
|
84
52
|
shell: process.platform === 'win32',
|
|
85
53
|
timeout: FORMATTER_TIMEOUT_MS,
|
|
86
54
|
},
|