mandrel 2.60.0 → 2.61.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/README.md +10 -10
- package/.agents/agents/story-worker.md +1 -1
- package/.agents/docs/agentrc-reference.json +4 -82
- package/.agents/docs/configuration.md +20 -87
- package/.agents/docs/workflows.md +1 -1
- package/.agents/instructions.md +1 -3
- package/.agents/rules/gherkin-standards.md +4 -0
- package/.agents/schemas/agentrc.schema.json +11 -486
- package/.agents/schemas/story-deliver-terminal.schema.json +10 -0
- package/.agents/schemas/validation-evidence.schema.json +2 -1
- package/.agents/scripts/README.md +14 -14
- package/.agents/scripts/acceptance-eval.js +32 -164
- package/.agents/scripts/agents-bootstrap-github.js +27 -129
- package/.agents/scripts/apply-quality-bootstrap.js +4 -40
- package/.agents/scripts/audit-baselines.js +6 -27
- package/.agents/scripts/audit-labels-bootstrap.js +5 -29
- package/.agents/scripts/audit-to-stories.js +91 -361
- package/.agents/scripts/boot-sweep.js +19 -72
- package/.agents/scripts/bootstrap.js +74 -395
- package/.agents/scripts/ceremony-derive.js +9 -45
- package/.agents/scripts/check-arch-cycles.js +14 -64
- package/.agents/scripts/check-baselines.js +8 -48
- package/.agents/scripts/check-context-budget.js +46 -172
- package/.agents/scripts/check-cyclomatic.js +12 -44
- package/.agents/scripts/check-dead-exports.js +13 -64
- package/.agents/scripts/check-doc-links.js +38 -186
- package/.agents/scripts/check-gherkin-corpus.js +24 -127
- package/.agents/scripts/check-test-temp-hygiene.js +28 -169
- package/.agents/scripts/coverage-capture.js +32 -99
- package/.agents/scripts/deliver-light.js +14 -101
- package/.agents/scripts/deliver-recover.js +6 -42
- package/.agents/scripts/deliver-run.js +36 -133
- package/.agents/scripts/diagnose-friction.js +24 -116
- package/.agents/scripts/drain-pending-cleanup.js +1 -1
- package/.agents/scripts/evidence-gate.js +23 -85
- package/.agents/scripts/file-ci-gap.js +10 -50
- package/.agents/scripts/generate-config-docs.js +30 -170
- package/.agents/scripts/generate-lens-checklists.js +8 -52
- package/.agents/scripts/generate-skills-index.js +14 -112
- package/.agents/scripts/generate-workflows-doc.js +10 -70
- package/.agents/scripts/git-cleanup.js +2 -34
- package/.agents/scripts/lib/Graph.js +24 -81
- package/.agents/scripts/lib/ITicketingProvider.js +47 -143
- package/.agents/scripts/lib/Logger.js +14 -76
- package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
- package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
- package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
- package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
- package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
- package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
- package/.agents/scripts/lib/audit-baselines/read.js +3 -16
- package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
- package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
- package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
- package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
- package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
- package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
- package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
- package/.agents/scripts/lib/audit-suite/findings.js +12 -52
- package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
- package/.agents/scripts/lib/audit-suite/index.js +1 -15
- package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
- package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
- package/.agents/scripts/lib/audit-suite/runner.js +13 -43
- package/.agents/scripts/lib/audit-suite/selector.js +49 -349
- package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
- package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
- package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
- package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
- package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
- package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
- package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
- package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
- package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
- package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
- package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
- package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
- package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
- package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
- package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
- package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
- package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
- package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
- package/.agents/scripts/lib/baseline-loader.js +12 -51
- package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
- package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
- package/.agents/scripts/lib/baselines/components.js +10 -61
- package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
- package/.agents/scripts/lib/baselines/crap-preview-incremental.js +5 -21
- package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
- package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
- package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
- package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
- package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
- package/.agents/scripts/lib/baselines/envelope.js +13 -129
- package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
- package/.agents/scripts/lib/baselines/git-base.js +23 -142
- package/.agents/scripts/lib/baselines/kernel.js +11 -111
- package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
- package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
- package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
- package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
- package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
- package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
- package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
- package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
- package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
- package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
- package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
- package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
- package/.agents/scripts/lib/baselines/path-canon.js +19 -128
- package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
- package/.agents/scripts/lib/baselines/reader.js +14 -107
- package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
- package/.agents/scripts/lib/baselines/scope.js +11 -135
- package/.agents/scripts/lib/baselines/writer.js +16 -149
- package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
- package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
- package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
- package/.agents/scripts/lib/bdd-step-index.js +26 -100
- package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
- package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
- package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
- package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
- package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
- package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
- package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
- package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
- package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
- package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
- package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
- package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
- package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
- package/.agents/scripts/lib/bootstrap/summary.js +1 -8
- package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
- package/.agents/scripts/lib/branch-name-guard.js +4 -23
- package/.agents/scripts/lib/changed-files.js +31 -143
- package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
- package/.agents/scripts/lib/checks/index.js +18 -101
- package/.agents/scripts/lib/checks/loop-health.js +11 -53
- package/.agents/scripts/lib/checks/state.js +16 -91
- package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
- package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
- package/.agents/scripts/lib/child-exec.js +39 -108
- package/.agents/scripts/lib/cli/standard-args.js +9 -116
- package/.agents/scripts/lib/cli-args.js +31 -146
- package/.agents/scripts/lib/cli-usage.js +5 -27
- package/.agents/scripts/lib/cli-utils.js +2 -12
- package/.agents/scripts/lib/close-validation/commands.js +13 -76
- package/.agents/scripts/lib/close-validation/gates.js +92 -331
- package/.agents/scripts/lib/close-validation/process.js +121 -151
- package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
- package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
- package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
- package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
- package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
- package/.agents/scripts/lib/close-validation/runner.js +53 -110
- package/.agents/scripts/lib/command-header.js +6 -28
- package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
- package/.agents/scripts/lib/config/baselines.js +3 -14
- package/.agents/scripts/lib/config/ci.js +8 -38
- package/.agents/scripts/lib/config/commands.js +1 -15
- package/.agents/scripts/lib/config/defaults.js +4 -33
- package/.agents/scripts/lib/config/delivery-routing.js +6 -35
- package/.agents/scripts/lib/config/explain.js +9 -80
- package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
- package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +2 -30
- package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
- package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
- package/.agents/scripts/lib/config/gates/index.js +2 -17
- package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
- package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
- package/.agents/scripts/lib/config/gates/shared.js +4 -64
- package/.agents/scripts/lib/config/github.js +4 -22
- package/.agents/scripts/lib/config/limits.js +4 -57
- package/.agents/scripts/lib/config/paths.js +2 -21
- package/.agents/scripts/lib/config/qa.js +4 -38
- package/.agents/scripts/lib/config/quality.js +76 -432
- package/.agents/scripts/lib/config/runners.js +12 -56
- package/.agents/scripts/lib/config/runtime.js +13 -57
- package/.agents/scripts/lib/config/shared.js +2 -16
- package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
- package/.agents/scripts/lib/config/temp-paths.js +40 -280
- package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
- package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
- package/.agents/scripts/lib/config-resolver.js +10 -52
- package/.agents/scripts/lib/config-schema-shared.js +1 -4
- package/.agents/scripts/lib/config-settings-schema-delivery.js +12 -294
- package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
- package/.agents/scripts/lib/config-settings-schema.js +37 -274
- package/.agents/scripts/lib/coverage-baseline.js +20 -110
- package/.agents/scripts/lib/coverage-capture-fullscope.js +12 -37
- package/.agents/scripts/lib/coverage-capture-incremental.js +12 -43
- package/.agents/scripts/lib/coverage-capture-usage.js +4 -24
- package/.agents/scripts/lib/coverage-capture.js +99 -224
- package/.agents/scripts/lib/coverage-utils.js +14 -79
- package/.agents/scripts/lib/cpu-pool.js +17 -123
- package/.agents/scripts/lib/crap-baseline-join.js +16 -88
- package/.agents/scripts/lib/crap-coordinates.js +6 -25
- package/.agents/scripts/lib/crap-engine.js +40 -153
- package/.agents/scripts/lib/crap-method-identity.js +16 -78
- package/.agents/scripts/lib/crap-utils.js +31 -155
- package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
- package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
- package/.agents/scripts/lib/dead-exports-knip.js +18 -56
- package/.agents/scripts/lib/dead-exports-mode.js +5 -24
- package/.agents/scripts/lib/degraded-mode.js +3 -26
- package/.agents/scripts/lib/dependency-parser.js +8 -40
- package/.agents/scripts/lib/dependency-version.js +13 -35
- package/.agents/scripts/lib/detect-package-manager.js +6 -36
- package/.agents/scripts/lib/doc-tiers.js +22 -126
- package/.agents/scripts/lib/duplicate-search.js +8 -72
- package/.agents/scripts/lib/env-loader.js +5 -27
- package/.agents/scripts/lib/error-redactor.js +6 -31
- package/.agents/scripts/lib/errors/index.js +2 -22
- package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
- package/.agents/scripts/lib/escomplex-kernel.js +21 -123
- package/.agents/scripts/lib/feedback-loop/graduator-core.js +93 -419
- package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
- package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -151
- package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
- package/.agents/scripts/lib/findings/classify-finding.js +14 -69
- package/.agents/scripts/lib/findings/promote-finding.js +14 -112
- package/.agents/scripts/lib/findings/provenance-field.js +11 -52
- package/.agents/scripts/lib/findings/route-finding.js +37 -255
- package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
- package/.agents/scripts/lib/findings/severity.js +18 -104
- package/.agents/scripts/lib/format-generated-json.js +12 -44
- package/.agents/scripts/lib/full-suite-lock.js +160 -429
- package/.agents/scripts/lib/full-suite-queue.js +213 -0
- package/.agents/scripts/lib/gates/baseline-store.js +5 -9
- package/.agents/scripts/lib/gates/friction.js +1 -3
- package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
- package/.agents/scripts/lib/gh-exec.js +31 -259
- package/.agents/scripts/lib/git/cached-fetch.js +9 -52
- package/.agents/scripts/lib/git/sync-from-base.js +15 -107
- package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
- package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
- package/.agents/scripts/lib/git-utils.js +37 -161
- package/.agents/scripts/lib/github/framework-repo.js +8 -71
- package/.agents/scripts/lib/github-url.js +2 -17
- package/.agents/scripts/lib/import-graph.js +11 -38
- package/.agents/scripts/lib/install-cmd-parser.js +4 -13
- package/.agents/scripts/lib/json-utils.js +3 -18
- package/.agents/scripts/lib/label-constants.js +16 -111
- package/.agents/scripts/lib/label-taxonomy.js +4 -30
- package/.agents/scripts/lib/maintainability-engine.js +12 -80
- package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
- package/.agents/scripts/lib/maintainability-utils.js +16 -92
- package/.agents/scripts/lib/mandrel-catalog.js +12 -70
- package/.agents/scripts/lib/notifications/notifier.js +13 -38
- package/.agents/scripts/lib/npm-scripts.js +4 -23
- package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
- package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
- package/.agents/scripts/lib/observability/signal-validator.js +5 -37
- package/.agents/scripts/lib/observability/signals-writer.js +11 -121
- package/.agents/scripts/lib/observability/source-classifier.js +21 -203
- package/.agents/scripts/lib/observability/terse-result.js +14 -47
- package/.agents/scripts/lib/onboard/init-tail.js +13 -74
- package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
- package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
- package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
- package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
- package/.agents/scripts/lib/orchestration/ceremony-routing.js +5 -75
- package/.agents/scripts/lib/orchestration/change-set.js +7 -36
- package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
- package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
- package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
- package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
- package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
- package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
- package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
- package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
- package/.agents/scripts/lib/orchestration/check-state.js +92 -0
- package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
- package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +42 -189
- package/.agents/scripts/lib/orchestration/code-review.js +24 -128
- package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
- package/.agents/scripts/lib/orchestration/complexity-gate.js +42 -214
- package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
- package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
- package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
- package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
- package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
- package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
- package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
- package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
- package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
- package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
- package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
- package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
- package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
- package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
- package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
- package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
- package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
- package/.agents/scripts/lib/orchestration/light-suitability.js +26 -231
- package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
- package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
- package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
- package/.agents/scripts/lib/orchestration/plan-context.js +52 -303
- package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
- package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
- package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
- package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
- package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
- package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
- package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +14 -78
- package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
- package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
- package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
- package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
- package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
- package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
- package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +49 -248
- package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +85 -368
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +8 -38
- package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +30 -190
- package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
- package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
- package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
- package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
- package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
- package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
- package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
- package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
- package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
- package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
- package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
- package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
- package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
- package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
- package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
- package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
- package/.agents/scripts/lib/orchestration/review-depth.js +12 -94
- package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
- package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
- package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
- package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
- package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
- package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
- package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
- package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
- package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
- package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
- package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
- package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
- package/.agents/scripts/lib/orchestration/run-epilogue.js +40 -199
- package/.agents/scripts/lib/orchestration/run-scoped-config.js +13 -81
- package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
- package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
- package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
- package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
- package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +18 -80
- package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
- package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
- package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
- package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
- package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +9 -50
- package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
- package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
- package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
- package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
- package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
- package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +110 -290
- package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
- package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
- package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
- package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
- package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
- package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
- package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
- package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
- package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -201
- package/.agents/scripts/lib/orchestration/story-follow-ups.js +43 -245
- package/.agents/scripts/lib/orchestration/story-init-envelope.js +4 -23
- package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
- package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
- package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -126
- package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
- package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
- package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
- package/.agents/scripts/lib/orchestration/ticket-validator.js +39 -181
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -250
- package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
- package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
- package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
- package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
- package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
- package/.agents/scripts/lib/path-security.js +3 -6
- package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
- package/.agents/scripts/lib/preflight-runner.js +13 -69
- package/.agents/scripts/lib/process-group.js +143 -0
- package/.agents/scripts/lib/project-root.js +2 -8
- package/.agents/scripts/lib/provider-factory.js +2 -25
- package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
- package/.agents/scripts/lib/qa/qa-session.js +15 -69
- package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
- package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
- package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
- package/.agents/scripts/lib/reserved-test-ids.js +9 -47
- package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
- package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
- package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
- package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
- package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
- package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
- package/.agents/scripts/lib/signals/detectors/common.js +12 -38
- package/.agents/scripts/lib/signals/index.js +2 -19
- package/.agents/scripts/lib/signals/schema.js +14 -109
- package/.agents/scripts/lib/signals/write.js +2 -11
- package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
- package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
- package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
- package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
- package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
- package/.agents/scripts/lib/single-story-sweep.js +14 -97
- package/.agents/scripts/lib/skills/parse-skill.js +13 -59
- package/.agents/scripts/lib/skills/skills-index.js +8 -29
- package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
- package/.agents/scripts/lib/source-extensions.js +11 -42
- package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
- package/.agents/scripts/lib/stdio-flush.js +9 -36
- package/.agents/scripts/lib/story-adjacency.js +8 -40
- package/.agents/scripts/lib/story-body/body-format-lints.js +22 -83
- package/.agents/scripts/lib/story-body/footer-block.js +11 -44
- package/.agents/scripts/lib/story-body/story-body.js +83 -358
- package/.agents/scripts/lib/temp-retention.js +42 -143
- package/.agents/scripts/lib/templates/decomposer-prompts.js +11 -65
- package/.agents/scripts/lib/test-env.js +12 -65
- package/.agents/scripts/lib/test-run-credit.js +10 -65
- package/.agents/scripts/lib/test-runner-contract.js +19 -74
- package/.agents/scripts/lib/test-temp.js +38 -184
- package/.agents/scripts/lib/test-tiers.js +12 -96
- package/.agents/scripts/lib/ticket-body-sections.js +21 -96
- package/.agents/scripts/lib/transpile.js +15 -74
- package/.agents/scripts/lib/util/concurrent-map.js +6 -25
- package/.agents/scripts/lib/util/parse-id-list.js +8 -34
- package/.agents/scripts/lib/util/poll-loop.js +8 -28
- package/.agents/scripts/lib/util/with-timeout.js +2 -11
- package/.agents/scripts/lib/validation-evidence.js +21 -96
- package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
- package/.agents/scripts/lib/wave-runner/live-probe.js +53 -221
- package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
- package/.agents/scripts/lib/workers/crap-worker.js +11 -64
- package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
- package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
- package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
- package/.agents/scripts/lib/workflow-closure.js +22 -105
- package/.agents/scripts/lib/workspace-provisioner.js +16 -54
- package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
- package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
- package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
- package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
- package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
- package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
- package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
- package/.agents/scripts/lib/worktree-manager.js +15 -40
- package/.agents/scripts/lint-issue-body.js +12 -68
- package/.agents/scripts/mandrel-update-preflight.js +10 -70
- package/.agents/scripts/merge-baseline.js +30 -104
- package/.agents/scripts/nav-registry-diff.js +22 -108
- package/.agents/scripts/notify.js +12 -69
- package/.agents/scripts/plan-context.js +27 -111
- package/.agents/scripts/plan-critics.js +12 -66
- package/.agents/scripts/plan-persist.js +31 -148
- package/.agents/scripts/plan-run-epilogue.js +11 -37
- package/.agents/scripts/pr-watch-with-update.js +76 -267
- package/.agents/scripts/providers/github/auth.js +3 -8
- package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
- package/.agents/scripts/providers/github/board-add.js +5 -21
- package/.agents/scripts/providers/github/branch-protection.js +11 -43
- package/.agents/scripts/providers/github/cache.js +2 -14
- package/.agents/scripts/providers/github/comments.js +7 -40
- package/.agents/scripts/providers/github/compose.js +3 -19
- package/.agents/scripts/providers/github/errors.js +22 -125
- package/.agents/scripts/providers/github/issues.js +31 -123
- package/.agents/scripts/providers/github/labels.js +24 -124
- package/.agents/scripts/providers/github/mappers.js +5 -27
- package/.agents/scripts/providers/github/merge-methods.js +3 -22
- package/.agents/scripts/providers/github/project-board.js +2 -17
- package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
- package/.agents/scripts/providers/github/request-helpers.js +5 -32
- package/.agents/scripts/providers/github/search-budget.js +9 -39
- package/.agents/scripts/providers/github/search-query.js +5 -26
- package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
- package/.agents/scripts/providers/github/sub-issues.js +7 -36
- package/.agents/scripts/providers/github/tickets.js +32 -134
- package/.agents/scripts/providers/github.js +18 -59
- package/.agents/scripts/prune-plan-run-labels.js +12 -46
- package/.agents/scripts/quality-preview.js +35 -220
- package/.agents/scripts/resolve-doc-tiers.js +3 -26
- package/.agents/scripts/resolve-stories.js +16 -67
- package/.agents/scripts/resync-status-column.js +6 -25
- package/.agents/scripts/run-tests.js +29 -104
- package/.agents/scripts/single-story-close.js +23 -135
- package/.agents/scripts/single-story-confirm-merge.js +32 -139
- package/.agents/scripts/single-story-init.js +47 -209
- package/.agents/scripts/stories-wave-tick.js +102 -472
- package/.agents/scripts/sync-agentrc.js +3 -21
- package/.agents/scripts/sync-claude-agents.js +9 -55
- package/.agents/scripts/sync-claude-commands.js +20 -110
- package/.agents/scripts/test-wrapper.js +6 -43
- package/.agents/scripts/update-coverage-baseline.js +5 -22
- package/.agents/scripts/update-crap-baseline.js +7 -30
- package/.agents/scripts/update-duplication-baseline.js +16 -92
- package/.agents/scripts/update-maintainability-baseline.js +8 -62
- package/.agents/scripts/update-ticket-state.js +1 -7
- package/.agents/scripts/validate-skills.js +6 -26
- package/.agents/templates/agent-protocol.md +2 -2
- package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
- package/.agents/workflows/audit-accessibility.md +4 -7
- package/.agents/workflows/audit-adrs.md +3 -6
- package/.agents/workflows/audit-architecture.md +3 -11
- package/.agents/workflows/audit-baselines.md +6 -9
- package/.agents/workflows/audit-clean-code.md +8 -12
- package/.agents/workflows/audit-data-model.md +3 -7
- package/.agents/workflows/audit-dependencies.md +4 -7
- package/.agents/workflows/audit-devops.md +4 -8
- package/.agents/workflows/audit-documentation.md +1 -4
- package/.agents/workflows/audit-mobile.md +4 -7
- package/.agents/workflows/audit-navigability.md +3 -6
- package/.agents/workflows/audit-performance.md +2 -4
- package/.agents/workflows/audit-privacy.md +4 -7
- package/.agents/workflows/audit-quality.md +4 -7
- package/.agents/workflows/audit-security.md +4 -7
- package/.agents/workflows/audit-seo.md +4 -7
- package/.agents/workflows/audit-sre.md +4 -7
- package/.agents/workflows/audit-to-stories.md +17 -30
- package/.agents/workflows/audit-ux-ui.md +4 -7
- package/.agents/workflows/helpers/audit-lens-core.md +1 -1
- package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
- package/.agents/workflows/helpers/deliver-digest.md +6 -4
- package/.agents/workflows/helpers/deliver-reference.md +114 -188
- package/.agents/workflows/helpers/deliver-story-reference.md +189 -533
- package/.agents/workflows/helpers/plan-reference.md +86 -139
- package/.agents/workflows/helpers/qa-core.md +12 -0
- package/.agents/workflows/memory-consolidate.md +1 -1
- package/.agents/workflows/qa-assist.md +27 -71
- package/.agents/workflows/qa-explore.md +19 -59
- package/.agents/workflows/qa-run.md +11 -33
- package/README.md +1 -1
- package/bin/mandrel.js +5 -46
- package/bin/postinstall.js +18 -107
- package/docs/CHANGELOG.md +25 -0
- package/lib/cli/doctor.js +11 -71
- package/lib/cli/init.js +26 -165
- package/lib/cli/migrate.js +5 -64
- package/lib/cli/registry.js +84 -467
- package/lib/cli/sync-agents.js +4 -64
- package/lib/cli/sync-commands.js +11 -64
- package/lib/cli/sync.js +34 -213
- package/lib/cli/uninstall.js +40 -219
- package/lib/cli/update.js +105 -661
- package/lib/cli/version-check.js +8 -72
- package/lib/cli/version-helpers.js +14 -87
- package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
- package/lib/migrations/index.js +15 -92
- package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
- package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
- package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
- package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
- package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
- package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
- package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
- package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
- package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +2 -21
- package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
- package/package.json +16 -14
- package/.agents/docs/SDLC.md +0 -590
- package/.agents/docs/quality-gates.md +0 -1183
- package/.agents/rules/known-tooling-behavior.md +0 -200
- package/.agents/rules/orchestration-error-handling.md +0 -61
- package/.agents/rules/test-seams.md +0 -59
- package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
- package/.agents/schemas/baselines/lint.schema.json +0 -47
- package/.agents/scripts/check-action-pinning.js +0 -260
- package/.agents/scripts/check-audit-attribution.js +0 -302
- package/.agents/scripts/check-baseline-drift.js +0 -211
- package/.agents/scripts/check-baseline-scope.js +0 -362
- package/.agents/scripts/check-generated-validator.js +0 -202
- package/.agents/scripts/check-knip-entries.js +0 -159
- package/.agents/scripts/check-lifecycle-lint.js +0 -294
- package/.agents/scripts/check-pinned-override-notes.js +0 -102
- package/.agents/scripts/check-schema-references.js +0 -368
- package/.agents/scripts/check-test-portability.js +0 -512
- package/.agents/scripts/check-workflow-citations.js +0 -218
- package/.agents/scripts/check-workflow-cli-lint.js +0 -299
- package/.agents/scripts/check-workflow-timeouts.js +0 -291
- package/.agents/scripts/install-matrix-assert.js +0 -326
- package/.agents/scripts/lib/audit-advisories.js +0 -195
- package/.agents/scripts/lib/audit-attribution.js +0 -134
- package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
- package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
- package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
- package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
- package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
- package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
- package/.agents/scripts/lib/c8-cli-path.js +0 -21
- package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
- package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
- package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
- package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
- package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
- package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
- package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
- package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
- package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
- package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
- package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
- package/.agents/scripts/lib/fs-walk.js +0 -52
- package/.agents/scripts/lib/knip-config-resolver.js +0 -181
- package/.agents/scripts/lib/knip-entry-sync.js +0 -452
- package/.agents/scripts/lib/pinned-override-notes.js +0 -88
- package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
- package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
- package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
- package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
- package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
- package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
- package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
- package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
- package/.agents/scripts/lib/test-isolate/runner.js +0 -483
- package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
- package/.agents/scripts/lib/test-profile/render-report.js +0 -45
- package/.agents/scripts/lint-label-vocabulary.js +0 -214
- package/.agents/scripts/post-structured-comment.js +0 -127
- package/.agents/scripts/provision-git-hooks.js +0 -85
- package/.agents/scripts/prune-baseline-orphans.js +0 -181
- package/.agents/scripts/run-coverage.js +0 -197
- package/.agents/scripts/run-lint.js +0 -133
- package/.agents/scripts/run-test-profile.js +0 -129
- package/.agents/scripts/run-verify.js +0 -125
- package/.agents/scripts/test-isolate.js +0 -55
- package/.agents/scripts/update-dead-exports-baseline.js +0 -321
|
@@ -1,110 +1,32 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* worker_threads pool for CPU-bound work; results land in input order.
|
|
3
3
|
*
|
|
4
|
-
* `
|
|
5
|
-
* `
|
|
6
|
-
*
|
|
7
|
-
* `
|
|
8
|
-
*
|
|
9
|
-
* array of per-item results in input order. The queue is bounded by
|
|
10
|
-
* worker count — we only have N items in flight at once, where N =
|
|
11
|
-
* concurrency, so back-pressure is implicit.
|
|
12
|
-
*
|
|
13
|
-
* Determinism:
|
|
14
|
-
* - The returned `results` array is indexed by input position. Workers
|
|
15
|
-
* race on dispatch but each result lands at its source index, so
|
|
16
|
-
* callers that need deterministic output order can either consume
|
|
17
|
-
* `results` directly (already in input order) or apply a stable
|
|
18
|
-
* sort by file path / id of their choosing after the pool drains.
|
|
19
|
-
*
|
|
20
|
-
* Failure handling:
|
|
21
|
-
* - The worker contract is: emit `{ ok: true, result }` per item, or
|
|
22
|
-
* `{ ok: false, error: string }` for a per-item failure. The default
|
|
23
|
-
* is to capture per-item failures as `{ __cpuPoolError: true,
|
|
24
|
-
* message }` entries at the corresponding result index so one bad
|
|
25
|
-
* input does not abort the run. Pass `opts.throwOnItemError === true`
|
|
26
|
-
* (an explicit `true`, not just truthy) to flip to the abort-on-first
|
|
27
|
-
* mode, which rejects the whole `runOnPool` call.
|
|
28
|
-
* - A worker that crashes (`error` event) or exits non-zero rejects
|
|
29
|
-
* the whole pool — that is not a per-item failure, it is a host-level
|
|
30
|
-
* fault and must surface.
|
|
31
|
-
*
|
|
32
|
-
* Worker-side contract:
|
|
33
|
-
* - The worker entry receives `workerData` (passed once at spawn).
|
|
34
|
-
* - It listens on `parentPort` for messages of shape `{ item }` for
|
|
35
|
-
* work dispatch, or `{ exit: true }` to drain and exit cleanly.
|
|
36
|
-
* - It must `parentPort.postMessage({ ok, result | error })` exactly
|
|
37
|
-
* once per `{ item }` it receives.
|
|
38
|
-
*
|
|
39
|
-
* No project config or git access is loaded here — the pool itself is
|
|
40
|
-
* a thin scheduler so workers stay cheap to spawn.
|
|
41
|
-
*
|
|
42
|
-
* Worker injection (testability):
|
|
43
|
-
* - The worker handle is produced by `opts.workerFactory(script, options)`,
|
|
44
|
-
* defaulting to `(script, options) => new Worker(script, options)`. The
|
|
45
|
-
* factory must return an EventEmitter-shaped handle exposing the subset
|
|
46
|
-
* of the `worker_threads.Worker` surface the scheduler uses: `on`,
|
|
47
|
-
* `off`, `once`, `postMessage`, and a thenable `terminate()`. Injecting
|
|
48
|
-
* a synchronous fake factory lets unit tests drive the scheduling,
|
|
49
|
-
* ordering, and exit-race branches in-process without spawning a real
|
|
50
|
-
* OS thread.
|
|
4
|
+
* Worker contract: receives `workerData` once; handles `{ item }` by posting
|
|
5
|
+
* exactly one `{ ok: true, result }` or `{ ok: false, error }`, and
|
|
6
|
+
* `{ exit: true }` by exiting. A per-item error becomes a `__cpuPoolError`
|
|
7
|
+
* entry (or rejects with `throwOnItemError === true`); a crash or non-zero
|
|
8
|
+
* exit rejects the whole pool.
|
|
51
9
|
*/
|
|
52
10
|
|
|
53
11
|
import os from 'node:os';
|
|
54
12
|
import { Worker } from 'node:worker_threads';
|
|
55
13
|
|
|
56
|
-
/** Default factory: spawn a real `worker_threads.Worker`. */
|
|
57
14
|
const defaultWorkerFactory = (script, options) => new Worker(script, options);
|
|
58
15
|
|
|
59
16
|
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
* callers fall back to in-process serial scoring. Single-sourced here so the
|
|
64
|
-
* maintainability baseline scan (`maintainability-utils.js`), the CRAP
|
|
65
|
-
* scanner (`crap-utils.js`), and the native review provider
|
|
66
|
-
* (`review-providers/native.js`) cannot silently desynchronize on a retune.
|
|
67
|
-
*
|
|
68
|
-
* **Retuned from 8 to 256 in Story #5109.** The original 8 was set against
|
|
69
|
-
* tmpdir fixtures and never measured against a real batch, so every
|
|
70
|
-
* pre-commit preview — the most frequent path in the framework — paid for a
|
|
71
|
-
* pool it could not amortise. Measured on this repository (18 logical cores,
|
|
72
|
-
* `.agents/scripts` + `bin` + `lib`, MI scoring):
|
|
73
|
-
*
|
|
74
|
-
* ```text
|
|
75
|
-
* n=16 serial 125 ms pooled 444 ms
|
|
76
|
-
* n=64 serial 175 ms pooled 535 ms
|
|
77
|
-
* n=128 serial 241 ms pooled 422 ms
|
|
78
|
-
* n=256 serial 440 ms pooled 707 ms <- still serial-favourable
|
|
79
|
-
* n=384 serial 943 ms pooled 782 ms <- crossover
|
|
80
|
-
* n=619 serial 1054 ms pooled 710 ms
|
|
81
|
-
* ```
|
|
82
|
-
*
|
|
83
|
-
* The crossover sits between 256 and 384, so 256 is the last power-of-two
|
|
84
|
-
* step the serial path provably wins. A whole-tree baseline refresh
|
|
85
|
-
* (n≈619) still takes the pool; a diff-scoped preview (n≈50) no longer
|
|
86
|
-
* spawns a worker at all. Scoring output is identical on either path — the
|
|
87
|
-
* worker runs the same scorer — so this is a cost retune, never a verdict
|
|
88
|
-
* change.
|
|
17
|
+
* Batch size below which callers score serially: measured serial/pooled
|
|
18
|
+
* crossover lies between 256 and 384 files. Output is identical either way.
|
|
19
|
+
* Shared by every pooled scanner so they cannot desynchronize.
|
|
89
20
|
*/
|
|
90
21
|
export const POOL_SERIAL_THRESHOLD = 256;
|
|
91
22
|
|
|
92
23
|
/**
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
* Node's test runner already fans test *files* out across processes, so a
|
|
96
|
-
* pool inside one of them multiplies against that fan-out and can oversubscribe
|
|
97
|
-
* the host by an order of magnitude. Four is wide enough to keep the pooled
|
|
98
|
-
* code path genuinely concurrent (so the scheduling branches under test stay
|
|
99
|
-
* exercised) without letting a suite of parallel test processes each claim
|
|
100
|
-
* every core.
|
|
24
|
+
* Under `node:test` the runner already fans out across processes; an
|
|
25
|
+
* unclamped pool in each would oversubscribe the host.
|
|
101
26
|
*/
|
|
102
27
|
const NODE_TEST_CONCURRENCY_CLAMP = 4;
|
|
103
28
|
|
|
104
29
|
/**
|
|
105
|
-
* True when this process was spawned by Node's own test runner, which sets
|
|
106
|
-
* `NODE_TEST_CONTEXT` in every test child.
|
|
107
|
-
*
|
|
108
30
|
* @param {NodeJS.ProcessEnv} env
|
|
109
31
|
* @returns {boolean}
|
|
110
32
|
*/
|
|
@@ -115,21 +37,8 @@ function inNodeTestContext(env) {
|
|
|
115
37
|
}
|
|
116
38
|
|
|
117
39
|
/**
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
* 1. an explicit `opts.concurrency` — the caller knows its own budget;
|
|
121
|
-
* 2. `MANDREL_POOL_CONCURRENCY` — the operator/CI override, so a
|
|
122
|
-
* constrained runner can bound every pool in the process tree at once;
|
|
123
|
-
* 3. `NODE_TEST_CONCURRENCY_CLAMP` when running under `node:test`;
|
|
124
|
-
* 4. `os.availableParallelism()`.
|
|
125
|
-
*
|
|
126
|
-
* Only *finite, positive* values are honoured at each step; anything else
|
|
127
|
-
* falls through to the next, so a typo in the env var degrades to the
|
|
128
|
-
* default rather than collapsing the pool to a single worker.
|
|
129
|
-
*
|
|
130
|
-
* Module-private on purpose: `runOnPool` is the only caller, and the
|
|
131
|
-
* precedence is pinned through its observable worker count rather than by
|
|
132
|
-
* an export whose sole importer would be a test.
|
|
40
|
+
* Explicit option, then `MANDREL_POOL_CONCURRENCY`, then the `node:test`
|
|
41
|
+
* clamp, then available parallelism. Non-positive values fall through.
|
|
133
42
|
*
|
|
134
43
|
* @param {number|undefined} explicit
|
|
135
44
|
* @param {NodeJS.ProcessEnv} [env]
|
|
@@ -182,12 +91,8 @@ export async function runOnPool(workerScript, items, opts = {}) {
|
|
|
182
91
|
|
|
183
92
|
async function runWorker() {
|
|
184
93
|
const worker = workerFactory(workerScript, { workerData });
|
|
185
|
-
//
|
|
186
|
-
//
|
|
187
|
-
// process.exit). Registering a single persistent listener here also
|
|
188
|
-
// sidesteps the race where worker.once('exit', ...) added inside
|
|
189
|
-
// finally arrives after the 'exit' event has already fired and
|
|
190
|
-
// therefore never resolves.
|
|
94
|
+
// A persistent listener: a once('exit') added in `finally` could miss an
|
|
95
|
+
// exit that already fired and never resolve.
|
|
191
96
|
let workerExited = false;
|
|
192
97
|
worker.on('exit', () => {
|
|
193
98
|
workerExited = true;
|
|
@@ -225,18 +130,12 @@ export async function runOnPool(workerScript, items, opts = {}) {
|
|
|
225
130
|
} catch {
|
|
226
131
|
// worker may already be terminating
|
|
227
132
|
}
|
|
228
|
-
// Wait briefly for clean exit, then force-terminate. Re-check
|
|
229
|
-
// workerExited because the dispatch loop may have observed the
|
|
230
|
-
// exit between the guard above and here.
|
|
231
133
|
if (!workerExited) {
|
|
232
134
|
const exited = new Promise((resolve) => {
|
|
233
135
|
if (workerExited) resolve();
|
|
234
136
|
else worker.once('exit', resolve);
|
|
235
137
|
});
|
|
236
|
-
//
|
|
237
|
-
// the event loop appear idle while this promise is pending,
|
|
238
|
-
// which trips Node's test runner cancellation under cold-CI
|
|
239
|
-
// conditions.
|
|
138
|
+
// Never unref: an idle-looking loop trips test-runner cancellation.
|
|
240
139
|
await Promise.race([
|
|
241
140
|
exited,
|
|
242
141
|
new Promise((resolve) => setTimeout(resolve, 1000)),
|
|
@@ -257,12 +156,7 @@ export async function runOnPool(workerScript, items, opts = {}) {
|
|
|
257
156
|
return results;
|
|
258
157
|
}
|
|
259
158
|
|
|
260
|
-
/**
|
|
261
|
-
* Round-trip a single item through `worker`, resolving to a tagged
|
|
262
|
-
* outcome. Never throws: a host-level fault is reported as
|
|
263
|
-
* `{ kind: 'fatal', error }` so `runOnPool` can record it as the first
|
|
264
|
-
* fatal error and stop dispatching.
|
|
265
|
-
*/
|
|
159
|
+
/** Never throws; a host-level fault resolves `{ kind: 'fatal', error }`. */
|
|
266
160
|
function dispatchOne(worker, item) {
|
|
267
161
|
return new Promise((resolve) => {
|
|
268
162
|
const cleanup = () => {
|
|
@@ -1,18 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* per-file queue wiring, and the join itself.
|
|
5
|
-
*
|
|
6
|
-
* Story #4981 landed those four concerns as three files
|
|
7
|
-
* (`crap-baseline-index.js`, `crap-utils-incremental.js`, and this one) so
|
|
8
|
-
* the work would land as new code rather than same-file expansions. Story
|
|
9
|
-
* #5002 folded them back together: they were one cohesive unit split only
|
|
10
|
-
* for that scoring reason, and the split cost two import hops and two
|
|
11
|
-
* modules whose whole content was five short pure functions.
|
|
12
|
-
*
|
|
13
|
-
* Imports its coordinate/formula primitives from `crap-coordinates.js` (not
|
|
14
|
-
* `crap-engine.js`) so this file stays a one-directional consumer with no
|
|
15
|
-
* edge back into the scoring kernel — `crap-engine.js` imports FROM here.
|
|
2
|
+
* The incremental-coverage CRAP join. Imports primitives from
|
|
3
|
+
* `crap-coordinates.js`, never `crap-engine.js`, which imports from here.
|
|
16
4
|
*/
|
|
17
5
|
import {
|
|
18
6
|
COORDINATE_ORIGINAL,
|
|
@@ -21,10 +9,7 @@ import {
|
|
|
21
9
|
} from './crap-coordinates.js';
|
|
22
10
|
|
|
23
11
|
/**
|
|
24
|
-
* Per-file half of
|
|
25
|
-
* `crapRowKey` composes with the file path (`${path}::${method}@${startLine}`).
|
|
26
|
-
* The path component is redundant once a row set is already narrowed to one
|
|
27
|
-
* file, which is exactly what `indexBaselineRowsByFile` does below.
|
|
12
|
+
* Per-file half of `crapRowKey` (`${path}::${method}@${startLine}`).
|
|
28
13
|
*
|
|
29
14
|
* @param {{method: string, startLine: number}} row
|
|
30
15
|
* @returns {string}
|
|
@@ -34,11 +19,7 @@ function methodIdentityKey(row) {
|
|
|
34
19
|
}
|
|
35
20
|
|
|
36
21
|
/**
|
|
37
|
-
*
|
|
38
|
-
* legacy shape `compareCrap`/`scanAndScore` use, or the on-disk `{path, ...}`
|
|
39
|
-
* shape) by file, then by `methodIdentityKey`, for O(1) per-method lookup —
|
|
40
|
-
* exactly the shape `finalizeMethodRowsWithBaseline`'s `baselineByKey`
|
|
41
|
-
* expects.
|
|
22
|
+
* Accepts both the in-memory `{file}` and on-disk `{path}` row shapes.
|
|
42
23
|
*
|
|
43
24
|
* @param {Array<{file?: string, path?: string, method: string, startLine: number, crap: number}>} baselineRows
|
|
44
25
|
* @returns {Map<string, Map<string, {crap: number}>>} file → (method@startLine → row)
|
|
@@ -55,10 +36,7 @@ function indexBaselineRowsByFile(baselineRows) {
|
|
|
55
36
|
}
|
|
56
37
|
|
|
57
38
|
/**
|
|
58
|
-
*
|
|
59
|
-
* lookup structures the per-file queue build needs. Both are `null` when
|
|
60
|
-
* `incremental` is absent (full-scope, the default) — every downstream
|
|
61
|
-
* consumer treats a `null` context as "not incremental".
|
|
39
|
+
* Both fields `null` means "not incremental".
|
|
62
40
|
*
|
|
63
41
|
* @param {{ touchedFiles?: Set<string>|string[], baselineRows?: Array<object> } | null} incremental
|
|
64
42
|
* @returns {{ touchedFiles: Set<string>|null, baselineByFile: Map<string, Map<string, object>>|null }}
|
|
@@ -76,10 +54,7 @@ export function resolveIncrementalContext(incremental) {
|
|
|
76
54
|
}
|
|
77
55
|
|
|
78
56
|
/**
|
|
79
|
-
*
|
|
80
|
-
* (resolved from the `resolveIncrementalContext` output) onto its base queue
|
|
81
|
-
* item. `touched` defaults to `true` (every file is "touched" outside
|
|
82
|
-
* incremental mode, matching `finalizeMethodRowsWithBaseline`'s own default).
|
|
57
|
+
* Outside incremental mode every file is `touched`.
|
|
83
58
|
*
|
|
84
59
|
* @param {object} item Base queue item (`{ abs, relPath, requireCoverage, coverageAvailable }`).
|
|
85
60
|
* @param {{ touchedFiles: Set<string>|null, baselineByFile: Map<string, Map<string, object>>|null }} ctx
|
|
@@ -97,10 +72,6 @@ export function resolveQueueIncrementalFields(
|
|
|
97
72
|
}
|
|
98
73
|
|
|
99
74
|
/**
|
|
100
|
-
* True when a file's methods should resolve from the baseline rather than
|
|
101
|
-
* from a fresh coverage entry — an untouched file with at least one indexed
|
|
102
|
-
* baseline row.
|
|
103
|
-
*
|
|
104
75
|
* @param {boolean} touched
|
|
105
76
|
* @param {Map<string, object>|null} baselineByKey
|
|
106
77
|
* @returns {boolean}
|
|
@@ -110,10 +81,6 @@ function isIncrementalJoinActive(touched, baselineByKey) {
|
|
|
110
81
|
}
|
|
111
82
|
|
|
112
83
|
/**
|
|
113
|
-
* `crap-utils.js#scoreFileSerial`'s file-level skip decision, factored out
|
|
114
|
-
* whole so the incremental exception lives with the rest of the join rather
|
|
115
|
-
* than inflating the cyclomatic complexity of the pre-#4981 caller.
|
|
116
|
-
*
|
|
117
84
|
* @param {boolean} requireCoverage
|
|
118
85
|
* @param {object|null} entry Istanbul coverage entry for this file.
|
|
119
86
|
* @param {boolean} touched
|
|
@@ -134,23 +101,17 @@ export function shouldSkipFileForNoCoverage(
|
|
|
134
101
|
}
|
|
135
102
|
|
|
136
103
|
/**
|
|
137
|
-
*
|
|
138
|
-
* The per-row half of `crap-engine.js#finalizeMethodRows`'s loop body,
|
|
139
|
-
* extracted (Story #4981) so `finalizeMethodRowsWithBaseline`, below, can
|
|
140
|
-
* apply the exact same per-row policy to a method whose file was NOT in the
|
|
141
|
-
* diff scope but whose baseline row could not be found — the fail-closed
|
|
142
|
-
* path AC-3 requires.
|
|
104
|
+
* The per-row `requireCoverage` policy, shared by both finalize paths.
|
|
143
105
|
*
|
|
144
106
|
* @param {object} mr A raw row from `methodRowsFromReport`.
|
|
145
107
|
* @param {{requireCoverage: boolean, coverageAvailable: boolean}} opts
|
|
146
|
-
* @returns {{ resolved: boolean, row: object | null }} `row: null` means
|
|
147
|
-
*
|
|
148
|
-
* (independent of whether the row survives the skip policy).
|
|
108
|
+
* @returns {{ resolved: boolean, row: object | null }} `row: null` means
|
|
109
|
+
* skipped-and-counted; `resolved` tracks the join alone.
|
|
149
110
|
*/
|
|
150
111
|
export function resolveRawRow(mr, { requireCoverage, coverageAvailable }) {
|
|
151
112
|
const unresolved = mr.crap === null || mr.coverage === null;
|
|
152
113
|
const resolved = !unresolved;
|
|
153
|
-
// Unjoinable is not untested
|
|
114
|
+
// Unjoinable (transpiled) is not untested.
|
|
154
115
|
if (
|
|
155
116
|
mr.coordinateSystem === COORDINATE_TRANSPILED ||
|
|
156
117
|
(unresolved && (requireCoverage || !coverageAvailable))
|
|
@@ -159,11 +120,7 @@ export function resolveRawRow(mr, { requireCoverage, coverageAvailable }) {
|
|
|
159
120
|
}
|
|
160
121
|
const coverage = unresolved ? 0 : mr.coverage;
|
|
161
122
|
const crap = unresolved ? crapFormula(mr.cyclomatic, 0) : mr.crap;
|
|
162
|
-
//
|
|
163
|
-
// what its own policy resolves. Spreading rather than re-listing each field
|
|
164
|
-
// is why the row's identity marker (Story #4969) and its provenance
|
|
165
|
-
// (Story #4866) survive the step without a line each to remember them —
|
|
166
|
-
// a hand-rebuilt row is how a marker silently stops reaching the baseline.
|
|
123
|
+
// Spread, never rebuild: a hand-listed row silently drops markers.
|
|
167
124
|
return {
|
|
168
125
|
resolved,
|
|
169
126
|
row: {
|
|
@@ -176,38 +133,11 @@ export function resolveRawRow(mr, { requireCoverage, coverageAvailable }) {
|
|
|
176
133
|
}
|
|
177
134
|
|
|
178
135
|
/**
|
|
179
|
-
*
|
|
180
|
-
*
|
|
181
|
-
*
|
|
182
|
-
*
|
|
183
|
-
*
|
|
184
|
-
* Rationale: when the capture was skipped because nothing under
|
|
185
|
-
* `crap.targetDirs` changed, the coverage artifact on disk is whatever the
|
|
186
|
-
* last run left — so an untouched file's coverage entry may legitimately be
|
|
187
|
-
* absent even though nothing about that file's methods changed. (The capture
|
|
188
|
-
* run itself is never narrowed: a capture that *does* happen is the ordinary
|
|
189
|
-
* full suite — Story #5065.) Requiring a fresh join for it would either
|
|
190
|
-
* (a) skip-and-count
|
|
191
|
-
* every one of its methods under `requireCoverage: true`, weakening the
|
|
192
|
-
* gate's signal for the vast majority of the tree on every run, or (b) score
|
|
193
|
-
* them at an invented 0% under `requireCoverage: false`, manufacturing a
|
|
194
|
-
* maximal CRAP for code the diff never touched. Neither is a measurement.
|
|
195
|
-
*
|
|
196
|
-
* The join key is `${method}@${startLine}` — the per-file half of the
|
|
197
|
-
* composite identity `kinds/crap.js#crapRowKey` uses for the full baseline
|
|
198
|
-
* compare (`${path}::${method}@${startLine}`); callers pass in a
|
|
199
|
-
* per-file-scoped `baselineByKey` map so this function stays path-agnostic.
|
|
200
|
-
*
|
|
201
|
-
* **Fail-closed (AC-3).** `touched: true` (the file WAS in the diff) or a
|
|
202
|
-
* missing/empty `baselineByKey` reproduces `crap-engine.js#finalizeMethodRows`
|
|
203
|
-
* exactly — this is the pre-#4981 per-row policy, so a caller that never
|
|
204
|
-
* opts in sees byte-identical behaviour (AC-5). For an untouched file, a
|
|
205
|
-
* method whose baseline row cannot be found (new method, moved line, or a
|
|
206
|
-
* baseline that simply never carried it) is NOT invented — it falls back to
|
|
207
|
-
* the same per-row `requireCoverage` skip-and-count policy, via the shared
|
|
208
|
-
* `resolveRawRow`. A method whose coordinate system is transpiled is never
|
|
209
|
-
* resolved from the baseline either, for the same un-joinable reason
|
|
210
|
-
* `resolveRawRow` excludes it (Story #4901).
|
|
136
|
+
* For a file the diff did not touch, resolve methods from committed baseline
|
|
137
|
+
* rows: a skipped capture leaves its coverage entry legitimately absent, and
|
|
138
|
+
* neither skip-and-count nor an invented 0% would be a measurement. Touched
|
|
139
|
+
* files, an empty baseline, a missing row or a transpiled line all fall back
|
|
140
|
+
* to `resolveRawRow` — never an invented verdict.
|
|
211
141
|
*
|
|
212
142
|
* @param {Array<object>} rawRows Rows from `methodRowsFromReport`, all for
|
|
213
143
|
* the SAME file.
|
|
@@ -257,8 +187,6 @@ export function finalizeMethodRowsWithBaseline(
|
|
|
257
187
|
continue;
|
|
258
188
|
}
|
|
259
189
|
}
|
|
260
|
-
// Touched file, no baseline scope, or no baseline row for this method —
|
|
261
|
-
// fail closed to the standard policy rather than inventing a verdict.
|
|
262
190
|
const resolution = resolveRawRow(mr, {
|
|
263
191
|
requireCoverage,
|
|
264
192
|
coverageAvailable,
|
|
@@ -1,37 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* crap-
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* Deliberately dependency-free (Story #4981 split, pulled out of
|
|
6
|
-
* `crap-engine.js`): both `crap-engine.js` and `crap-baseline-join.js`
|
|
7
|
-
* need these, and having either import them from the other would close a
|
|
8
|
-
* cycle. `crap-engine.js` re-exports the two constants so its existing
|
|
9
|
-
* importers (`baselines/kinds/crap.js`, `crap-utils.js`, tests) are
|
|
10
|
-
* unaffected.
|
|
2
|
+
* Dependency-free so `crap-engine.js` and `crap-baseline-join.js` can share
|
|
3
|
+
* these without an import cycle.
|
|
11
4
|
*/
|
|
12
5
|
|
|
13
6
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* `original`
|
|
18
|
-
* istanbul's `fnMap` is keyed against. A JavaScript source is already in this
|
|
19
|
-
* system; a TS/TSX source reaches it only through a successful sourcemap
|
|
20
|
-
* lookup.
|
|
21
|
-
*
|
|
22
|
-
* `transpiled` — escomplex's own coordinates over the emitted JavaScript,
|
|
23
|
-
* kept only when the sourcemap has no entry originating on the method's
|
|
24
|
-
* generated line. Such a row is NOT an original-source coordinate and must
|
|
25
|
-
* never be presented as one: it cannot be joined to coverage, and it cannot
|
|
26
|
-
* be compared against a baseline row carrying the other provenance.
|
|
7
|
+
* A row's `startLine` system. `original` is the readable file's (and
|
|
8
|
+
* istanbul's). `transpiled` is kept only when the sourcemap cannot map the
|
|
9
|
+
* line; such a row can neither join coverage nor compare against an
|
|
10
|
+
* `original` baseline row.
|
|
27
11
|
*/
|
|
28
12
|
export const COORDINATE_ORIGINAL = 'original';
|
|
29
13
|
export const COORDINATE_TRANSPILED = 'transpiled';
|
|
30
14
|
|
|
31
15
|
/**
|
|
32
|
-
* CRAP formula, exported for callers that need to derive target scores or
|
|
33
|
-
* `fixGuidance` values without re-scoring source.
|
|
34
|
-
*
|
|
35
16
|
* @param {number} cyclomatic
|
|
36
17
|
* @param {number} coverage In [0, 1].
|
|
37
18
|
* @returns {number}
|