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,28 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* Row shape: `{ path, duplicatedLines, totalLines, percentage }`. Each row
|
|
6
|
-
* records how much of a single source file is copy-paste duplication, as
|
|
7
|
-
* reported by a clone detector (jscpd). `percentage` is the per-file
|
|
8
|
-
* duplication ratio in [0, 100]; `duplicatedLines` / `totalLines` are the
|
|
9
|
-
* raw line counts the percentage derives from, kept so the whole-repo
|
|
10
|
-
* rollup can recompute an exact aggregate ratio rather than averaging
|
|
11
|
-
* per-file percentages (which would over-weight small files).
|
|
12
|
-
*
|
|
13
|
-
* Lower duplication is better, so the gate's floor direction is `lte`
|
|
14
|
-
* (see `check-baselines/phases/floors.js#axisDirection`). New paths land
|
|
15
|
-
* in the `additions` bucket (Story #2012); removed paths count as
|
|
16
|
-
* improvements when they carried any duplication — the file is gone, so
|
|
17
|
-
* its prior debt is gone too.
|
|
18
|
-
*
|
|
19
|
-
* `kernelVersion()` returns a static in-repo semver — the duplication
|
|
20
|
-
* scorer is the in-repo scan + rollup contract (the jscpd output is
|
|
21
|
-
* normalised before it reaches this module), so there is no upstream
|
|
22
|
-
* library version to track the way CRAP/MI track `typhonjs-escomplex`.
|
|
23
|
-
* Bump the version passed to `makeBaselineKind` whenever the row shape or
|
|
24
|
-
* rollup math changes. Scaffold is generated by `makeBaselineKind`
|
|
25
|
-
* (Story #3983).
|
|
2
|
+
* Per-kind module for the duplication baseline (jscpd). Row shape:
|
|
3
|
+
* `{ path, duplicatedLines, totalLines, percentage }`; lower is better. Bump
|
|
4
|
+
* the static kernel version when the row shape or rollup math changes.
|
|
26
5
|
*/
|
|
27
6
|
|
|
28
7
|
import { canonicalise } from '../path-canon.js';
|
|
@@ -46,12 +25,7 @@ export function projectRow(row) {
|
|
|
46
25
|
};
|
|
47
26
|
}
|
|
48
27
|
|
|
49
|
-
/**
|
|
50
|
-
* Exact aggregate duplication ratio: total duplicated lines / total lines
|
|
51
|
-
* across the row set, expressed as a percentage. Averaging per-file
|
|
52
|
-
* percentages would over-weight small files, so the rollup recomputes from
|
|
53
|
-
* the raw line counts each row carries.
|
|
54
|
-
*/
|
|
28
|
+
/** Recomputed from line counts; averaging percentages over-weights small files. */
|
|
55
29
|
function aggregate(rows) {
|
|
56
30
|
if (!rows || rows.length === 0) {
|
|
57
31
|
return {
|
|
@@ -1,30 +1,13 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* kinds/kind-factory.js — shared scaffold factory for per-kind baseline
|
|
3
|
-
* modules (Story #3983).
|
|
4
|
-
*
|
|
5
|
-
* The five row-metric kinds (coverage, mutation, maintainability,
|
|
6
|
-
* lighthouse, duplication) used to hand-roll the same scaffold each:
|
|
7
|
-
* `kernelVersion`, `sortRows`, a component-aware `rollup`, a
|
|
8
|
-
* `compare(head, base)` that diffs rows by key into
|
|
9
|
-
* `{regressions, improvements, unchanged, additions}`, an
|
|
10
|
-
* `applyEpsilon` stabilizer (Story #1964), and a scope-aware
|
|
11
|
-
* `mergeRows` (Story #1974). Only the axis list, direction-of-better,
|
|
12
|
-
* aggregate math, and the missing/removed-row policies differ per kind.
|
|
13
|
-
*
|
|
14
|
-
* `makeBaselineKind` generates the scaffold once; each kind module stays
|
|
15
|
-
* a thin parameterization with a byte-identical exported surface. The
|
|
16
|
-
* Story #2012 class of fix ("new paths must land in `additions`, never
|
|
17
|
-
* the regression arm") lives here exactly once.
|
|
18
|
-
*
|
|
19
|
-
* All generated functions are pure: no I/O, no process exit, no
|
|
20
|
-
* friction emission.
|
|
21
|
-
*/
|
|
1
|
+
/** Pure scaffold factory for the row-metric baseline kinds. */
|
|
22
2
|
|
|
23
3
|
import { componentMatches } from '../component-matcher.js';
|
|
24
4
|
import { mergeRowsByScope } from '../scope.js';
|
|
25
5
|
|
|
26
6
|
/**
|
|
27
|
-
*
|
|
7
|
+
* `missingBasePolicy`: a head row with no base row is an `'addition'`
|
|
8
|
+
* (default; never a regression) or is classified against a `'perfect'` base.
|
|
9
|
+
* `removedRowPolicy`: a base row with no head row is classified against a
|
|
10
|
+
* perfect head, or is an improvement when `when(baseRow)` holds.
|
|
28
11
|
*
|
|
29
12
|
* @param {{
|
|
30
13
|
* keyField: string,
|
|
@@ -38,26 +21,6 @@ import { mergeRowsByScope } from '../scope.js';
|
|
|
38
21
|
* | { kind: 'improvement-when', when: (row: object) => boolean },
|
|
39
22
|
* perfectRow?: (key: string) => object,
|
|
40
23
|
* }} opts
|
|
41
|
-
* - `keyField` — row grouping property (`'path'` or `'route'`):
|
|
42
|
-
* the rollup/scope key. The generated
|
|
43
|
-
* `rowIdentity` derives from it, but the two are
|
|
44
|
-
* distinct concepts — see `rowIdentity` below.
|
|
45
|
-
* - `kernelVersion` — static semver, or a thunk for kinds that pin
|
|
46
|
-
* to another kind's kernel (MI → CRAP)
|
|
47
|
-
* - `axes` — metric property names compared per row
|
|
48
|
-
* - `betterWhen` — `'higher'` (coverage, MI, …) or `'lower'`
|
|
49
|
-
* (duplication): decides which delta sign is a
|
|
50
|
-
* regression
|
|
51
|
-
* - `aggregate` — per-kind rollup math over a row set
|
|
52
|
-
* - `missingBasePolicy` — head row with no base row: `'addition'`
|
|
53
|
-
* (default; Story #2012 bucket) or `'perfect'`
|
|
54
|
-
* (classify against a perfect base — lighthouse,
|
|
55
|
-
* where a new route must meet the bar)
|
|
56
|
-
* - `removedRowPolicy` — base row with no head row: `'perfect-head'`
|
|
57
|
-
* classifies against a perfect head row;
|
|
58
|
-
* `'improvement-when'` pushes an improvement
|
|
59
|
-
* when `when(baseRow)` holds, else unchanged
|
|
60
|
-
* - `perfectRow` — builds the perfect row for the policies above
|
|
61
24
|
* @returns {{
|
|
62
25
|
* kernelVersion: () => string,
|
|
63
26
|
* rowIdentity: (row: object) => string,
|
|
@@ -83,17 +46,8 @@ export function makeBaselineKind({
|
|
|
83
46
|
typeof kernelVersion === 'function' ? kernelVersion : () => kernelVersion;
|
|
84
47
|
|
|
85
48
|
/**
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
* Deliberately a separate concept from `keyField`, even though the five
|
|
90
|
-
* scaffold kinds derive one from the other. `keyField` answers "which
|
|
91
|
-
* component does this row roll up into", so a kind is free to declare a
|
|
92
|
-
* grouping key coarser than a row (CRAP declares `'path'` while shipping
|
|
93
|
-
* one row per method). Identity answers "is this the same row", and a
|
|
94
|
-
* merge that confuses the two silently drops every sibling sharing a key.
|
|
95
|
-
* Callers therefore read `rowIdentity` off the kind module and never
|
|
96
|
-
* rebuild a key from `keyField` themselves.
|
|
49
|
+
* "Is this the same row" — distinct from `keyField` ("which component"),
|
|
50
|
+
* though derived from it here. Callers must never rebuild it from `keyField`.
|
|
97
51
|
*
|
|
98
52
|
* @param {object} row
|
|
99
53
|
* @returns {string}
|
|
@@ -1,21 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* Row shape: `{ path, mi }`. The legacy baseline shipped a flat `{ path: mi }`
|
|
6
|
-
* map; the v2 envelope arrays each row explicitly so per-row metadata can
|
|
7
|
-
* grow without churning the schema.
|
|
8
|
-
*
|
|
9
|
-
* MI is computed by the in-repo `escomplex-engine` kernel — same upstream
|
|
10
|
-
* dependency family as CRAP — so the kernel version tracks
|
|
11
|
-
* `typhonjs-escomplex` too.
|
|
12
|
-
*
|
|
13
|
-
* Higher MI = better. New paths land in the `additions` bucket
|
|
14
|
-
* (Story #2012 — new files MUST NOT register as regressions); removed
|
|
15
|
-
* paths count as improvements when their MI was non-perfect — the file is
|
|
16
|
-
* gone, so its prior debt is gone too. Scaffold (sortRows / rollup /
|
|
17
|
-
* compare / applyEpsilon / mergeRows) is generated by `makeBaselineKind`
|
|
18
|
-
* (Story #3983).
|
|
2
|
+
* Per-kind module for the Maintainability Index baseline. Row shape:
|
|
3
|
+
* `{ path, mi }`; higher is better. New files are additions, never
|
|
4
|
+
* regressions; a removed file with MI < 100 counts as an improvement.
|
|
19
5
|
*/
|
|
20
6
|
|
|
21
7
|
import { readBaselineAtRef } from '../../baseline-loader.js';
|
|
@@ -30,54 +16,15 @@ export const name = 'maintainability';
|
|
|
30
16
|
export const keyField = 'path';
|
|
31
17
|
|
|
32
18
|
/**
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
* **This list is empty, and the goal is to keep it that way.** It previously
|
|
38
|
-
* held seven paths, all attributed to escomplex "choking on modern
|
|
39
|
-
* destructuring / regex-property patterns". That diagnosis was wrong. The real
|
|
40
|
-
* defect is that `typhonjs-escomplex`'s code generator is written against
|
|
41
|
-
* ESTree while its own parser emits Babel, so a regex literal in a loop head,
|
|
42
|
-
* an `await` in a loop head, a `?.`, a dynamic `import()`, or an object spread
|
|
43
|
-
* in a default parameter aborted the whole file's analysis. That is now
|
|
44
|
-
* repaired at the kernel boundary by `lib/escomplex-ast-compat.js`, which makes
|
|
45
|
-
* all four surviving entries scorable — and the audit incidentally showed the
|
|
46
|
-
* other three had been pointing at deleted files, because nothing audits an
|
|
47
|
-
* allowlist whose only effect is to suppress output.
|
|
48
|
-
*
|
|
49
|
-
* Before adding a path here, check whether `escomplex-ast-compat.js` can handle
|
|
50
|
-
* the construct instead. An entry here is a file nobody measures; a handler
|
|
51
|
-
* there gets it measured for every consumer.
|
|
52
|
-
*
|
|
53
|
-
* Story #2467 / Task #2494 — the prior behaviour stored these files with
|
|
54
|
-
* `mi: 0` in `baselines/maintainability.json`, which corrupted the global
|
|
55
|
-
* `min`/p50 rollup and let real regressions hide behind a phantom floor.
|
|
56
|
-
* Excluding them at the scorer makes the absence explicit; the comparator
|
|
57
|
-
* already treats missing-in-baseline new files as `additions` (Story #2012)
|
|
58
|
-
* so re-inclusion is non-breaking once the kernel can score them.
|
|
59
|
-
*
|
|
60
|
-
* Canonicalised POSIX repo-relative paths.
|
|
19
|
+
* Canonical paths the kernel cannot score; each entry needs a one-line
|
|
20
|
+
* reason. Keep it empty: prefer a handler in `escomplex-ast-compat.js`, which
|
|
21
|
+
* gets the file measured for every consumer.
|
|
61
22
|
*/
|
|
62
23
|
export const MAINTAINABILITY_EXCLUSIONS = Object.freeze(new Set());
|
|
63
24
|
|
|
64
25
|
/**
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
* baseline. Pure — does not mutate the input.
|
|
68
|
-
*
|
|
69
|
-
* Two layers:
|
|
70
|
-
* 1. Drop rows whose `path` appears in the explicit
|
|
71
|
-
* `MAINTAINABILITY_EXCLUSIONS` allowlist (documented escomplex
|
|
72
|
-
* parse-fail families).
|
|
73
|
-
* 2. Defensive backstop — drop any remaining `mi === 0` rows. A real
|
|
74
|
-
* MI score never reaches 0 for valid code (the escomplex floor for
|
|
75
|
-
* runnable JS is ~10–20), so `mi === 0` is a reliable signal that
|
|
76
|
-
* the scorer hit a parse failure the allowlist hasn't caught yet.
|
|
77
|
-
* Without this backstop, a newly-added file that escomplex can't
|
|
78
|
-
* parse silently poisons the global min/p50 rollup (Story #2467
|
|
79
|
-
* precedent). The audit lens flags any allowlist entries it can
|
|
80
|
-
* now score so the list stays auditable.
|
|
26
|
+
* Drop excluded paths and any `mi === 0` row: real code never scores 0, so
|
|
27
|
+
* 0 means a parse failure that would poison the min/p50 rollup.
|
|
81
28
|
*
|
|
82
29
|
* @template {{path: string, mi?: number}} R
|
|
83
30
|
* @param {R[]} rows
|
|
@@ -117,8 +64,7 @@ export const {
|
|
|
117
64
|
mergeRows,
|
|
118
65
|
} = makeBaselineKind({
|
|
119
66
|
keyField,
|
|
120
|
-
//
|
|
121
|
-
// in either always invalidates both baselines.
|
|
67
|
+
// Shared escomplex kernel: drift invalidates both baselines.
|
|
122
68
|
kernelVersion: crapKernelVersion,
|
|
123
69
|
axes: ['mi'],
|
|
124
70
|
betterWhen: 'higher',
|
|
@@ -130,22 +76,15 @@ export const {
|
|
|
130
76
|
},
|
|
131
77
|
});
|
|
132
78
|
|
|
133
|
-
//
|
|
134
|
-
// CLI-facing pure helpers (Story #1981, Task #1989).
|
|
135
|
-
// Hoisted from `.agents/scripts/check-maintainability.js`.
|
|
136
|
-
// ---------------------------------------------------------------------------
|
|
79
|
+
// CLI-facing pure helpers for `check-maintainability.js`.
|
|
137
80
|
|
|
138
|
-
//
|
|
139
|
-
// shape changes so downstream agent workflows can detect breaks without
|
|
140
|
-
// guessing. 1.1.0 — TypeScript support landed in 5.29.0.
|
|
81
|
+
// `--json` report version; bump when the report shape changes.
|
|
141
82
|
export const MI_REPORT_KERNEL_VERSION = '1.1.0';
|
|
142
83
|
|
|
143
84
|
/**
|
|
144
|
-
*
|
|
145
|
-
* output: `{ kernelVersion, summary, violations }` sans `fixGuidance`
|
|
146
|
-
* (MI scores don't decompose along the two CRAP axes).
|
|
85
|
+
* Same shape as the CRAP `--json` report, minus `fixGuidance`.
|
|
147
86
|
*
|
|
148
|
-
* @param {Record<string, number>} scores
|
|
87
|
+
* @param {Record<string, number>} scores
|
|
149
88
|
* @param {{
|
|
150
89
|
* regressions?: number,
|
|
151
90
|
* newFiles?: number,
|
|
@@ -179,7 +118,7 @@ export function buildMaintainabilityReport(scores, stats, scopeInfo) {
|
|
|
179
118
|
};
|
|
180
119
|
}
|
|
181
120
|
|
|
182
|
-
/**
|
|
121
|
+
/** Returns the flat `{ path: mi }` map the comparators expect. */
|
|
183
122
|
export function loadMaintainabilityBaseline({
|
|
184
123
|
baselinePath,
|
|
185
124
|
epicRef,
|
|
@@ -195,12 +134,8 @@ export function loadMaintainabilityBaseline({
|
|
|
195
134
|
logger,
|
|
196
135
|
label: 'Maintainability',
|
|
197
136
|
});
|
|
198
|
-
//
|
|
199
|
-
// `Object.entries` / `Object.keys` never throws.
|
|
137
|
+
// An epic-ref read may return a non-object.
|
|
200
138
|
if (epicRef && (parsed === null || typeof parsed !== 'object')) return {};
|
|
201
|
-
// Story #1895: the on-disk baseline switched from the flat
|
|
202
|
-
// `{ path: mi }` map to the canonical envelope shape. Project envelope
|
|
203
|
-
// back to the legacy flat shape so downstream comparators keep working.
|
|
204
139
|
if (
|
|
205
140
|
parsed &&
|
|
206
141
|
typeof parsed === 'object' &&
|
|
@@ -1,44 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* carries score/killed/survived/noCoverage. Stryker is the upstream
|
|
5
|
-
* kernel; we pin a static version until a Mandrel-side retrofit story
|
|
6
|
-
* wires the running Stryker version through (#1908).
|
|
2
|
+
* Per-kind module for the mutation baseline (Stryker upstream, static kernel
|
|
3
|
+
* version). Row shape: `{ path, score, killed, survived }`; higher is better.
|
|
7
4
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* ## Rollup weighting (Story #5058)
|
|
14
|
-
*
|
|
15
|
-
* The rollup score is a **mutant-weighted** mean —
|
|
16
|
-
* `sum(score_i * mutants_i) / sum(mutants_i)`, where
|
|
17
|
-
* `mutants_i = killed_i + survived_i`. It used to be `scoreSum / rows.length`,
|
|
18
|
-
* an unweighted mean over files, under which a 3-mutant file carried the same
|
|
19
|
-
* weight as a 300-mutant one: adding a handful of thinly-mutated new files
|
|
20
|
-
* dragged the whole-repo number down far enough to breach the floor arm while
|
|
21
|
-
* the compare arm reported no regression at all (a newly-scanned file has no
|
|
22
|
-
* baseline row, so it can only move the aggregate `applyFloors` scores).
|
|
23
|
-
*
|
|
24
|
-
* Both weights are already summed in the same loop and are already required
|
|
25
|
-
* by the row schema, which is `additionalProperties: false` — so the weighted
|
|
26
|
-
* score is computable from the existing row shape with no producer change and
|
|
27
|
-
* no schema change.
|
|
28
|
-
*
|
|
29
|
-
* **Limit of the approximation.** Rows carry no timeout or no-coverage counts
|
|
30
|
-
* (`noCoverage` in the rollup is hardcoded `0`), so `killed + survived` is not
|
|
31
|
-
* Stryker's full mutant population wherever timed-out or uncovered mutants
|
|
32
|
-
* exist. The weighted score therefore *approximates* Stryker's published
|
|
33
|
-
* overall score — it does not reproduce it. Closing that gap needs a producer
|
|
34
|
-
* change and its own Story.
|
|
35
|
-
*
|
|
36
|
-
* Because this changes what the stored number MEANS, it is a semantics
|
|
37
|
-
* migration: a baseline measured at 88.51 unweighted is 85.18 weighted over
|
|
38
|
-
* the same rows, so every floor calibrated on the old mean breaches on
|
|
39
|
-
* upgrade. `assertBaselineCompatible` below fails such a baseline closed —
|
|
40
|
-
* a bare `kernelVersion` bump would not, because `kernelMatch` feeds only the
|
|
41
|
-
* reporting-side drift count and reaches no exit code.
|
|
5
|
+
* The rollup score is mutant-weighted (`sum(score * mutants) / sum(mutants)`),
|
|
6
|
+
* so thinly-mutated files cannot drag the aggregate past the floor. Rows carry
|
|
7
|
+
* no timeout/no-coverage counts, so it only approximates Stryker's overall
|
|
8
|
+
* score.
|
|
42
9
|
*/
|
|
43
10
|
|
|
44
11
|
import { canonicalise } from '../path-canon.js';
|
|
@@ -47,15 +14,9 @@ import { makeBaselineKind } from './kind-factory.js';
|
|
|
47
14
|
export const name = 'mutation';
|
|
48
15
|
export const keyField = 'path';
|
|
49
16
|
|
|
50
|
-
/**
|
|
51
|
-
* Kernel version of the mutation scorer. Bumped off the original `1.0.0` by
|
|
52
|
-
* Story #5058: the rollup score changed from an unweighted file mean to a
|
|
53
|
-
* mutant-weighted mean, so rows stamped below this version were aggregated
|
|
54
|
-
* under superseded semantics.
|
|
55
|
-
*/
|
|
17
|
+
/** Major 2 marks the weighted rollup; older stamps used an unweighted mean. */
|
|
56
18
|
const KERNEL_VERSION = '2.0.0';
|
|
57
19
|
|
|
58
|
-
/** Major of {@link KERNEL_VERSION} — the weighted-rollup boundary. */
|
|
59
20
|
const WEIGHTED_ROLLUP_MAJOR = 2;
|
|
60
21
|
|
|
61
22
|
const RESEED_REMEDY =
|
|
@@ -75,8 +36,6 @@ export function projectRow(row) {
|
|
|
75
36
|
}
|
|
76
37
|
|
|
77
38
|
/**
|
|
78
|
-
* Parse the major component of a semver-ish stamp.
|
|
79
|
-
*
|
|
80
39
|
* @param {unknown} version
|
|
81
40
|
* @returns {number|null} The major, or null when unparseable/absent.
|
|
82
41
|
*/
|
|
@@ -86,16 +45,10 @@ function majorOf(version) {
|
|
|
86
45
|
}
|
|
87
46
|
|
|
88
47
|
/**
|
|
89
|
-
* Kind-module hook
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
* baseline can never be silently scored against floors calibrated on a
|
|
94
|
-
* different definition of the number. Follows the `kinds/crap.js` precedent.
|
|
95
|
-
*
|
|
96
|
-
* An absent or unparseable stamp is rejected too: `kernelVersion` is required
|
|
97
|
-
* by the shared envelope schema, so its absence is not evidence of a newer
|
|
98
|
-
* writer.
|
|
48
|
+
* Kind-module hook: fail closed on a baseline aggregated by the unweighted
|
|
49
|
+
* mean, whose floors meant a different number. A plain `kernelVersion` drift
|
|
50
|
+
* reaches no exit code, so this hook is the real guard. A missing stamp is
|
|
51
|
+
* rejected too.
|
|
99
52
|
*
|
|
100
53
|
* @param {object|null} baseline A loaded v2 baseline envelope.
|
|
101
54
|
* @returns {string|null} Operator-facing message, or null when compatible.
|
|
@@ -115,8 +68,6 @@ export function assertBaselineCompatible(baseline) {
|
|
|
115
68
|
}
|
|
116
69
|
|
|
117
70
|
/**
|
|
118
|
-
* A row's mutant count — the weight it carries in the rollup score.
|
|
119
|
-
*
|
|
120
71
|
* @param {object} row
|
|
121
72
|
* @returns {number}
|
|
122
73
|
*/
|
|
@@ -125,8 +76,6 @@ function mutantsOf(row) {
|
|
|
125
76
|
}
|
|
126
77
|
|
|
127
78
|
/**
|
|
128
|
-
* Sum one numeric row field across a row set.
|
|
129
|
-
*
|
|
130
79
|
* @param {object[]} rows
|
|
131
80
|
* @param {string} field
|
|
132
81
|
* @returns {number}
|
|
@@ -138,12 +87,7 @@ function sumOf(rows, field) {
|
|
|
138
87
|
}
|
|
139
88
|
|
|
140
89
|
/**
|
|
141
|
-
*
|
|
142
|
-
*
|
|
143
|
-
* Zero-mutant guard: an empty row set, or one whose rows carry only zeroes,
|
|
144
|
-
* has no weight to divide by. Returning 0 rather than dividing keeps `NaN` and
|
|
145
|
-
* `Infinity` out of the envelope, where they would fail the schema's numeric
|
|
146
|
-
* bounds downstream.
|
|
90
|
+
* Zero mutants yields 0, keeping `NaN` out of the schema-validated envelope.
|
|
147
91
|
*
|
|
148
92
|
* @param {object[]} rows
|
|
149
93
|
* @param {number} mutants Total mutant count across `rows`.
|
|
@@ -157,10 +101,6 @@ function weightedScore(rows, mutants) {
|
|
|
157
101
|
}
|
|
158
102
|
|
|
159
103
|
/**
|
|
160
|
-
* Aggregate rows into the rollup shape. `killed` and `survived` stay plain
|
|
161
|
-
* sums and `noCoverage` stays hardcoded 0 — the weighting changes `score`
|
|
162
|
-
* alone.
|
|
163
|
-
*
|
|
164
104
|
* @param {object[]} rows
|
|
165
105
|
* @returns {{score: number, killed: number, survived: number, noCoverage: number}}
|
|
166
106
|
*/
|
|
@@ -3,11 +3,8 @@ import path from 'node:path';
|
|
|
3
3
|
import { Logger } from '../Logger.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* without churn — Story #1912 will replace this shim with the shared
|
|
9
|
-
* reader. Returns the parsed input unchanged when it doesn't look like an
|
|
10
|
-
* envelope (legacy flat shape stays flat).
|
|
6
|
+
* Project an envelope to the flat `{ path: mi }` map the gate consumers read;
|
|
7
|
+
* a non-envelope passes through unchanged.
|
|
11
8
|
*/
|
|
12
9
|
function projectMaintainabilityEnvelopeToFlat(parsed) {
|
|
13
10
|
if (
|
|
@@ -29,13 +26,9 @@ function projectMaintainabilityEnvelopeToFlat(parsed) {
|
|
|
29
26
|
}
|
|
30
27
|
|
|
31
28
|
/**
|
|
32
|
-
*
|
|
33
|
-
* resolved by the caller via {@link getBaselines}; passing it explicitly
|
|
34
|
-
* removes the silent-default behaviour the framework dropped in Epic #730
|
|
35
|
-
* Story 5.5.
|
|
29
|
+
* No default path: the caller resolves it via {@link getBaselines}.
|
|
36
30
|
*
|
|
37
|
-
* @param {string} baselinePath Repo-relative or absolute
|
|
38
|
-
* JSON. Required.
|
|
31
|
+
* @param {string} baselinePath Repo-relative or absolute.
|
|
39
32
|
* @returns {Record<string, number>}
|
|
40
33
|
*/
|
|
41
34
|
export function getBaseline(baselinePath) {
|