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,59 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* escomplex-ast-compat.js —
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* **Babel** AST. But `typhonjs-escomplex-commons`'
|
|
9
|
-
* `utils/ast/astSyntax.js` — the code generator that `ASTGenerator` drives —
|
|
10
|
-
* was written against **ESTree**. The two disagree on node names
|
|
11
|
-
* (`OptionalMemberExpression` vs a `MemberExpression` with `optional: true`)
|
|
12
|
-
* and on node shapes (Babel's `RegExpLiteral` carries `pattern`/`flags`
|
|
13
|
-
* directly; ESTree wraps them in a `regex` object on a `Literal`).
|
|
14
|
-
*
|
|
15
|
-
* That mismatch is invisible for most code because the metric traversal runs
|
|
16
|
-
* off the syntax plugin's trait tables, not off `astSyntax`. `astSyntax` is
|
|
17
|
-
* only reached where a trait re-serialises a **sub-AST** to synthesise a
|
|
18
|
-
* Halstead operand or a function signature — nine traits do this:
|
|
19
|
-
* `For`/`ForIn`/`ForOf` heads, `Function`/`FunctionExpression`/
|
|
20
|
-
* `ArrowFunctionExpression` parameter lists, `Class`/`ClassExpression`
|
|
21
|
-
* bodies, and `YieldExpression` arguments.
|
|
22
|
-
*
|
|
23
|
-
* Reach one of those with a Babel-only node and `analyzeModule()` throws —
|
|
24
|
-
* aborting the whole module, not just the sub-expression. The constructs that
|
|
25
|
-
* trip it are ordinary modern JavaScript:
|
|
26
|
-
*
|
|
27
|
-
* ```js
|
|
28
|
-
* for (const t of s.split(/[^a-z]+/)) {} // TypeError: …reading 'pattern'
|
|
29
|
-
* for (const t of await xs()) {} // …generator[node.type] is not a function
|
|
30
|
-
* for (const t of a?.b) {} // …generator[node.type] is not a function
|
|
31
|
-
* function f(a = () => import('x')) {} // …this[node.callee.type] is not a function
|
|
32
|
-
* function f(a = { ...b }) {} // TypeError: …reading 'type'
|
|
33
|
-
* function f(a = { m() {} }) {} // TypeError: …reading 'generator'
|
|
34
|
-
* function f(a = class { m() {} }) {} // …this[statement.type] is not a function
|
|
35
|
-
* ```
|
|
36
|
-
*
|
|
37
|
-
* The `{ ...b }` case is upstream issue #24, open and untouched since
|
|
38
|
-
* 2020-12-16 with a byte-identical stack trace. The package last published in
|
|
39
|
-
* June 2022 and the repo that holds the defective file has issues *disabled*,
|
|
40
|
-
* so waiting for an upstream release is not a plan. Consumers of this kernel
|
|
41
|
-
* previously absorbed the breakage as an allowlist of "unscorable" files that
|
|
42
|
-
* grew every time someone wrote a `?.` in a loop head.
|
|
43
|
-
*
|
|
44
|
-
* ## What this module does
|
|
45
|
-
*
|
|
46
|
-
* Installs the missing handlers and repairs the two shape assumptions, on the
|
|
47
|
-
* shared `astSyntax` table, once per process. Every patch is **conditional**:
|
|
48
|
-
* a handler is only installed where the table lacks one, and the two repairs
|
|
49
|
-
* wrap the original rather than replacing its behaviour. If a future kernel
|
|
50
|
-
* bump fixes any of this upstream, the corresponding patch silently stops
|
|
51
|
-
* applying and `install()` reports a shorter list — which
|
|
52
|
-
* `tests/lib/escomplex-ast-compat.test.js` asserts on, so the shrinkage is
|
|
53
|
-
* visible rather than silent.
|
|
54
|
-
*
|
|
55
|
-
* Nothing here changes the score of a file that already parses: the patched
|
|
56
|
-
* paths are exactly the paths that previously threw.
|
|
2
|
+
* escomplex-ast-compat.js — patch the ESTree-written `astSyntax` code
|
|
3
|
+
* generator for the Babel AST the kernel parses. A Babel-only node in a
|
|
4
|
+
* re-serialised sub-AST (loop head, parameter default) otherwise throws for
|
|
5
|
+
* the whole module; upstream is unmaintained. Patches are conditional, so an
|
|
6
|
+
* upstream fix shrinks `applied` (a test asserts it); parseable files score
|
|
7
|
+
* unchanged.
|
|
57
8
|
*
|
|
58
9
|
* @see https://github.com/typhonjs-node-escomplex/typhonjs-escomplex/issues/24
|
|
59
10
|
*/
|
|
@@ -62,54 +13,16 @@ import { createRequire } from 'node:module';
|
|
|
62
13
|
|
|
63
14
|
const require = createRequire(import.meta.url);
|
|
64
15
|
|
|
65
|
-
/**
|
|
66
|
-
* The package whose resolution anchors every `typhonjs-escomplex-commons` deep
|
|
67
|
-
* import in this module.
|
|
68
|
-
*
|
|
69
|
-
* `escomplex-plugin-syntax-babylon` is the package that actually reads the
|
|
70
|
-
* `astSyntax` table during a metric traversal, so its copy of `commons` is the
|
|
71
|
-
* only one worth patching.
|
|
72
|
-
*
|
|
73
|
-
* Module-local on purpose. A test proves the binding by resolving from this
|
|
74
|
-
* package's own root itself — which is the assertion worth making, since our
|
|
75
|
-
* copy and the plugin's coincide under a hoisting installer and an
|
|
76
|
-
* "ours === theirs" check would pass vacuously.
|
|
77
|
-
*/
|
|
16
|
+
/** Reads `astSyntax` during traversal, so its copy is the one to patch. */
|
|
78
17
|
const ANCHOR_PACKAGE = 'escomplex-plugin-syntax-babylon';
|
|
79
18
|
|
|
80
|
-
/** Marker set on every function this module installs, for idempotency. */
|
|
81
19
|
const PATCH_MARKER = Symbol.for('mandrel.escomplexAstCompat');
|
|
82
20
|
|
|
83
|
-
/** Memoised result of the one-time install. */
|
|
84
21
|
let installResult = null;
|
|
85
22
|
|
|
86
23
|
/**
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
* This is a deep import into a transitive dependency's `dist/`, which is
|
|
90
|
-
* exactly as fragile as it looks — hence the soft failure. If upstream ever
|
|
91
|
-
* restructures, `install()` reports `available: false` and the engine falls
|
|
92
|
-
* back to today's behaviour (unscorable files, now reported explicitly by
|
|
93
|
-
* the engine rather than silently scored 0).
|
|
94
|
-
*
|
|
95
|
-
* The patch must land on the *same* `astSyntax` table the metric traversal
|
|
96
|
-
* reads, and that table is resolved by **`escomplex-plugin-syntax-babylon`**,
|
|
97
|
-
* from its own location — `PluginSyntaxBabylon` requires
|
|
98
|
-
* `typhonjs-escomplex-commons/dist/utils/ast/ASTGenerator` and `ASTState` binds
|
|
99
|
-
* the table it finds. So `commons` is anchored through the syntax plugin's
|
|
100
|
-
* resolution, not through this module's and not through the kernel's.
|
|
101
|
-
*
|
|
102
|
-
* Resolving it from here, or from the kernel, would be a coin flip: under a
|
|
103
|
-
* hoisting installer every copy usually coincides, but under pnpm's isolated
|
|
104
|
-
* layout — or as soon as anything declares `commons` at a different version —
|
|
105
|
-
* the plugin can read a *different* physical copy, and the patch then lands on
|
|
106
|
-
* a table nobody reads while `install()` cheerfully reports success. Anchoring
|
|
107
|
-
* on the reader makes that unreachable. Note this is why a test asserting
|
|
108
|
-
* "our copy === the patched copy" proves nothing: under hoisting it passes
|
|
109
|
-
* vacuously — a test must resolve from the plugin's own root instead.
|
|
110
|
-
*
|
|
111
|
-
* `requireFn` is the test seam: a cross-checkout verification harness passes
|
|
112
|
-
* its own `createRequire` so the anchor starts from that checkout's plugin.
|
|
24
|
+
* Anchored through the reader plugin — under pnpm a copy resolved from here
|
|
25
|
+
* could be one nobody reads. A fragile deep import, so failure is soft.
|
|
113
26
|
*
|
|
114
27
|
* @param {NodeJS.Require} [requireFn]
|
|
115
28
|
* @returns {Record<string, Function>|null}
|
|
@@ -132,8 +45,6 @@ function resolveSyntaxTable(requireFn = require) {
|
|
|
132
45
|
}
|
|
133
46
|
|
|
134
47
|
/**
|
|
135
|
-
* Tag a handler as ours so a second `install()` is a no-op.
|
|
136
|
-
*
|
|
137
48
|
* @template {Function} F
|
|
138
49
|
* @param {F} fn
|
|
139
50
|
* @returns {F}
|
|
@@ -144,9 +55,6 @@ function mark(fn) {
|
|
|
144
55
|
}
|
|
145
56
|
|
|
146
57
|
/**
|
|
147
|
-
* Install `name` only if the table has no handler for it. Returns whether the
|
|
148
|
-
* install happened, so the caller can report the applied surface.
|
|
149
|
-
*
|
|
150
58
|
* @param {Record<string, Function>} table
|
|
151
59
|
* @param {string} name
|
|
152
60
|
* @param {Function} handler
|
|
@@ -159,10 +67,7 @@ function addMissing(table, name, handler) {
|
|
|
159
67
|
}
|
|
160
68
|
|
|
161
69
|
/**
|
|
162
|
-
*
|
|
163
|
-
* whose function bits sit on the node itself rather than under `value`.
|
|
164
|
-
* `MethodDefinition` reads `node.value.{generator,params,body}`, so handing it
|
|
165
|
-
* a synthesized `value` lets the original handler do the work unchanged.
|
|
70
|
+
* Moves a Babel method's function bits under `value` for `MethodDefinition`.
|
|
166
71
|
*
|
|
167
72
|
* @param {object} node
|
|
168
73
|
* @returns {object}
|
|
@@ -185,16 +90,10 @@ function asMethodDefinition(node) {
|
|
|
185
90
|
}
|
|
186
91
|
|
|
187
92
|
/**
|
|
188
|
-
*
|
|
189
|
-
* entry point that is about to run `analyzeModule`.
|
|
93
|
+
* Idempotent via PATCH_MARKER.
|
|
190
94
|
*
|
|
191
|
-
* @param {{ requireFn?: NodeJS.Require, memoise?: boolean }} [options]
|
|
192
|
-
*
|
|
193
|
-
* nothing.
|
|
194
|
-
* @returns {{ available: boolean, applied: string[] }} `available` is false
|
|
195
|
-
* when the upstream internals could not be resolved. `applied` names each
|
|
196
|
-
* patch that was actually needed, so an upstream fix shows up as a
|
|
197
|
-
* shorter list.
|
|
95
|
+
* @param {{ requireFn?: NodeJS.Require, memoise?: boolean }} [options]
|
|
96
|
+
* @returns {{ available: boolean, applied: string[] }}
|
|
198
97
|
*/
|
|
199
98
|
export function install(options = {}) {
|
|
200
99
|
const { requireFn, memoise = true } = options;
|
|
@@ -212,11 +111,8 @@ export function install(options = {}) {
|
|
|
212
111
|
if (addMissing(table, name, handler)) applied.push(name);
|
|
213
112
|
};
|
|
214
113
|
|
|
215
|
-
//
|
|
216
|
-
//
|
|
217
|
-
// `Literal`. Babel puts `pattern`/`flags` on the node. Wrapped rather than
|
|
218
|
-
// replaced so the ESTree delegate path (`Literal` → `RegExpLiteral`) keeps
|
|
219
|
-
// its exact original output.
|
|
114
|
+
// Babel puts `pattern`/`flags` on the node; upstream reads `node.regex`.
|
|
115
|
+
// Wrapped so the ESTree `Literal` delegate path keeps its exact output.
|
|
220
116
|
if (
|
|
221
117
|
typeof table.RegExpLiteral === 'function' &&
|
|
222
118
|
!table.RegExpLiteral[PATCH_MARKER]
|
|
@@ -235,25 +131,10 @@ export function install(options = {}) {
|
|
|
235
131
|
applied.push('RegExpLiteral');
|
|
236
132
|
}
|
|
237
133
|
|
|
238
|
-
//
|
|
239
|
-
// `
|
|
240
|
-
//
|
|
241
|
-
//
|
|
242
|
-
// `{ ...b }` → a `SpreadElement` lands in `Property`, which reads
|
|
243
|
-
// `node.key.type` and throws. Upstream issue #24.
|
|
244
|
-
// `{ m() {} }` → an `ObjectMethod` has `kind: 'method'`, so `Property`'s
|
|
245
|
-
// `node.kind[0] !== 'i'` test sends the raw Babel node to
|
|
246
|
-
// `MethodDefinition`, which reads `node.value.generator`
|
|
247
|
-
// and throws.
|
|
248
|
-
//
|
|
249
|
-
// Patching `Property` rather than `ObjectExpression` keeps the patch small
|
|
250
|
-
// and leaves the indentation-sensitive object serialisation untouched:
|
|
251
|
-
// anything arriving here that is not actually a property node gets
|
|
252
|
-
// re-dispatched on its real type.
|
|
253
|
-
//
|
|
254
|
-
// `Property` and `ObjectProperty` are excluded from re-dispatch because the
|
|
255
|
-
// table aliases `ObjectProperty` to `Property` — re-dispatching either would
|
|
256
|
-
// recurse into this wrapper forever.
|
|
134
|
+
// `ObjectExpression` calls `this.Property(el)` for every element, so a
|
|
135
|
+
// `SpreadElement` or `ObjectMethod` is mis-routed and throws. Re-dispatch
|
|
136
|
+
// non-property nodes on their real type. `Property`/`ObjectProperty` are
|
|
137
|
+
// excluded: the table aliases them, so re-dispatch would recurse forever.
|
|
257
138
|
if (typeof table.Property === 'function' && !table.Property[PATCH_MARKER]) {
|
|
258
139
|
const original = table.Property;
|
|
259
140
|
const PROPERTY_TYPES = new Set(['Property', 'ObjectProperty']);
|
|
@@ -271,9 +152,6 @@ export function install(options = {}) {
|
|
|
271
152
|
applied.push('Property');
|
|
272
153
|
}
|
|
273
154
|
|
|
274
|
-
// ---- Missing handlers: Babel-only node types ----------------------------
|
|
275
|
-
|
|
276
|
-
// `await x` — mirrors upstream's `YieldExpression`.
|
|
277
155
|
add('AwaitExpression', function AwaitExpression(node, state) {
|
|
278
156
|
const output = state.output;
|
|
279
157
|
output.write('await ');
|
|
@@ -281,9 +159,7 @@ export function install(options = {}) {
|
|
|
281
159
|
if (node.argument) this[node.argument.type](node.argument, state);
|
|
282
160
|
});
|
|
283
161
|
|
|
284
|
-
//
|
|
285
|
-
// recorded as its own operator so optional access is not counted as plain
|
|
286
|
-
// member access.
|
|
162
|
+
// `?.` is its own operator, not counted as plain member access.
|
|
287
163
|
add(
|
|
288
164
|
'OptionalMemberExpression',
|
|
289
165
|
function OptionalMemberExpression(node, state) {
|
|
@@ -302,7 +178,6 @@ export function install(options = {}) {
|
|
|
302
178
|
},
|
|
303
179
|
);
|
|
304
180
|
|
|
305
|
-
// `a?.()` — mirrors upstream's `CallExpression`.
|
|
306
181
|
add('OptionalCallExpression', function OptionalCallExpression(node, state) {
|
|
307
182
|
this[node.callee.type](node.callee, state);
|
|
308
183
|
state.output.write('?.');
|
|
@@ -310,24 +185,20 @@ export function install(options = {}) {
|
|
|
310
185
|
ASTUtil().formatSequence(node.arguments ?? [], state, this);
|
|
311
186
|
});
|
|
312
187
|
|
|
313
|
-
//
|
|
314
|
-
// keyword as its own node type; ESTree has no equivalent.
|
|
188
|
+
// Callee of a dynamic `import(...)`; ESTree has no equivalent node.
|
|
315
189
|
add('Import', function Import(_node, state) {
|
|
316
190
|
state.output.write('import');
|
|
317
191
|
state.output.operators.push('import()');
|
|
318
192
|
});
|
|
319
193
|
|
|
320
|
-
// `{ m() {} }` / `{ get m() {} }` — Babel's ObjectMethod.
|
|
321
194
|
add('ObjectMethod', function ObjectMethod(node, state) {
|
|
322
195
|
return this.MethodDefinition(asMethodDefinition(node), state);
|
|
323
196
|
});
|
|
324
197
|
|
|
325
|
-
// `class { m() {} }` — Babel's ClassMethod (ESTree: MethodDefinition).
|
|
326
198
|
add('ClassMethod', function ClassMethod(node, state) {
|
|
327
199
|
return this.MethodDefinition(asMethodDefinition(node), state);
|
|
328
200
|
});
|
|
329
201
|
|
|
330
|
-
// `class { p = 1 }` — Babel's ClassProperty (ESTree: PropertyDefinition).
|
|
331
202
|
const classProperty = function ClassProperty(node, state) {
|
|
332
203
|
const output = state.output;
|
|
333
204
|
if (node.static) {
|
|
@@ -357,14 +228,7 @@ export function install(options = {}) {
|
|
|
357
228
|
}
|
|
358
229
|
|
|
359
230
|
/**
|
|
360
|
-
* `
|
|
361
|
-
* call time — resolving it lazily keeps `install()` free of a second deep
|
|
362
|
-
* import that could fail at module load. Anchored through the syntax plugin
|
|
363
|
-
* for the same reason as {@link resolveSyntaxTable}.
|
|
364
|
-
*
|
|
365
|
-
* `formatSequence` is a pure helper that takes the traveler and state as
|
|
366
|
-
* arguments, so which copy answers is immaterial — but resolving it the same
|
|
367
|
-
* way keeps one rule in this file rather than two.
|
|
231
|
+
* Lazy, so `install()` has no second deep import that could fail at load.
|
|
368
232
|
*
|
|
369
233
|
* @returns {{ formatSequence: Function }}
|
|
370
234
|
*/
|
|
@@ -375,8 +239,3 @@ function ASTUtil() {
|
|
|
375
239
|
);
|
|
376
240
|
return mod?.default ?? mod;
|
|
377
241
|
}
|
|
378
|
-
|
|
379
|
-
// A test that needs to re-run the install against the already-patched table
|
|
380
|
-
// passes `{ memoise: false }` rather than resetting module state — the patches
|
|
381
|
-
// are self-detecting via PATCH_MARKER, so a non-memoised re-run is exactly the
|
|
382
|
-
// idempotency assertion worth making.
|
|
@@ -1,72 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* escomplex-kernel.js —
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* `typhonjs-escomplex` was a thin shell around four packages that do all the
|
|
8
|
-
* actual work. The shell contributed two things: a parser front-end
|
|
9
|
-
* (`@typhonjs/babel-parser`, a ~100-LOC shim over `@babel/parser`) and a
|
|
10
|
-
* generic plugin bus (`typhonjs-plugin-manager`, used as a hardcoded
|
|
11
|
-
* two-plugin synchronous dispatcher). Nine packages of plumbing hang off
|
|
12
|
-
* those two, and none of it computes anything.
|
|
13
|
-
*
|
|
14
|
-
* What this does **not** do is remove `core-js@2`. Four of the retained
|
|
15
|
-
* metric-core packages `require('babel-runtime/core-js/*')` themselves, so it
|
|
16
|
-
* is load-bearing for the code that stays; a change that claimed otherwise
|
|
17
|
-
* would be unshippable. What it buys instead is an honest closure —
|
|
18
|
-
* `babel-runtime` is required by those packages and declared by none of them,
|
|
19
|
-
* so today it resolves only because the removed plumbing hoists it. Declaring
|
|
20
|
-
* it turns an accident into a contract.
|
|
21
|
-
*
|
|
22
|
-
* This module reimplements exactly those two layers over the retained metric
|
|
23
|
-
* core — `typhonjs-escomplex-commons`, `escomplex-plugin-metrics-module`,
|
|
24
|
-
* `escomplex-plugin-syntax-babylon`, `typhonjs-ast-walker` — which compute
|
|
25
|
-
* every score. Nothing here computes a metric; the scores come from the same
|
|
26
|
-
* packages as before, which is why they do not move.
|
|
27
|
-
*
|
|
28
|
-
* ## The equivalence contract
|
|
29
|
-
*
|
|
30
|
-
* Reproducing the displaced shell's *behaviour* means reproducing three
|
|
31
|
-
* details it never documented:
|
|
32
|
-
*
|
|
33
|
-
* 1. **The parser's fixed plugin list**, verbatim and in order, with
|
|
34
|
-
* `sourceType: 'unambiguous'` — see `PARSER_PLUGINS` below. The list is
|
|
35
|
-
* what makes a `.ts` file, a decorator or a pipeline operator parse at
|
|
36
|
-
* all, and `unambiguous` is what lets a CommonJS script and an ES module
|
|
37
|
-
* both score.
|
|
38
|
-
* 2. **Both plugin instances, in registration order** — syntax first, then
|
|
39
|
-
* metrics. The metrics plugin reads trait tables the syntax plugin put on
|
|
40
|
-
* the event.
|
|
41
|
-
* 3. **One mutable event object per dispatch**, threaded through every plugin
|
|
42
|
-
* in turn, with the caller reading the mutations back off it. The displaced
|
|
43
|
-
* bus also stamped `$$plugin_invoke_count` / `$$plugin_invoke_names` onto
|
|
44
|
-
* every event's data; no plugin and no report reads them, so they are not
|
|
45
|
-
* reproduced.
|
|
46
|
-
*
|
|
47
|
-
* Equivalence is not asserted by reasoning: `tests/lib/escomplex-kernel.test.js`
|
|
48
|
-
* replays a corpus captured under the displaced kernel *before* it left the
|
|
49
|
-
* tree (`tests/fixtures/escomplex-kernel-parity/`), because afterwards there is
|
|
50
|
-
* nothing left to compare against.
|
|
51
|
-
*
|
|
52
|
-
* ## The one uncontrolled input
|
|
53
|
-
*
|
|
54
|
-
* `.agents/` materializes into a consumer's repository root, so `@babel/parser`
|
|
55
|
-
* resolves from **their** `node_modules`. The preflight guard checks presence,
|
|
56
|
-
* not range, and `@babel/parser@8` is GA and rejects several names in the
|
|
57
|
-
* fixed plugin list. A manifest range documents the requirement; it does not
|
|
58
|
-
* enforce it. So the resolved major is asserted here, at load, with an error
|
|
59
|
-
* that names the problem — rather than surfacing as an opaque plugin-list
|
|
60
|
-
* syntax error partway through a scan.
|
|
2
|
+
* escomplex-kernel.js — in-repo parse and plugin-dispatch layers over the
|
|
3
|
+
* retained metric core, which computes every score. A parity corpus pins
|
|
4
|
+
* equivalence with the displaced shell. `@babel/parser` resolves from the
|
|
5
|
+
* consumer's tree and v8 rejects the plugin list, so its major is asserted
|
|
6
|
+
* at load.
|
|
61
7
|
*/
|
|
62
8
|
|
|
63
|
-
//
|
|
64
|
-
//
|
|
65
|
-
// runtime-deps-drift.test.js` scans for literal `import`/`require` callees, so
|
|
66
|
-
// a package reached through an aliased `createRequire` would be a runtime
|
|
67
|
-
// dependency that is neither declared nor preflighted. The extensions are
|
|
68
|
-
// mandatory because `typhonjs-escomplex-commons` ships an empty
|
|
69
|
-
// `package.json` — no `main`, no `exports` — so a deep path is the only door.
|
|
9
|
+
// Static `.js` specifiers: the drift test scans literal imports, and
|
|
10
|
+
// `commons` has no `main`/`exports`.
|
|
70
11
|
import { parse as babelParse } from '@babel/parser';
|
|
71
12
|
import PluginMetricsModule from 'escomplex-plugin-metrics-module/dist/PluginMetricsModule.js';
|
|
72
13
|
import PluginSyntaxBabylon from 'escomplex-plugin-syntax-babylon/dist/PluginSyntaxBabylon.js';
|
|
@@ -76,16 +17,7 @@ import ModuleReport from 'typhonjs-escomplex-commons/dist/module/report/ModuleRe
|
|
|
76
17
|
import { install as installAstCompat } from './escomplex-ast-compat.js';
|
|
77
18
|
import { describeParserMajorError } from './runtime-deps/parser-major.js';
|
|
78
19
|
|
|
79
|
-
/**
|
|
80
|
-
* The displaced parser shim's plugin list, verbatim and in order.
|
|
81
|
-
*
|
|
82
|
-
* Order is preserved because it is cheap to preserve, not because a
|
|
83
|
-
* reordering is known to matter. The two entries with options
|
|
84
|
-
* (`decorators`, `pipelineOperator`) carry the shim's exact settings —
|
|
85
|
-
* `decoratorsBeforeExport: false` and the `minimal` pipeline proposal — which
|
|
86
|
-
* decide whether decorated classes and `|>` parse. Re-cloned per parse so a
|
|
87
|
-
* parser that mutated its options could not poison a later call.
|
|
88
|
-
*/
|
|
20
|
+
/** The displaced shim's list, verbatim; cloned per parse. */
|
|
89
21
|
const PARSER_PLUGINS = [
|
|
90
22
|
'asyncGenerators',
|
|
91
23
|
'bigInt',
|
|
@@ -112,21 +44,12 @@ const PARSER_PLUGINS = [
|
|
|
112
44
|
'typescript',
|
|
113
45
|
];
|
|
114
46
|
|
|
115
|
-
/**
|
|
116
|
-
* The two plugins, in registration order: syntax populates the trait tables
|
|
117
|
-
* the metrics plugin then reads. Neither defines `onPluginLoad`, and the
|
|
118
|
-
* displaced bus was constructed without an eventbus, so there is no plugin
|
|
119
|
-
* lifecycle or eventbus coupling to reproduce — only this list.
|
|
120
|
-
*/
|
|
47
|
+
/** Registration order matters: syntax populates what metrics reads. */
|
|
121
48
|
const PLUGINS = [
|
|
122
49
|
['escomplex-plugin-syntax-babylon', new PluginSyntaxBabylon()],
|
|
123
50
|
['escomplex-plugin-metrics-module', new PluginMetricsModule()],
|
|
124
51
|
];
|
|
125
52
|
|
|
126
|
-
// The kernel's code generator predates the Babel AST its own parser emits, so
|
|
127
|
-
// ordinary modern syntax aborts a WHOLE module — see `escomplex-ast-compat.js`
|
|
128
|
-
// for the defect and the upstream status. Installing at the kernel rather than
|
|
129
|
-
// at each caller makes the next scoring entrypoint correct by construction.
|
|
130
53
|
installAstCompat();
|
|
131
54
|
|
|
132
55
|
const parserProblem = describeParserMajorError();
|
|
@@ -135,17 +58,11 @@ if (parserProblem !== null) {
|
|
|
135
58
|
}
|
|
136
59
|
|
|
137
60
|
/**
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
* Reproduces the displaced bus's `invokeSyncEvents` for the degenerate shape
|
|
141
|
-
* this kernel uses: no `copyProps` (the shell passed `void 0` at every call
|
|
142
|
-
* site, so the merge base was always `{}`), no eventbus, and the caller
|
|
143
|
-
* reading its results back off the same mutated `data` object every plugin
|
|
144
|
-
* saw.
|
|
61
|
+
* Both plugins mutate the same `data`.
|
|
145
62
|
*
|
|
146
|
-
* @param {string} method
|
|
147
|
-
* @param {object} passthru
|
|
148
|
-
* @returns {object}
|
|
63
|
+
* @param {string} method
|
|
64
|
+
* @param {object} passthru
|
|
65
|
+
* @returns {object}
|
|
149
66
|
*/
|
|
150
67
|
function dispatch(method, passthru) {
|
|
151
68
|
const event = {
|
|
@@ -164,9 +81,7 @@ function dispatch(method, passthru) {
|
|
|
164
81
|
}
|
|
165
82
|
|
|
166
83
|
/**
|
|
167
|
-
*
|
|
168
|
-
*
|
|
169
|
-
* @param {object|undefined} syntax The trait entry for this node type.
|
|
84
|
+
* @param {object|undefined} syntax
|
|
170
85
|
* @param {object} node
|
|
171
86
|
* @param {object} parent
|
|
172
87
|
* @returns {string[]}
|
|
@@ -178,9 +93,7 @@ function traitIgnoreKeys(syntax, node, parent) {
|
|
|
178
93
|
}
|
|
179
94
|
|
|
180
95
|
/**
|
|
181
|
-
*
|
|
182
|
-
*
|
|
183
|
-
* @param {object|undefined} syntax The trait entry for this node type.
|
|
96
|
+
* @param {object|undefined} syntax
|
|
184
97
|
* @param {object} node
|
|
185
98
|
* @param {object} parent
|
|
186
99
|
* @returns {object|null}
|
|
@@ -191,17 +104,8 @@ function traitNewScope(syntax, node, parent) {
|
|
|
191
104
|
}
|
|
192
105
|
|
|
193
106
|
/**
|
|
194
|
-
*
|
|
195
|
-
*
|
|
196
|
-
* Split out of {@link analyzeModule} so the enter/exit symmetry is readable
|
|
197
|
-
* side by side: each resolves the trait's scope, brackets the `scopeControl`
|
|
198
|
-
* mutation with a pre/post dispatch, and straddles it with the node dispatch
|
|
199
|
-
* in opposite order on the way in and out.
|
|
200
|
-
*
|
|
201
|
-
* The two event shapes are not interchangeable, and the difference is the
|
|
202
|
-
* displaced shell's, not a simplification available here: node events carry
|
|
203
|
-
* `syntaxes` and scope events do not, and a scope event names its scope
|
|
204
|
-
* `newScope` on the way in but `scope` on the way out.
|
|
107
|
+
* Event shapes are the displaced shell's: scope events lack `syntaxes`, and
|
|
108
|
+
* name the scope `newScope` on entry but `scope` on exit.
|
|
205
109
|
*
|
|
206
110
|
* @param {{
|
|
207
111
|
* moduleReport: object,
|
|
@@ -248,16 +152,10 @@ function buildVisitor({ moduleReport, scopeControl, syntaxes, settings }) {
|
|
|
248
152
|
}
|
|
249
153
|
|
|
250
154
|
/**
|
|
251
|
-
*
|
|
252
|
-
*
|
|
253
|
-
*
|
|
254
|
-
*
|
|
255
|
-
* the kernel cannot handle.
|
|
256
|
-
*
|
|
257
|
-
* @param {string} source JavaScript (or TypeScript) source text.
|
|
258
|
-
* @param {object} [options] Passed to the plugins' `onConfigure`, as before.
|
|
259
|
-
* @returns {object} The finalized module report.
|
|
260
|
-
* @throws {SyntaxError} Propagated from the parser, as before.
|
|
155
|
+
* @param {string} source
|
|
156
|
+
* @param {object} [options]
|
|
157
|
+
* @returns {object}
|
|
158
|
+
* @throws {SyntaxError}
|
|
261
159
|
*/
|
|
262
160
|
export function analyzeModule(source, options = {}) {
|
|
263
161
|
const ast = babelParse(source, {
|