mandrel 2.60.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 +10 -10
- package/.agents/agents/story-worker.md +1 -1
- package/.agents/docs/agentrc-reference.json +4 -82
- package/.agents/docs/configuration.md +20 -87
- package/.agents/docs/workflows.md +1 -1
- package/.agents/instructions.md +1 -3
- package/.agents/rules/gherkin-standards.md +4 -0
- package/.agents/schemas/agentrc.schema.json +11 -486
- package/.agents/schemas/story-deliver-terminal.schema.json +10 -0
- package/.agents/schemas/validation-evidence.schema.json +2 -1
- package/.agents/scripts/README.md +14 -14
- package/.agents/scripts/acceptance-eval.js +32 -164
- 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 +9 -45
- package/.agents/scripts/check-arch-cycles.js +14 -64
- package/.agents/scripts/check-baselines.js +8 -48
- package/.agents/scripts/check-context-budget.js +46 -172
- 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 +32 -99
- package/.agents/scripts/deliver-light.js +14 -101
- package/.agents/scripts/deliver-recover.js +6 -42
- package/.agents/scripts/deliver-run.js +36 -133
- 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 +10 -50
- 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 +5 -21
- 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 +31 -143
- 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 -35
- package/.agents/scripts/lib/config/explain.js +9 -80
- package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
- package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +2 -30
- 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 +10 -52
- package/.agents/scripts/lib/config-schema-shared.js +1 -4
- package/.agents/scripts/lib/config-settings-schema-delivery.js +12 -294
- 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 +12 -37
- package/.agents/scripts/lib/coverage-capture-incremental.js +12 -43
- package/.agents/scripts/lib/coverage-capture-usage.js +4 -24
- 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 -126
- 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 +93 -419
- package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
- package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -151
- 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 +31 -259
- 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 +21 -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 +5 -75
- 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 +42 -189
- 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 +42 -214
- 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 +26 -231
- 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 +52 -303
- 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 +14 -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 +49 -248
- package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +85 -368
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +8 -38
- package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +30 -190
- 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 -94
- 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 +40 -199
- package/.agents/scripts/lib/orchestration/run-scoped-config.js +13 -81
- 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 +18 -80
- 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 +9 -50
- 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 +110 -290
- 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 -201
- package/.agents/scripts/lib/orchestration/story-follow-ups.js +43 -245
- package/.agents/scripts/lib/orchestration/story-init-envelope.js +4 -23
- 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 -126
- 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 +39 -181
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -250
- 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 +22 -83
- package/.agents/scripts/lib/story-body/footer-block.js +11 -44
- package/.agents/scripts/lib/story-body/story-body.js +83 -358
- package/.agents/scripts/lib/temp-retention.js +42 -143
- package/.agents/scripts/lib/templates/decomposer-prompts.js +11 -65
- 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 +53 -221
- 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 -104
- package/.agents/scripts/nav-registry-diff.js +22 -108
- package/.agents/scripts/notify.js +12 -69
- package/.agents/scripts/plan-context.js +27 -111
- package/.agents/scripts/plan-critics.js +12 -66
- package/.agents/scripts/plan-persist.js +31 -148
- package/.agents/scripts/plan-run-epilogue.js +11 -37
- package/.agents/scripts/pr-watch-with-update.js +76 -267
- 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 -209
- package/.agents/scripts/stories-wave-tick.js +102 -472
- 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/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/audit-lens-core.md +1 -1
- package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
- package/.agents/workflows/helpers/deliver-digest.md +6 -4
- package/.agents/workflows/helpers/deliver-reference.md +114 -188
- package/.agents/workflows/helpers/deliver-story-reference.md +189 -533
- package/.agents/workflows/helpers/plan-reference.md +86 -139
- package/.agents/workflows/helpers/qa-core.md +12 -0
- 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 +25 -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 +105 -661
- 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 +15 -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 +2 -21
- package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
- package/package.json +16 -14
- package/.agents/docs/SDLC.md +0 -590
- package/.agents/docs/quality-gates.md +0 -1183
- package/.agents/rules/known-tooling-behavior.md +0 -200
- 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/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 -368
- package/.agents/scripts/check-test-portability.js +0 -512
- package/.agents/scripts/check-workflow-citations.js +0 -218
- 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/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 -125
- package/.agents/scripts/test-isolate.js +0 -55
- package/.agents/scripts/update-dead-exports-baseline.js +0 -321
|
@@ -1,40 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
// Scans every `*.md` under `docs/` and `.agents/` (excluding
|
|
8
|
-
// `docs/CHANGELOG.md`) and validates:
|
|
9
|
-
//
|
|
10
|
-
// 1. Every Markdown relative-path link `[text](relative/path[#anchor])`
|
|
11
|
-
// resolves to a real file on disk (anchors are not validated, only
|
|
12
|
-
// stripped). Absolute URLs (http(s)://, mailto:, etc.) and pure
|
|
13
|
-
// in-document anchors (`#section`) are skipped.
|
|
14
|
-
//
|
|
15
|
-
// 2. Every `/<slash-command>` token in prose resolves to
|
|
16
|
-
// `.agents/workflows/<command>.md`. A small allowlist tolerates
|
|
17
|
-
// non-slash-command tokens such as `/temp/`, `/dev/`, and common URL
|
|
18
|
-
// path fragments (e.g. `/issues/`, `/blob/`, `/pulls/`).
|
|
19
|
-
//
|
|
20
|
-
// 3. No active doc mentions any retired slash command. The retired-command
|
|
21
|
-
// blocklist is seeded with `agents-bootstrap-github`,
|
|
22
|
-
// `single-story-plan` (renamed to `/mandrel-plan`), and `mandrel`
|
|
23
|
-
// (retired in favor of the generated `.agents/docs/workflows.md`
|
|
24
|
-
// catalog) and takes precedence over the workflow-resolution check —
|
|
25
|
-
// a retired token is always a non-zero exit even if a stale workflow
|
|
26
|
-
// file happens to exist.
|
|
27
|
-
//
|
|
28
|
-
// 4. Story #4801 — every relative link originating under `.agents/**`
|
|
29
|
-
// resolves to a target that still exists once the tree is materialized
|
|
30
|
-
// into a *consumer* project. See `escapesPayload` for the boundary rule.
|
|
31
|
-
//
|
|
32
|
-
// Exit codes:
|
|
33
|
-
// 0 every link and slash-command token resolves cleanly.
|
|
34
|
-
// 1 at least one violation; details are written to stderr (file:line).
|
|
35
|
-
//
|
|
36
|
-
// Helpers (region scanner, token tokenizer, etc.) are intentionally inlined
|
|
37
|
-
// per the parent Story's design constraint.
|
|
3
|
+
// Resolves relative Markdown links and `/slash-command` tokens across active
|
|
4
|
+
// docs (anchors stripped, not validated), rejects retired commands even when a
|
|
5
|
+
// stale workflow file exists, and rejects `.agents/**` links that escape the
|
|
6
|
+
// materialized payload.
|
|
38
7
|
|
|
39
8
|
import fs from 'node:fs';
|
|
40
9
|
import path from 'node:path';
|
|
@@ -48,39 +17,23 @@ const __filename = fileURLToPath(import.meta.url);
|
|
|
48
17
|
const __dirname = path.dirname(__filename);
|
|
49
18
|
const REPO_ROOT = path.resolve(__dirname, '..', '..');
|
|
50
19
|
|
|
51
|
-
//
|
|
52
|
-
|
|
53
|
-
// Retired slash-command tokens that MUST NOT appear in any active doc.
|
|
54
|
-
// Tokens are stored WITHOUT the leading slash.
|
|
20
|
+
// Stored without the leading slash, as are the sets below.
|
|
55
21
|
export const RETIRED_COMMANDS = new Set([
|
|
56
22
|
'agents-bootstrap-github',
|
|
57
23
|
'single-story-plan',
|
|
58
24
|
'mandrel',
|
|
59
|
-
// #4482 — dead workflow surface retired (host-native equivalents).
|
|
60
25
|
'explain',
|
|
61
26
|
'git-merge-pr',
|
|
62
27
|
]);
|
|
63
28
|
|
|
64
|
-
//
|
|
65
|
-
//
|
|
66
|
-
// had is a broken record: an ADR describes the world as it was, so freezing
|
|
67
|
-
// its prose is the point. Scoped per-file and per-token rather than
|
|
68
|
-
// allowlisted globally — everywhere else these are simply wrong, and a typo
|
|
69
|
-
// like `/mandrl-plan` must still fail here. Story #5126 renamed `/plan` →
|
|
70
|
-
// `/mandrel-plan` and `/deliver` → `/mandrel-deliver`; the ADRs that decided
|
|
71
|
-
// the Story-only model still name them as they were called then.
|
|
29
|
+
// Old command names a historical record (an ADR) may still quote, scoped
|
|
30
|
+
// per-file and per-token so a typo elsewhere still fails.
|
|
72
31
|
export const SUPERSEDED_COMMAND_SPELLINGS = new Map([
|
|
73
32
|
['docs/decisions.md', new Set(['plan', 'deliver'])],
|
|
74
33
|
]);
|
|
75
34
|
|
|
76
|
-
//
|
|
77
|
-
// are stored WITHOUT the leading slash. The list focuses on common URL path
|
|
78
|
-
// fragments and on-disk path roots that appear in tutorial prose. The
|
|
79
|
-
// scanner additionally suppresses tokens whose surrounding context makes
|
|
80
|
-
// them obviously non-command (see `isCodeFence` and the URL-context heuristic
|
|
81
|
-
// in `extractSlashTokens`).
|
|
35
|
+
// `/foo` tokens in prose that are path roots or URL fragments, not commands.
|
|
82
36
|
export const SLASH_ALLOWLIST = new Set([
|
|
83
|
-
// workspace/conventional roots
|
|
84
37
|
'temp',
|
|
85
38
|
'dev',
|
|
86
39
|
'tmp',
|
|
@@ -97,7 +50,6 @@ export const SLASH_ALLOWLIST = new Set([
|
|
|
97
50
|
'proc',
|
|
98
51
|
'sys',
|
|
99
52
|
'c',
|
|
100
|
-
// common GitHub / git URL path fragments
|
|
101
53
|
'issues',
|
|
102
54
|
'pull',
|
|
103
55
|
'pulls',
|
|
@@ -121,7 +73,6 @@ export const SLASH_ALLOWLIST = new Set([
|
|
|
121
73
|
'milestones',
|
|
122
74
|
'projects',
|
|
123
75
|
'tags',
|
|
124
|
-
// generic URL path fragments
|
|
125
76
|
'docs',
|
|
126
77
|
'guide',
|
|
127
78
|
'reference',
|
|
@@ -136,33 +87,18 @@ export const SLASH_ALLOWLIST = new Set([
|
|
|
136
87
|
'src',
|
|
137
88
|
'lib',
|
|
138
89
|
'node_modules',
|
|
139
|
-
// common framework / tool URL roots
|
|
140
90
|
'workflows',
|
|
141
91
|
'features',
|
|
142
92
|
'main',
|
|
143
93
|
]);
|
|
144
94
|
|
|
145
|
-
//
|
|
146
|
-
|
|
147
|
-
//
|
|
148
|
-
// consumer's project, at `<projectRoot>/.agents` (see `lib/cli/sync.js`:
|
|
149
|
-
// `destRoot = path.join(projectRoot, '.agents')`). `bin/` and `lib/` ship
|
|
150
|
-
// inside the npm tarball but stay under `node_modules/mandrel/`, and the
|
|
151
|
-
// framework's own `tests/`, `docs/` (bar the CHANGELOG) and `.claude/` trees
|
|
152
|
-
// ship nowhere at all. So a relative link that escapes `.agents/` resolves
|
|
153
|
-
// cleanly in THIS repo and dangles in every consumer — which is exactly why
|
|
154
|
-
// the checker cannot catch this class by `fs.existsSync` alone.
|
|
155
|
-
//
|
|
156
|
-
// This is why the boundary is `.agents/` and NOT `package.json#files`: the
|
|
157
|
-
// latter lists `lib/` and `bin/`, which are packaged but never materialized
|
|
158
|
-
// at a consumer's repo root.
|
|
95
|
+
// `mandrel sync` materializes only `.agents/` into a consumer (`bin/`, `lib/`
|
|
96
|
+
// stay in node_modules; tests/docs ship nowhere), so a link escaping it
|
|
97
|
+
// resolves here yet dangles for every consumer — existence alone can't catch it.
|
|
159
98
|
export const MATERIALIZED_ROOT = '.agents';
|
|
160
99
|
|
|
161
|
-
//
|
|
162
|
-
//
|
|
163
|
-
// Deliberately explicit rather than pattern-derived: whether a given repo-root
|
|
164
|
-
// path is consumer-owned or framework-only is a judgment per path, not a rule.
|
|
165
|
-
// A new escaping link fails closed until it is justified and added here.
|
|
100
|
+
// Consumer-owned paths outside `.agents/`, listed explicitly so a new escaping
|
|
101
|
+
// link fails closed until justified here.
|
|
166
102
|
export const CONSUMER_OWNED_PATHS = new Set([
|
|
167
103
|
'package.json',
|
|
168
104
|
'.agentrc.json',
|
|
@@ -171,19 +107,12 @@ export const CONSUMER_OWNED_PATHS = new Set([
|
|
|
171
107
|
'docs/decisions.md',
|
|
172
108
|
]);
|
|
173
109
|
|
|
174
|
-
// Directory prefixes (repo-root-relative, trailing slash) whose whole subtree
|
|
175
|
-
// is consumer-owned.
|
|
176
110
|
export const CONSUMER_OWNED_PREFIXES = Object.freeze(['baselines/']);
|
|
177
111
|
|
|
178
112
|
/**
|
|
179
|
-
*
|
|
180
|
-
*
|
|
181
|
-
*
|
|
182
|
-
* `docs/**` is framework-repo-only, ships nowhere, and keeps today's
|
|
183
|
-
* existence-only semantics.
|
|
184
|
-
*
|
|
185
|
-
* @param {string} relFile repo-relative POSIX path of the linking document
|
|
186
|
-
* @param {string} relTarget repo-relative POSIX path the link resolves to
|
|
113
|
+
* Only links whose source is under `.agents/**` are subject to the rule.
|
|
114
|
+
* @param {string} relFile
|
|
115
|
+
* @param {string} relTarget
|
|
187
116
|
*/
|
|
188
117
|
export function escapesPayload(relFile, relTarget) {
|
|
189
118
|
if (!relFile.startsWith(`${MATERIALIZED_ROOT}/`)) return false;
|
|
@@ -199,8 +128,6 @@ export function escapesPayload(relFile, relTarget) {
|
|
|
199
128
|
return true;
|
|
200
129
|
}
|
|
201
130
|
|
|
202
|
-
// --- File discovery --------------------------------------------------------
|
|
203
|
-
|
|
204
131
|
function isExcludedRelPath(relPath) {
|
|
205
132
|
if (relPath === 'docs/CHANGELOG.md') return true;
|
|
206
133
|
return false;
|
|
@@ -226,12 +153,9 @@ function walkMarkdown(dirAbs, repoRoot, out) {
|
|
|
226
153
|
}
|
|
227
154
|
|
|
228
155
|
/**
|
|
229
|
-
*
|
|
230
|
-
*
|
|
231
|
-
* @param {string}
|
|
232
|
-
* @param {string[]} scanRoots repo-relative subtrees to walk
|
|
233
|
-
* @param {string[]} [exclude] minimatch globs; a repo-relative POSIX path
|
|
234
|
-
* matching any of them is dropped from the scan
|
|
156
|
+
* @param {string} rootAbs
|
|
157
|
+
* @param {string[]} scanRoots
|
|
158
|
+
* @param {string[]} [exclude] minimatch globs over repo-relative POSIX paths
|
|
235
159
|
*/
|
|
236
160
|
export function discoverMarkdown(rootAbs, scanRoots, exclude = []) {
|
|
237
161
|
const out = [];
|
|
@@ -249,13 +173,8 @@ export function discoverMarkdown(rootAbs, scanRoots, exclude = []) {
|
|
|
249
173
|
return filtered;
|
|
250
174
|
}
|
|
251
175
|
|
|
252
|
-
//
|
|
253
|
-
|
|
254
|
-
// Returns a copy of `source` where the contents of every fenced code block
|
|
255
|
-
// and every inline code span are replaced by spaces. Newlines are preserved
|
|
256
|
-
// so that line numbers stay aligned for downstream tokenizers. Fenced blocks
|
|
257
|
-
// are matched on `` ``` `` or `~~~` openers at column 0 (with optional
|
|
258
|
-
// indentation) and the closing fence MUST match the opener marker.
|
|
176
|
+
// Blanks fenced blocks and inline code spans, preserving newlines so line
|
|
177
|
+
// numbers stay aligned; a closing fence must match its opener's marker.
|
|
259
178
|
export function maskCodeRegions(source) {
|
|
260
179
|
const lines = source.split('\n');
|
|
261
180
|
const out = new Array(lines.length);
|
|
@@ -265,7 +184,6 @@ export function maskCodeRegions(source) {
|
|
|
265
184
|
const line = lines[i];
|
|
266
185
|
const fenceMatch = line.match(/^(\s{0,3})(`{3,}|~{3,})/);
|
|
267
186
|
if (inFence) {
|
|
268
|
-
// Blank the line; keep an empty string so newline survives the join.
|
|
269
187
|
out[i] = '';
|
|
270
188
|
if (
|
|
271
189
|
fenceMatch?.[2].startsWith(fenceMarker[0]) &&
|
|
@@ -282,17 +200,11 @@ export function maskCodeRegions(source) {
|
|
|
282
200
|
out[i] = '';
|
|
283
201
|
continue;
|
|
284
202
|
}
|
|
285
|
-
// Strip inline code spans (`...`). We do not need to honor escaped
|
|
286
|
-
// backticks for this checker — slash tokens inside inline code are not
|
|
287
|
-
// command references regardless.
|
|
288
203
|
out[i] = line.replace(/`[^`\n]*`/g, (m) => ' '.repeat(m.length));
|
|
289
204
|
}
|
|
290
205
|
return out.join('\n');
|
|
291
206
|
}
|
|
292
207
|
|
|
293
|
-
// --- Link extraction -------------------------------------------------------
|
|
294
|
-
|
|
295
|
-
// Returns absolute char offset → 1-indexed line number lookup.
|
|
296
208
|
function offsetToLine(source, offset) {
|
|
297
209
|
let line = 1;
|
|
298
210
|
for (let i = 0; i < offset && i < source.length; i++) {
|
|
@@ -301,10 +213,7 @@ function offsetToLine(source, offset) {
|
|
|
301
213
|
return line;
|
|
302
214
|
}
|
|
303
215
|
|
|
304
|
-
//
|
|
305
|
-
// regex simple: `text` may not contain `]`, and `target` may not contain
|
|
306
|
-
// whitespace or `)`. Reference-style links are out of scope for this
|
|
307
|
-
// checker (the repo uses inline links exclusively).
|
|
216
|
+
// Inline links only; reference-style links are out of scope.
|
|
308
217
|
const LINK_RE = /\[([^\]]*)\]\(([^)\s]+)\)/g;
|
|
309
218
|
|
|
310
219
|
export function extractLinks(masked) {
|
|
@@ -337,13 +246,8 @@ function stripAnchorAndQuery(target) {
|
|
|
337
246
|
return t;
|
|
338
247
|
}
|
|
339
248
|
|
|
340
|
-
//
|
|
341
|
-
//
|
|
342
|
-
// file-based router's `[token]` segment is written `%5Btoken%5D`, the form
|
|
343
|
-
// CommonMark renderers require — but the filesystem knows only the decoded
|
|
344
|
-
// name. The decode is one-way and total: a malformed escape (`%zz`) degrades
|
|
345
|
-
// to the raw string instead of throwing `URIError`, so an undecodable target
|
|
346
|
-
// is resolved exactly as it was before.
|
|
249
|
+
// The filesystem knows only decoded names (`%5Btoken%5D` → `[token]`); a
|
|
250
|
+
// malformed escape falls back to the raw string instead of throwing.
|
|
347
251
|
function decodeLinkPath(pathOnly) {
|
|
348
252
|
if (!pathOnly.includes('%')) return pathOnly;
|
|
349
253
|
try {
|
|
@@ -353,25 +257,9 @@ function decodeLinkPath(pathOnly) {
|
|
|
353
257
|
}
|
|
354
258
|
}
|
|
355
259
|
|
|
356
|
-
//
|
|
357
|
-
|
|
358
|
-
//
|
|
359
|
-
// preceded by a word character or another slash (URL paths, `http://...`),
|
|
360
|
-
// and tokens immediately followed by a word/`-` character (so we match the
|
|
361
|
-
// whole command, not a prefix).
|
|
362
|
-
// A slash token is `/<name>` where:
|
|
363
|
-
// - the preceding char is NOT a word char, `/`, `:`, `.`, `>`, `]`, `)`,
|
|
364
|
-
// so we don't match URL path segments or fragments embedded in paths
|
|
365
|
-
// like `temp/run-<id>/lifecycle.ndjson` (preceded by `>`) or
|
|
366
|
-
// `temp/run-[ID]/tickets.json` (preceded by `]`).
|
|
367
|
-
// - the following char is NOT a word char, `-`, or `.`, so file
|
|
368
|
-
// extensions like `/tickets.json` and identifier suffixes don't match.
|
|
369
|
-
// The optional `(?::[a-z][a-z0-9-]*)?` tail captures the namespaced
|
|
370
|
-
// `/loops:<name>` command form (Story #4289). Without it the matcher would
|
|
371
|
-
// stop at `loops` and try to resolve `.agents/workflows/loops.md`, which does
|
|
372
|
-
// not exist — loop units live under `loops/<name>.md`. The resolver below
|
|
373
|
-
// splits the captured `loops:<name>` token on the `:` to resolve the
|
|
374
|
-
// namespaced path.
|
|
260
|
+
// The lookbehind rejects path segments (`run-<id>/x`, `run-[ID]/x`, URLs);
|
|
261
|
+
// the lookahead rejects extensions and prefixes. The optional `:name` tail
|
|
262
|
+
// captures namespaced `/loops:<name>` commands.
|
|
375
263
|
const SLASH_TOKEN_RE =
|
|
376
264
|
/(?<![\w/:.>\])])\/([a-z][a-z0-9-]*(?::[a-z][a-z0-9-]*)?)(?![\w.-])/g;
|
|
377
265
|
|
|
@@ -389,15 +277,9 @@ export function extractSlashTokens(masked) {
|
|
|
389
277
|
return out;
|
|
390
278
|
}
|
|
391
279
|
|
|
392
|
-
// --- Per-file check --------------------------------------------------------
|
|
393
|
-
|
|
394
280
|
/**
|
|
395
|
-
*
|
|
396
|
-
*
|
|
397
|
-
* allowed to quote.
|
|
398
|
-
*
|
|
399
|
-
* @param {string} relFile Repo-relative path of the file being checked.
|
|
400
|
-
* @returns {Set<string>} Tokens to skip, stored without the leading slash.
|
|
281
|
+
* @param {string} relFile
|
|
282
|
+
* @returns {Set<string>}
|
|
401
283
|
*/
|
|
402
284
|
function slashAllowlistFor(relFile) {
|
|
403
285
|
const superseded = SUPERSEDED_COMMAND_SPELLINGS.get(relFile);
|
|
@@ -413,15 +295,9 @@ export function checkFile(absPath, repoRoot) {
|
|
|
413
295
|
const relFile = path.relative(repoRoot, absPath).split(path.sep).join('/');
|
|
414
296
|
const workflowsDir = path.join(repoRoot, '.agents', 'workflows');
|
|
415
297
|
|
|
416
|
-
// Tokenize the masked source once and reuse the array across both the
|
|
417
|
-
// retired-command sweep and the slash-command resolution pass below.
|
|
418
298
|
const slashTokens = extractSlashTokens(masked);
|
|
419
299
|
|
|
420
|
-
//
|
|
421
|
-
// references inside fenced examples don't trip us, but we still catch
|
|
422
|
-
// every prose mention. Retired-command checks ALWAYS take precedence:
|
|
423
|
-
// even if the token would otherwise be allowlisted or resolved, a hit
|
|
424
|
-
// here is a non-zero exit.
|
|
300
|
+
// Retired commands win over the allowlist and over resolution.
|
|
425
301
|
for (const { token, line } of slashTokens) {
|
|
426
302
|
if (RETIRED_COMMANDS.has(token)) {
|
|
427
303
|
violations.push({
|
|
@@ -433,26 +309,19 @@ export function checkFile(absPath, repoRoot) {
|
|
|
433
309
|
}
|
|
434
310
|
}
|
|
435
311
|
|
|
436
|
-
// 2. Relative-link resolution.
|
|
437
312
|
for (const { target, line } of extractLinks(masked)) {
|
|
438
313
|
if (isExternalOrInternalAnchor(target)) continue;
|
|
439
314
|
const rawPathOnly = stripAnchorAndQuery(target);
|
|
440
|
-
if (!rawPathOnly) continue;
|
|
441
|
-
// Decode
|
|
442
|
-
// collapse into an anchor delimiter and truncate the target — and BEFORE
|
|
443
|
-
// resolution, so the payload-boundary branch below reports the decoded
|
|
444
|
-
// path rather than the escaped one.
|
|
315
|
+
if (!rawPathOnly) continue;
|
|
316
|
+
// Decode after stripping, so an escaped `%23` cannot become an anchor.
|
|
445
317
|
const pathOnly = decodeLinkPath(rawPathOnly);
|
|
446
318
|
let resolved;
|
|
447
319
|
if (pathOnly.startsWith('/')) {
|
|
448
|
-
// Treat root-absolute paths as repo-root relative.
|
|
449
320
|
resolved = path.join(repoRoot, pathOnly);
|
|
450
321
|
} else {
|
|
451
322
|
resolved = path.resolve(fileDir, pathOnly);
|
|
452
323
|
}
|
|
453
|
-
//
|
|
454
|
-
// that escapes the materialized tree is a defect even when the target
|
|
455
|
-
// exists here, and reporting both kinds for one link would double-count.
|
|
324
|
+
// Boundary wins over existence; one link reports one kind.
|
|
456
325
|
const relTarget = path
|
|
457
326
|
.relative(repoRoot, resolved)
|
|
458
327
|
.split(path.sep)
|
|
@@ -480,19 +349,11 @@ export function checkFile(absPath, repoRoot) {
|
|
|
480
349
|
}
|
|
481
350
|
}
|
|
482
351
|
|
|
483
|
-
//
|
|
484
|
-
// allowlisted tokens, and a superseded spelling in the one file allowed
|
|
485
|
-
// to quote it (SUPERSEDED_COMMAND_SPELLINGS). A command is valid if it resolves to a top-level
|
|
486
|
-
// workflow file OR to a helpers/ module (helpers are not projected into
|
|
487
|
-
// the `.claude/commands/` tree but are still legitimate named workflows
|
|
488
|
-
// that parent workflows invoke by prose reference).
|
|
352
|
+
// A helpers/ module is a valid command target too.
|
|
489
353
|
const slashAllowlist = slashAllowlistFor(relFile);
|
|
490
354
|
for (const { token, line } of slashTokens) {
|
|
491
355
|
if (RETIRED_COMMANDS.has(token)) continue;
|
|
492
356
|
if (slashAllowlist.has(token)) continue;
|
|
493
|
-
// Namespaced loop commands (`/loops:<name>`, Story #4289) resolve to a
|
|
494
|
-
// loop unit under `.agents/workflows/loops/<name>.md`. Split on the `:`
|
|
495
|
-
// and resolve the namespaced path rather than a flat `loops:<name>.md`.
|
|
496
357
|
if (token.includes(':')) {
|
|
497
358
|
const [ns, name] = token.split(':');
|
|
498
359
|
const nsFile = path.join(workflowsDir, ns, `${name}.md`);
|
|
@@ -521,18 +382,13 @@ export function checkFile(absPath, repoRoot) {
|
|
|
521
382
|
return violations;
|
|
522
383
|
}
|
|
523
384
|
|
|
524
|
-
// --- Public entry point ----------------------------------------------------
|
|
525
|
-
|
|
526
385
|
export const DEFAULT_SCAN_ROOTS = Object.freeze(['docs', '.agents']);
|
|
527
386
|
|
|
528
387
|
/**
|
|
529
|
-
* Run the checker programmatically. Returns `{ exitCode, violations }`.
|
|
530
|
-
* `exitCode` is 0 when every doc is clean, 1 otherwise.
|
|
531
|
-
*
|
|
532
388
|
* @param {object} [options]
|
|
533
|
-
* @param {string} [options.repoRoot]
|
|
534
|
-
* @param {string[]} [options.scanRoots]
|
|
535
|
-
* @param {string[]} [options.exclude]
|
|
389
|
+
* @param {string} [options.repoRoot]
|
|
390
|
+
* @param {string[]} [options.scanRoots]
|
|
391
|
+
* @param {string[]} [options.exclude]
|
|
536
392
|
*/
|
|
537
393
|
export function runCheck(options = {}) {
|
|
538
394
|
const repoRoot = options.repoRoot ?? REPO_ROOT;
|
|
@@ -555,11 +411,7 @@ function formatViolation(v) {
|
|
|
555
411
|
return `${v.file}:${v.line}: [${v.kind}] ${v.message}`;
|
|
556
412
|
}
|
|
557
413
|
|
|
558
|
-
/**
|
|
559
|
-
* Translate argv into `runCheck` options. Repeatable `--scan-root` replaces
|
|
560
|
-
* the default scan set entirely; repeatable `--exclude` filters whatever was
|
|
561
|
-
* scanned. Absent flags reproduce the pre-#4801 defaults exactly.
|
|
562
|
-
*/
|
|
414
|
+
/** `--scan-root` replaces the default set; `--exclude` filters what was scanned. */
|
|
563
415
|
export function parseArgs(argv) {
|
|
564
416
|
const { values } = parseStandardCliArgs({
|
|
565
417
|
argv,
|