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,29 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Hoisted from `check-crap.js` and `check-maintainability.js` (Story #1981,
|
|
5
|
-
* Task #1989) so the env-precedence behavior — config → env → default,
|
|
6
|
-
* malformed values warn-and-fall-through — lives in a lib module the
|
|
7
|
-
* per-kind callers (and tests) can share without spawning a CLI.
|
|
8
|
-
*
|
|
9
|
-
* No I/O. No side effects beyond logger warnings.
|
|
2
|
+
* Pure resolvers for per-kind baseline env overrides: config → env → default,
|
|
3
|
+
* with malformed env values warning and falling through.
|
|
10
4
|
*/
|
|
11
5
|
|
|
12
6
|
import { Logger } from '../Logger.js';
|
|
13
7
|
|
|
14
|
-
//
|
|
15
|
-
//
|
|
16
|
-
// rounding) routinely drifts +/- 0.05 to 0.3 on otherwise-unchanged files —
|
|
17
|
-
// well below the threshold of "actually less maintainable." A 0.5 floor
|
|
18
|
-
// stops the pre-push hook from auto-ratcheting the baseline on noise.
|
|
8
|
+
// Escomplex/Node churn drifts MI by ±0.05–0.3 on unchanged files; 0.5 keeps
|
|
9
|
+
// the pre-push hook from ratcheting on noise.
|
|
19
10
|
const MI_DEFAULT_TOLERANCE = 0.5;
|
|
20
11
|
|
|
21
12
|
/**
|
|
22
|
-
* Pure helper: resolve the effective CRAP config by layering env-var
|
|
23
|
-
* overrides on top of the resolved `.agentrc.json` values. Exported so
|
|
24
|
-
* tests can assert the precedence + malformed-value behavior without
|
|
25
|
-
* spawning the CLI.
|
|
26
|
-
*
|
|
27
13
|
* @param {{ newMethodCeiling?: unknown, tolerance?: unknown, refreshTag?: unknown }} crapConfig
|
|
28
14
|
* @param {NodeJS.ProcessEnv} env
|
|
29
15
|
* @returns {{ newMethodCeiling: number, tolerance: number, refreshTag: string, overrides: string[] }}
|
|
@@ -33,12 +19,8 @@ export function resolveCrapEnvOverrides(crapConfig, env) {
|
|
|
33
19
|
let newMethodCeiling = Number.isFinite(crapConfig?.newMethodCeiling)
|
|
34
20
|
? crapConfig.newMethodCeiling
|
|
35
21
|
: 30;
|
|
36
|
-
//
|
|
37
|
-
//
|
|
38
|
-
// shift across CI environments — same code, different escomplex /
|
|
39
|
-
// coverage build — moves the score by ~0.01 on its own. A 0.001
|
|
40
|
-
// tolerance flagged that as a regression; real regressions cross
|
|
41
|
-
// whole-integer thresholds (e.g. 8 → 12) and clear 0.05 trivially.
|
|
22
|
+
// Coverage rounding across CI environments shifts a CRAP score by ~0.01;
|
|
23
|
+
// real regressions cross whole integers and clear 0.05 trivially.
|
|
42
24
|
let tolerance = Number.isFinite(crapConfig?.tolerance)
|
|
43
25
|
? crapConfig.tolerance
|
|
44
26
|
: 0.05;
|
|
@@ -83,15 +65,7 @@ export function resolveCrapEnvOverrides(crapConfig, env) {
|
|
|
83
65
|
}
|
|
84
66
|
|
|
85
67
|
/**
|
|
86
|
-
*
|
|
87
|
-
* Upper-snakes the kind name, so `bundle-size` → `BUNDLE_SIZE_REFRESH` and
|
|
88
|
-
* `coverage` → `COVERAGE_REFRESH`. The two names that predate the generic
|
|
89
|
-
* mechanism (`BUNDLE_SIZE_REFRESH`, Story #151; `MAINTAINABILITY_REFRESH`,
|
|
90
|
-
* Story #4731) are exactly what this rule produces, so generalizing kept
|
|
91
|
-
* both working unchanged.
|
|
92
|
-
*
|
|
93
|
-
* Module-local: `resolveKindRefreshOverrides` is the public surface, and the
|
|
94
|
-
* naming rule is pinned through it rather than exported for its own sake.
|
|
68
|
+
* `bundle-size` → `BUNDLE_SIZE_REFRESH`.
|
|
95
69
|
*
|
|
96
70
|
* @param {string} kind
|
|
97
71
|
* @returns {string|null} null when `kind` is not a usable kind name
|
|
@@ -102,29 +76,9 @@ function kindRefreshEnvVar(kind) {
|
|
|
102
76
|
}
|
|
103
77
|
|
|
104
78
|
/**
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
* `<KIND>_REFRESH=1` tells `check-baselines --gate <kind>` to demote this
|
|
109
|
-
* run's head-vs-base regressions to `unchanged` for this invocation only.
|
|
110
|
-
* Floors still apply — an acknowledged run can still fail on an absolute
|
|
111
|
-
* floor breach; only the ratchet-vs-base comparison is suspended.
|
|
112
|
-
*
|
|
113
|
-
* Why every kind needs this: a diff-scope baseline is an accretion of many
|
|
114
|
-
* partial runs, not one measurement. Replacing it with a single full-scope
|
|
115
|
-
* measurement necessarily produces row deltas in both directions that are
|
|
116
|
-
* arithmetic, not behavioural — so without an acknowledgment path the gate
|
|
117
|
-
* blocks precisely the correction it should encourage.
|
|
118
|
-
*
|
|
119
|
-
* The flag is **not persisted** anywhere (no config write, no committed tag):
|
|
120
|
-
* the very next invocation without the env var reverts to full strict
|
|
121
|
-
* enforcement automatically, so there is no lingering loosened tolerance to
|
|
122
|
-
* remember to reset. The evaluate phase pairs this with a commit-tagged
|
|
123
|
-
* trigger that is likewise one-shot by construction.
|
|
124
|
-
*
|
|
125
|
-
* Accepted truthy values: `1`, `true` (case-insensitive), with surrounding
|
|
126
|
-
* whitespace trimmed. Anything else — including unset, empty, `0`, `false`,
|
|
127
|
-
* and non-string values — resolves to `acknowledged: false`.
|
|
79
|
+
* `<KIND>_REFRESH=1|true` demotes this run's regressions to `unchanged`
|
|
80
|
+
* (floors still apply), so a full-scope re-measure is not blocked. Never
|
|
81
|
+
* persisted.
|
|
128
82
|
*
|
|
129
83
|
* @param {string} kind
|
|
130
84
|
* @param {NodeJS.ProcessEnv} env
|
|
@@ -143,15 +97,8 @@ export function resolveKindRefreshOverrides(kind, env) {
|
|
|
143
97
|
}
|
|
144
98
|
|
|
145
99
|
/**
|
|
146
|
-
*
|
|
147
|
-
*
|
|
148
|
-
* guardrail uses this to force base-branch values on both gates).
|
|
149
|
-
* 2. `delivery.quality.gates.maintainability.tolerance` from the config.
|
|
150
|
-
* 3. `MI_DEFAULT_TOLERANCE` (0.5).
|
|
151
|
-
*
|
|
152
|
-
* Malformed env values warn and fall through to the next layer — a typo
|
|
153
|
-
* in CI must never silently relax the gate, but it also must not skip the
|
|
154
|
-
* configured project value.
|
|
100
|
+
* `CRAP_TOLERANCE` env (CI forces base values on both gates) → configured
|
|
101
|
+
* tolerance → 0.5. A malformed env value warns and keeps the config value.
|
|
155
102
|
*
|
|
156
103
|
* @param {NodeJS.ProcessEnv} env
|
|
157
104
|
* @param {{ tolerance?: number }} [maintainabilityConfig]
|
|
@@ -160,7 +107,6 @@ export function resolveKindRefreshOverrides(kind, env) {
|
|
|
160
107
|
export function resolveMaintainabilityEnvOverrides(env, maintainabilityConfig) {
|
|
161
108
|
const overrides = [];
|
|
162
109
|
let tolerance = MI_DEFAULT_TOLERANCE;
|
|
163
|
-
// Layer 2: config value (lower precedence than env, higher than default).
|
|
164
110
|
const configured = maintainabilityConfig?.tolerance;
|
|
165
111
|
if (
|
|
166
112
|
typeof configured === 'number' &&
|
|
@@ -172,7 +118,6 @@ export function resolveMaintainabilityEnvOverrides(env, maintainabilityConfig) {
|
|
|
172
118
|
`tolerance=${configured} (quality.maintainability.tolerance)`,
|
|
173
119
|
);
|
|
174
120
|
}
|
|
175
|
-
// Layer 1: env override (highest precedence).
|
|
176
121
|
const raw = env?.CRAP_TOLERANCE;
|
|
177
122
|
if (raw !== undefined && raw !== '') {
|
|
178
123
|
const parsed = Number(raw);
|
|
@@ -1,41 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* Epic #1786).
|
|
4
|
-
*
|
|
5
|
-
* Every committed Mandrel baseline ships an envelope-shaped JSON with five
|
|
6
|
-
* top-level keys:
|
|
7
|
-
*
|
|
8
|
-
* {
|
|
9
|
-
* "$schema": ".agents/schemas/baselines/<kind>.schema.json",
|
|
10
|
-
* "kernelVersion": "<semver>",
|
|
11
|
-
* "generatedAt": "<ISO-8601>",
|
|
12
|
-
* "rollup": { "*": { ... }, [component]: { ... } },
|
|
13
|
-
* "rows": [ ... ]
|
|
14
|
-
* }
|
|
15
|
-
*
|
|
16
|
-
* The envelope contract is declared in
|
|
17
|
-
* `.agents/schemas/baselines/baseline-envelope.schema.json` and the
|
|
18
|
-
* per-kind schemas extend it via `allOf` (Story #1888).
|
|
19
|
-
*
|
|
20
|
-
* This module exposes:
|
|
21
|
-
*
|
|
22
|
-
* buildEnvelope({ kind, rollup, rows, kernelVersion, generatedAt? })
|
|
23
|
-
* Stamps `$schema`, `kernelVersion`, and `generatedAt` onto a freshly
|
|
24
|
-
* constructed envelope. When `generatedAt` is omitted, the
|
|
25
|
-
* `MANDREL_BASELINE_GENERATED_AT` env var overrides any other clock
|
|
26
|
-
* reading — this lets reproducible-build tests pin the timestamp
|
|
27
|
-
* without monkey-patching `Date`. When neither is provided, the
|
|
28
|
-
* envelope stamps `new Date().toISOString()`.
|
|
29
|
-
*
|
|
30
|
-
* assertEnvelope(envelope)
|
|
31
|
-
* Compiles every per-kind schema once (AJV) and validates the envelope
|
|
32
|
-
* against the schema named in its `$schema`. Throws on schema
|
|
33
|
-
* mismatch, missing top-level keys, or a `$schema` that doesn't
|
|
34
|
-
* correspond to one of the seven known per-kind schemas.
|
|
35
|
-
*
|
|
36
|
-
* The writer (`writer.js`) calls `buildEnvelope` then `assertEnvelope`
|
|
37
|
-
* before serialising — so every baseline written through the shared
|
|
38
|
-
* pipeline is schema-valid by construction.
|
|
2
|
+
* Build and validate baseline envelopes.
|
|
39
3
|
*
|
|
40
4
|
* @module lib/baselines/envelope
|
|
41
5
|
*/
|
|
@@ -46,15 +10,7 @@ import {
|
|
|
46
10
|
} from '../baseline-schema-registry.js';
|
|
47
11
|
|
|
48
12
|
/**
|
|
49
|
-
*
|
|
50
|
-
* schema registry rather than restated (Story #5002).
|
|
51
|
-
*
|
|
52
|
-
* It used to be a hand-kept literal that happened to mirror
|
|
53
|
-
* `BASELINE_KIND_SCHEMA_FILES` name for name. Deriving it makes
|
|
54
|
-
* "`kind` is known" and "`kind`'s schema is registered" the same fact, so
|
|
55
|
-
* `getValidator` below cannot be handed a kind the AJV instance never
|
|
56
|
-
* compiled — the not-registered branch is gone because the state is
|
|
57
|
-
* unreachable, not because it was hidden.
|
|
13
|
+
* Derived from the schema registry, so every known kind has a compiled schema.
|
|
58
14
|
*/
|
|
59
15
|
export const KNOWN_KINDS = Object.freeze(
|
|
60
16
|
BASELINE_KIND_SCHEMA_FILES.map((file) => file.replace(/\.schema\.json$/, '')),
|
|
@@ -69,23 +25,13 @@ function kernelVersionPattern() {
|
|
|
69
25
|
}
|
|
70
26
|
|
|
71
27
|
function isoTimestampPattern() {
|
|
72
|
-
//
|
|
73
|
-
// `±HH:MM` offset. AJV's `date-time` format does the heavy validation;
|
|
74
|
-
// this is a cheap pre-check so we can throw a friendlier error before
|
|
75
|
-
// AJV ever runs.
|
|
28
|
+
// Cheap pre-check for a friendlier error; AJV's `date-time` is authoritative.
|
|
76
29
|
return /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}:\d{2})$/;
|
|
77
30
|
}
|
|
78
31
|
|
|
79
32
|
/**
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
* 1. Caller-supplied `generatedAt`.
|
|
83
|
-
* 2. `MANDREL_BASELINE_GENERATED_AT` env var (reproducible-build hook).
|
|
84
|
-
* 3. `new Date().toISOString()`.
|
|
85
|
-
*
|
|
86
|
-
* Validates the resulting string against an ISO-8601 shape and throws a
|
|
87
|
-
* clear error if it doesn't match — operators get the failure at write
|
|
88
|
-
* time, not when AJV runs.
|
|
33
|
+
* Explicit value, else `MANDREL_BASELINE_GENERATED_AT` (reproducible builds),
|
|
34
|
+
* else now.
|
|
89
35
|
*
|
|
90
36
|
* @param {string|undefined} explicit
|
|
91
37
|
* @returns {string}
|
|
@@ -104,9 +50,6 @@ function resolveGeneratedAt(explicit) {
|
|
|
104
50
|
}
|
|
105
51
|
|
|
106
52
|
/**
|
|
107
|
-
* Construct an envelope. The caller supplies the per-kind row + rollup
|
|
108
|
-
* shape; this module stamps the envelope-level keys.
|
|
109
|
-
*
|
|
110
53
|
* @param {{
|
|
111
54
|
* kind: string,
|
|
112
55
|
* rollup: Record<string, object>,
|
|
@@ -158,10 +101,8 @@ export function buildEnvelope({
|
|
|
158
101
|
throw new TypeError('envelope.buildEnvelope: rows must be an array');
|
|
159
102
|
}
|
|
160
103
|
|
|
161
|
-
//
|
|
162
|
-
//
|
|
163
|
-
// here; `assertEnvelope` still validates the result against the kind's
|
|
164
|
-
// schema, so an unrecognised extra fails closed rather than being persisted.
|
|
104
|
+
// `extras` carries per-kind stamps (scoring semantics that change
|
|
105
|
+
// independently of the kernel); unknown extras fail `assertEnvelope`.
|
|
165
106
|
return {
|
|
166
107
|
$schema: schemaRefFor(kind),
|
|
167
108
|
kernelVersion,
|
|
@@ -173,18 +114,8 @@ export function buildEnvelope({
|
|
|
173
114
|
}
|
|
174
115
|
|
|
175
116
|
/**
|
|
176
|
-
*
|
|
177
|
-
*
|
|
178
|
-
* place a baselines-directory schema is read off disk and compiled
|
|
179
|
-
* (Story #5002). This module used to keep its own `SCHEMAS_DIR` + AJV +
|
|
180
|
-
* per-kind compile cache alongside the registry's, so the writer and
|
|
181
|
-
* `baselines/reader.js` validated the same envelope through two independently
|
|
182
|
-
* configured instances; a registration added to one was invisible to the
|
|
183
|
-
* other. One builder means the writer and the reader cannot disagree about
|
|
184
|
-
* what a valid envelope is.
|
|
185
|
-
*
|
|
186
|
-
* Memoised: building it reads eleven schema files, and a single baseline
|
|
187
|
-
* regeneration calls `assertEnvelope` once per write plus once per re-read.
|
|
117
|
+
* Memoised registry-built AJV — one builder, so writer and reader cannot
|
|
118
|
+
* disagree about what a valid envelope is.
|
|
188
119
|
*/
|
|
189
120
|
let _ajv = null;
|
|
190
121
|
function ajv() {
|
|
@@ -195,10 +126,6 @@ function ajv() {
|
|
|
195
126
|
}
|
|
196
127
|
|
|
197
128
|
/**
|
|
198
|
-
* Look up the pre-registered validator for a per-kind schema. Total over
|
|
199
|
-
* `KNOWN_KINDS` — that list is derived from the registry's own filenames, so
|
|
200
|
-
* every kind reaching here has a compiled schema.
|
|
201
|
-
*
|
|
202
129
|
* @param {string} kind
|
|
203
130
|
* @returns {import('ajv').ValidateFunction}
|
|
204
131
|
*/
|
|
@@ -206,11 +133,7 @@ function getValidator(kind) {
|
|
|
206
133
|
return ajv().getSchema(`${kind}.schema.json`);
|
|
207
134
|
}
|
|
208
135
|
|
|
209
|
-
/**
|
|
210
|
-
* The five top-level keys every envelope MUST carry. Pre-checked before
|
|
211
|
-
* AJV runs so the error names the missing key directly instead of
|
|
212
|
-
* surfacing as an AJV "required" violation.
|
|
213
|
-
*/
|
|
136
|
+
/** Pre-checked so the error names the missing key directly. */
|
|
214
137
|
const REQUIRED_TOP_LEVEL_KEYS = Object.freeze([
|
|
215
138
|
'$schema',
|
|
216
139
|
'kernelVersion',
|
|
@@ -219,30 +142,7 @@ const REQUIRED_TOP_LEVEL_KEYS = Object.freeze([
|
|
|
219
142
|
'rows',
|
|
220
143
|
]);
|
|
221
144
|
|
|
222
|
-
// ---------------------------------------------------------------------------
|
|
223
|
-
// Shared baseline compatibility axes (Story #2467, Task #2492).
|
|
224
|
-
//
|
|
225
|
-
// Every baseline-kind compatibility check shares the same universal
|
|
226
|
-
// invariants: the envelope must exist, its kernelVersion must match the
|
|
227
|
-
// running scorer, and (when published) its `generatedAt` must be monotonic
|
|
228
|
-
// vs the running clock. Per-kind axis tables (e.g. `CRAP_COMPAT_AXES`)
|
|
229
|
-
// compose these into their kind-specific axis list so the hoisted axes
|
|
230
|
-
// live in exactly one place.
|
|
231
|
-
//
|
|
232
|
-
// Each axis exposes `{ name, severity, check }`:
|
|
233
|
-
// - `name` — stable label used as `kind` in the failure envelope.
|
|
234
|
-
// - `severity` — `'fatal'` (short-circuit, exitCode 1) or `'warn'`
|
|
235
|
-
// (accumulate into `warnings`).
|
|
236
|
-
// - `check` — pure function over the compat context. Returns `null`
|
|
237
|
-
// when the axis passes, or a string message describing
|
|
238
|
-
// the failure.
|
|
239
|
-
// ---------------------------------------------------------------------------
|
|
240
|
-
|
|
241
145
|
/**
|
|
242
|
-
* Universal "missing baseline" axis. Fires when the loader returned `null`
|
|
243
|
-
* / `undefined`. The operator message is parametrised by the kind label
|
|
244
|
-
* supplied at composition time so each kind keeps its own bootstrap hint.
|
|
245
|
-
*
|
|
246
146
|
* @param {string} kindLabel — operator-facing label (e.g. `CRAP`, `MI`).
|
|
247
147
|
* @returns {{name: string, severity: 'fatal', check: (ctx: {baseline: unknown}) => string|null}}
|
|
248
148
|
*/
|
|
@@ -258,10 +158,7 @@ export function missingBaselineAxis(kindLabel) {
|
|
|
258
158
|
}
|
|
259
159
|
|
|
260
160
|
/**
|
|
261
|
-
*
|
|
262
|
-
* recorded `kernelVersion` differs from the running scorer's
|
|
263
|
-
* `kernelVersion`. Warn-only by default — kernel drift surfaces as a
|
|
264
|
-
* baseline-refresh nudge, not a close-validation failure.
|
|
161
|
+
* Warn-only: kernel drift is a refresh nudge, not a validation failure.
|
|
265
162
|
*
|
|
266
163
|
* @param {string} kindLabel
|
|
267
164
|
* @returns {{name: string, severity: 'warn', check: (ctx: {baseline: {kernelVersion?: string}|null|undefined, runningKernelVersion: string}) => string|null}}
|
|
@@ -279,13 +176,7 @@ export function kernelDriftAxis(kindLabel) {
|
|
|
279
176
|
}
|
|
280
177
|
|
|
281
178
|
/**
|
|
282
|
-
*
|
|
283
|
-
* envelope `{ ok: false, exitCode: 1, kind, message }` (on the first
|
|
284
|
-
* 'fatal' match) or an accumulating `{ ok: true, warnings }` envelope.
|
|
285
|
-
*
|
|
286
|
-
* Shared by every per-kind `evaluateBaselineCompatibility` caller so the
|
|
287
|
-
* reduce body lives in one place and stays well below the project's
|
|
288
|
-
* cyclomatic-complexity ceiling.
|
|
179
|
+
* First fatal axis short-circuits; warn axes accumulate.
|
|
289
180
|
*
|
|
290
181
|
* @template {object} Ctx
|
|
291
182
|
* @param {Array<{name: string, severity: 'fatal'|'warn', check: (ctx: Ctx) => string|null}>} axes
|
|
@@ -309,14 +200,7 @@ export function reduceCompatAxes(axes, ctx) {
|
|
|
309
200
|
}
|
|
310
201
|
|
|
311
202
|
/**
|
|
312
|
-
*
|
|
313
|
-
*
|
|
314
|
-
* Two-phase check:
|
|
315
|
-
* 1. Cheap structural pre-check — every top-level key present, `$schema`
|
|
316
|
-
* points at one of the seven known kinds. Throws with a clear
|
|
317
|
-
* message when violated.
|
|
318
|
-
* 2. AJV schema validation against the per-kind schema named in `$schema`.
|
|
319
|
-
* Throws with the AJV error list serialised as JSON.
|
|
203
|
+
* Structural pre-check, then AJV against the schema named in `$schema`.
|
|
320
204
|
*
|
|
321
205
|
* @param {object} envelope
|
|
322
206
|
* @returns {void}
|
|
@@ -1,34 +1,7 @@
|
|
|
1
|
-
// .
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
// will land in Epic #1943.
|
|
6
|
-
//
|
|
7
|
-
// One shared source of truth keeps the dispatcher, the per-kind CLIs, and
|
|
8
|
-
// the test suites in lock-step. Numeric precedence is intentional: a
|
|
9
|
-
// higher number is a strictly worse outcome, so `aggregate(...)` collapses
|
|
10
|
-
// per-gate exit codes by taking the maximum. That contract lets the
|
|
11
|
-
// dispatcher fan out per-kind work in any order (parallel, sequential,
|
|
12
|
-
// streamed) and still produce a single deterministic process exit code.
|
|
13
|
-
//
|
|
14
|
-
// Precedence (lowest → highest severity):
|
|
15
|
-
//
|
|
16
|
-
// 0 EXIT_PASS — every enabled gate is green.
|
|
17
|
-
// 1 EXIT_FLOOR — at least one gate breached its floor / tolerance.
|
|
18
|
-
// 2 EXIT_SCHEMA — at least one baseline file failed schema
|
|
19
|
-
// validation (JSON shape / required fields wrong).
|
|
20
|
-
// 3 EXIT_CONFIG — config could not be resolved (missing
|
|
21
|
-
// `.agentrc.json`, unknown gate kind, malformed
|
|
22
|
-
// scope, etc). The gate could not even start.
|
|
23
|
-
// 4 EXIT_REGRESSION — head-vs-base regression detected on at least one
|
|
24
|
-
// gate. Highest severity because regression
|
|
25
|
-
// signals new debt being introduced rather than
|
|
26
|
-
// pre-existing debt failing a static floor.
|
|
27
|
-
//
|
|
28
|
-
// `aggregate(...codes)` takes the highest code in the input list and
|
|
29
|
-
// returns 0 (`EXIT_PASS`) for an empty input. It never throws — invalid
|
|
30
|
-
// codes are silently treated as 0 because the only sane response to a
|
|
31
|
-
// caller passing a garbage code is "do not regress the exit signal".
|
|
1
|
+
// Exit-code contract for `check-baselines.js` and the per-kind CLIs. Higher is
|
|
2
|
+
// strictly worse, so per-gate codes collapse by maximum in any order:
|
|
3
|
+
// 0 pass, 1 floor breach, 2 schema-invalid baseline, 3 config unresolvable,
|
|
4
|
+
// 4 head-vs-base regression (new debt outranks pre-existing floor debt).
|
|
32
5
|
|
|
33
6
|
export const EXIT_PASS = 0;
|
|
34
7
|
export const EXIT_FLOOR = 1;
|
|
@@ -36,10 +9,6 @@ export const EXIT_SCHEMA = 2;
|
|
|
36
9
|
export const EXIT_CONFIG = 3;
|
|
37
10
|
export const EXIT_REGRESSION = 4;
|
|
38
11
|
|
|
39
|
-
/**
|
|
40
|
-
* The full set of valid exit codes, frozen so callers can use it as a
|
|
41
|
-
* lookup without worrying about mutation.
|
|
42
|
-
*/
|
|
43
12
|
export const EXIT_CODES = Object.freeze({
|
|
44
13
|
EXIT_PASS,
|
|
45
14
|
EXIT_FLOOR,
|
|
@@ -57,20 +26,8 @@ const VALID = new Set([
|
|
|
57
26
|
]);
|
|
58
27
|
|
|
59
28
|
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
* - With no arguments, returns `EXIT_PASS` (0). An empty dispatcher run
|
|
64
|
-
* is success — there was nothing to fail.
|
|
65
|
-
* - With one or more arguments, returns the maximum of the valid codes.
|
|
66
|
-
* Higher numbers are strictly worse outcomes (see precedence table at
|
|
67
|
-
* the top of this file).
|
|
68
|
-
* - Unknown / non-numeric / negative codes are dropped from the input
|
|
69
|
-
* so a single garbage caller cannot lower the dispatcher's exit code
|
|
70
|
-
* past a real failure. If every input is invalid, the result is
|
|
71
|
-
* `EXIT_PASS` (the caller signalled nothing to report).
|
|
72
|
-
*
|
|
73
|
-
* Pure. No I/O. Cheap to call from a hot loop.
|
|
29
|
+
* Maximum of the valid codes; invalid codes are dropped so garbage can never
|
|
30
|
+
* lower the signal. No input → `EXIT_PASS`.
|
|
74
31
|
*
|
|
75
32
|
* @param {...number} codes - Per-gate exit codes to collapse.
|
|
76
33
|
* @returns {number} The most severe code in the input, or `EXIT_PASS`.
|