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,30 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* runtime-deps/ensure-installed — fail-fast guard for framework runtime deps.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* (Story #3432).
|
|
11
|
-
*
|
|
12
|
-
* Why a side-effect-on-import (rather than a function the entry point calls):
|
|
13
|
-
* ESM evaluates a module's imports in source order, depth-first, *before* the
|
|
14
|
-
* module body runs. A function call in `main()` would therefore execute only
|
|
15
|
-
* after the third-party-importing sibling modules had already been evaluated
|
|
16
|
-
* (and already thrown). By making each target entry point's *first* import a
|
|
17
|
-
* side-effect import of this module, the check runs first and short-circuits a
|
|
18
|
-
* broken install with a clear message.
|
|
19
|
-
*
|
|
20
|
-
* The guard only ever exits when a *required* dependency is genuinely
|
|
21
|
-
* missing. With a healthy install (CI, tests, normal runs) it is a no-op, so
|
|
22
|
-
* it is safe for entry points imported by the test suite. `optionalDependencies`
|
|
23
|
-
* are intentionally not checked — they sit behind graceful-degradation paths.
|
|
24
|
-
*
|
|
25
|
-
* Set `MANDREL_SKIP_DEP_PREFLIGHT=1` to disable the side effect (escape hatch
|
|
26
|
-
* for tooling that imports an entry point in an environment that deliberately
|
|
27
|
-
* lacks the framework deps).
|
|
4
|
+
* Runs on import, deliberately: ESM evaluates imports depth-first before any
|
|
5
|
+
* module body, so only a side-effect import placed first in an entry point
|
|
6
|
+
* can report a broken install before a sibling throws an opaque
|
|
7
|
+
* `ERR_MODULE_NOT_FOUND`. A no-op on a healthy install. `optionalDependencies`
|
|
8
|
+
* are not checked (they degrade gracefully). `MANDREL_SKIP_DEP_PREFLIGHT=1`
|
|
9
|
+
* disables it.
|
|
28
10
|
*/
|
|
29
11
|
|
|
30
12
|
import { createRequire } from 'node:module';
|
|
@@ -36,16 +18,10 @@ import {
|
|
|
36
18
|
import { loadRuntimeDepsManifest } from './manifest.js';
|
|
37
19
|
import { detectPackageManager, formatMissingDepsMessage } from './preflight.js';
|
|
38
20
|
|
|
39
|
-
//
|
|
40
|
-
// upward from `.agents/scripts/lib/runtime-deps/` to the consumer root —
|
|
41
|
-
// exactly the resolution path the framework's third-party imports follow.
|
|
21
|
+
// Resolves from this file upward — the same path the framework's imports take.
|
|
42
22
|
const frameworkRequire = createRequire(import.meta.url);
|
|
43
23
|
|
|
44
24
|
/**
|
|
45
|
-
* Run the dependency-presence check and, on failure, write the remediation
|
|
46
|
-
* message and exit. Seams (`requireResolve`, `cwd`, `stderr`, `exit`,
|
|
47
|
-
* `manifest`) make it fully testable without touching the real process.
|
|
48
|
-
*
|
|
49
25
|
* @param {{
|
|
50
26
|
* requireResolve?: (specifier: string) => string,
|
|
51
27
|
* cwd?: string,
|
|
@@ -66,8 +42,8 @@ export function ensureRuntimeDepsInstalled(opts = {}) {
|
|
|
66
42
|
readVersion,
|
|
67
43
|
} = opts;
|
|
68
44
|
|
|
69
|
-
//
|
|
70
|
-
//
|
|
45
|
+
// An unreadable manifest is a packaging defect the drift test owns; never
|
|
46
|
+
// kill a healthy process over it.
|
|
71
47
|
if (!manifest) return { ok: true, missing: [] };
|
|
72
48
|
|
|
73
49
|
const result = checkRuntimeDeps({
|
|
@@ -84,11 +60,7 @@ export function ensureRuntimeDepsInstalled(opts = {}) {
|
|
|
84
60
|
}
|
|
85
61
|
|
|
86
62
|
/**
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
* Absence is reported first: a package that is not installed cannot have a
|
|
90
|
-
* version, and installing it is the prerequisite for any version complaint
|
|
91
|
-
* being actionable.
|
|
63
|
+
* Absence first: installing is the prerequisite for any version complaint.
|
|
92
64
|
*
|
|
93
65
|
* @param {{ missing: string[], mismatched: {name: string, required: string, resolved: string}[] }} result
|
|
94
66
|
* @param {string} cwd
|
|
@@ -106,9 +78,6 @@ function describeFailure(result, cwd) {
|
|
|
106
78
|
}
|
|
107
79
|
|
|
108
80
|
/**
|
|
109
|
-
* Read a resolved package's version through the framework's own resolution,
|
|
110
|
-
* so the version checked is the one the framework's imports will load.
|
|
111
|
-
*
|
|
112
81
|
* @param {string} name
|
|
113
82
|
* @returns {string | null}
|
|
114
83
|
*/
|
|
@@ -117,9 +86,6 @@ function defaultReadVersion(name) {
|
|
|
117
86
|
}
|
|
118
87
|
|
|
119
88
|
/**
|
|
120
|
-
* Load the manifest, swallowing a read/parse failure to `null` so the guard
|
|
121
|
-
* stays inert on a packaging defect (see `ensureRuntimeDepsInstalled`).
|
|
122
|
-
*
|
|
123
89
|
* @returns {{ required: string[] } | null}
|
|
124
90
|
*/
|
|
125
91
|
function safeLoadManifest() {
|
|
@@ -1,18 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* runtime-deps/manifest —
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* third-party npm packages the framework scripts import at runtime
|
|
6
|
-
* (Story #3432). It ships *inside* `.agents/` so it travels with the
|
|
7
|
-
* `mandrel` package into consumer projects. This module is the only reader of that
|
|
8
|
-
* file — the bootstrap seeder (`project-bootstrap.js`), the preflight guard
|
|
9
|
-
* (`ensure-installed.js`), and the import-vs-manifest drift test all derive
|
|
10
|
-
* their dependency lists from `loadRuntimeDepsManifest()` so there is exactly
|
|
11
|
-
* one place the list lives.
|
|
12
|
-
*
|
|
13
|
-
* The loader stays on Node builtins only (`node:fs`, `node:path`,
|
|
14
|
-
* `node:url`) so it can run inside the preflight guard *before* any
|
|
15
|
-
* third-party package is imported — that is the whole point of the guard.
|
|
2
|
+
* runtime-deps/manifest — the only reader of `.agents/runtime-deps.json`, the
|
|
3
|
+
* SSOT for the framework's runtime npm packages. Builtins only, because the
|
|
4
|
+
* preflight guard loads it before any third-party import.
|
|
16
5
|
*/
|
|
17
6
|
|
|
18
7
|
import fs from 'node:fs';
|
|
@@ -21,30 +10,21 @@ import { fileURLToPath } from 'node:url';
|
|
|
21
10
|
|
|
22
11
|
const HERE = path.dirname(fileURLToPath(import.meta.url));
|
|
23
12
|
|
|
24
|
-
/**
|
|
25
|
-
* Absolute path to the vendored manifest. `HERE` is
|
|
26
|
-
* `.agents/scripts/lib/runtime-deps/`; the manifest sits at the `.agents/`
|
|
27
|
-
* root, three directories up.
|
|
28
|
-
*/
|
|
29
13
|
const MANIFEST_PATH = path.resolve(HERE, '..', '..', '..', 'runtime-deps.json');
|
|
30
14
|
|
|
31
15
|
/**
|
|
32
16
|
* @typedef {object} RuntimeDepsManifest
|
|
33
|
-
* @property {Record<string,string>} dependencies — required
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
* @property {string[]}
|
|
38
|
-
* @property {string[]} optional — `Object.keys(optionalDependencies)`.
|
|
17
|
+
* @property {Record<string,string>} dependencies — required; preflight-enforced.
|
|
18
|
+
* @property {Record<string,string>} optionalDependencies — graceful-degradation
|
|
19
|
+
* imports; never preflight-blocked.
|
|
20
|
+
* @property {string[]} required
|
|
21
|
+
* @property {string[]} optional
|
|
39
22
|
* @property {Set<string>} declared — union of required + optional names.
|
|
40
23
|
*/
|
|
41
24
|
|
|
42
25
|
/**
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
* Throws a clear `Error` when the file is missing or malformed so the
|
|
46
|
-
* drift test and bootstrap seeder fail loudly on a packaging regression,
|
|
47
|
-
* rather than silently treating the dependency set as empty.
|
|
26
|
+
* Throws on a missing or malformed file rather than yielding an empty set,
|
|
27
|
+
* so a packaging regression fails loudly.
|
|
48
28
|
*
|
|
49
29
|
* @param {string} [manifestPath=MANIFEST_PATH]
|
|
50
30
|
* @returns {RuntimeDepsManifest}
|
|
@@ -1,17 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* runtime-deps/parser-major —
|
|
3
|
-
* kernel can
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* `mandrel doctor` reports it to a consumer. Importing the kernel into doctor
|
|
8
|
-
* to ask one version question would pull the whole metric core and install the
|
|
9
|
-
* AST compatibility patch as a side effect.
|
|
10
|
-
*
|
|
11
|
-
* `.agents/` materializes into the consumer's repository root, so
|
|
12
|
-
* `@babel/parser` resolves from *their* `node_modules`. A range in
|
|
13
|
-
* `runtime-deps.json` documents the requirement; it cannot enforce it. This is
|
|
14
|
-
* the enforcement.
|
|
2
|
+
* runtime-deps/parser-major — whether the resolved `@babel/parser` major is
|
|
3
|
+
* one the complexity kernel can parse with. Separate so `mandrel doctor` can
|
|
4
|
+
* ask without importing the kernel (and its AST patch side effect). The
|
|
5
|
+
* parser resolves from the consumer's tree, so this is the enforcement of the
|
|
6
|
+
* declared range.
|
|
15
7
|
*
|
|
16
8
|
* @module lib/runtime-deps/parser-major
|
|
17
9
|
*/
|
|
@@ -19,36 +11,20 @@
|
|
|
19
11
|
import fs from 'node:fs';
|
|
20
12
|
import { createRequire } from 'node:module';
|
|
21
13
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
*
|
|
25
|
-
* Module-local, with `describeParserMajorError` as the single public door:
|
|
26
|
-
* every caller wants the verdict and the remedy, not the number.
|
|
27
|
-
*
|
|
28
|
-
* 8.x removed several plugin names from the kernel's fixed list (they became
|
|
29
|
-
* default syntax), so it does not merely warn — it throws on the plugin list
|
|
30
|
-
* itself. Adopting it is a deliberate change with a baseline recut attached,
|
|
31
|
-
* not something to absorb from a consumer's resolution.
|
|
32
|
-
*/
|
|
14
|
+
// 8.x throws on the kernel's fixed plugin list; adopting it is a deliberate
|
|
15
|
+
// change with a baseline recut, not something to absorb from a consumer.
|
|
33
16
|
const SUPPORTED_PARSER_MAJOR = 7;
|
|
34
17
|
|
|
35
|
-
/** Package whose resolved major gates the kernel. */
|
|
36
18
|
const PARSER_PACKAGE = '@babel/parser';
|
|
37
19
|
|
|
38
|
-
/** Memoised
|
|
20
|
+
/** Memoised: `undefined` unread, `null` unresolvable. */
|
|
39
21
|
let parserVersion;
|
|
40
22
|
|
|
41
23
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* The package exports no version, so its `package.json` is the only source.
|
|
45
|
-
* This is the one non-static resolution in the file and it deliberately
|
|
46
|
-
* targets a manifest rather than code: `@babel/parser` itself is reached by a
|
|
47
|
-
* static import above, so it is declared and preflighted like every other
|
|
48
|
-
* dependency.
|
|
24
|
+
* The package exports no version, so its manifest is the only source.
|
|
49
25
|
*
|
|
50
26
|
* @returns {string|null} The resolved version, or `null` when the manifest
|
|
51
|
-
* cannot be read
|
|
27
|
+
* cannot be read.
|
|
52
28
|
*/
|
|
53
29
|
function resolveParserVersion() {
|
|
54
30
|
if (parserVersion !== undefined) return parserVersion;
|
|
@@ -64,10 +40,7 @@ function resolveParserVersion() {
|
|
|
64
40
|
}
|
|
65
41
|
|
|
66
42
|
/**
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
* @returns {number|null} `null` when the version could not be resolved or
|
|
70
|
-
* does not lead with an integer.
|
|
43
|
+
* @returns {number|null}
|
|
71
44
|
*/
|
|
72
45
|
function resolveParserMajor() {
|
|
73
46
|
const version = resolveParserVersion();
|
|
@@ -77,21 +50,12 @@ function resolveParserMajor() {
|
|
|
77
50
|
}
|
|
78
51
|
|
|
79
52
|
/**
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
* (`runtime-deps/ensure-installed.js`) emit the *same* named, actionable
|
|
84
|
-
* message — the point of AC-5 is that a consumer never meets this as a
|
|
85
|
-
* plugin-list syntax error mid-scan.
|
|
86
|
-
*
|
|
87
|
-
* An unresolvable version is **not** a problem: a consumer layout that hides
|
|
88
|
-
* the manifest still resolves the parser itself, and refusing to score would
|
|
89
|
-
* be a worse answer than scoring with an unverified parser. Only a
|
|
90
|
-
* *known-wrong* major is reported.
|
|
53
|
+
* One message shared by the kernel's load-time assertion and the preflight
|
|
54
|
+
* guard. An unknowable version is not reported — scoring with an unverified
|
|
55
|
+
* parser beats refusing to score; only a known-wrong major is.
|
|
91
56
|
*
|
|
92
57
|
* @param {{major?: number|null, version?: string|null}} [resolved] Overrides
|
|
93
|
-
* the resolved parser
|
|
94
|
-
* would read is assertable without installing one.
|
|
58
|
+
* the resolved parser (test seam).
|
|
95
59
|
* @returns {string|null} The message, or `null` when the resolved parser is
|
|
96
60
|
* supported (or its version is unknowable).
|
|
97
61
|
*/
|
|
@@ -1,28 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* runtime-deps/preflight — pure helpers for the dependency
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* The check itself moved to `dep-resolution.js`, which owns resolving a
|
|
6
|
-
* declared dependency, judging its major, and explaining a mismatch. What is
|
|
7
|
-
* left here holds no side effects and stays unit-testable in isolation:
|
|
8
|
-
* `detectPackageManager` takes an injected `exists` seam and
|
|
9
|
-
* `formatMissingDepsMessage` is a pure string builder. The side-effecting
|
|
10
|
-
* guard that wires them to the real process lives in `ensure-installed.js`.
|
|
11
|
-
*
|
|
12
|
-
* Builtins only — this module runs *before* any third-party package is
|
|
13
|
-
* imported, so importing a third-party here would defeat its own purpose.
|
|
2
|
+
* runtime-deps/preflight — pure messaging helpers for the dependency check.
|
|
3
|
+
* Builtins only: it runs before any third-party package is imported.
|
|
14
4
|
*/
|
|
15
5
|
|
|
16
6
|
import fs from 'node:fs';
|
|
17
7
|
import { detectPackageManager as detectPm } from '../detect-package-manager.js';
|
|
18
8
|
|
|
19
9
|
/**
|
|
20
|
-
*
|
|
21
|
-
* remediation message names the right install command. Defaults to `npm`.
|
|
22
|
-
*
|
|
23
|
-
* Delegates to the shared `detectPackageManager` helper
|
|
24
|
-
* (Story #4048 B3 — one implementation per concept). The `exists` seam
|
|
25
|
-
* is forwarded directly; `null` (no manifest) coerces to `'npm'`.
|
|
10
|
+
* Lockfile-based, so the message names the right install command.
|
|
26
11
|
*
|
|
27
12
|
* @param {string} root
|
|
28
13
|
* @param {(p: string) => boolean} [exists=fs.existsSync]
|
|
@@ -32,7 +17,6 @@ export function detectPackageManager(root, exists = fs.existsSync) {
|
|
|
32
17
|
return detectPm(root, exists) ?? 'npm';
|
|
33
18
|
}
|
|
34
19
|
|
|
35
|
-
/** Map a detected package manager to its install command. */
|
|
36
20
|
function installCommand(packageManager) {
|
|
37
21
|
if (packageManager === 'pnpm') return 'pnpm install';
|
|
38
22
|
if (packageManager === 'yarn') return 'yarn install';
|
|
@@ -40,9 +24,7 @@ function installCommand(packageManager) {
|
|
|
40
24
|
}
|
|
41
25
|
|
|
42
26
|
/**
|
|
43
|
-
*
|
|
44
|
-
* the consumer's install command. This is what replaces the opaque raw
|
|
45
|
-
* `ERR_MODULE_NOT_FOUND` stack trace.
|
|
27
|
+
* Replaces the opaque `ERR_MODULE_NOT_FOUND` stack with an actionable message.
|
|
46
28
|
*
|
|
47
29
|
* @param {string[]} missing
|
|
48
30
|
* @param {{ root: string, packageManager: 'pnpm'|'yarn'|'npm' }} opts
|
|
@@ -1,26 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* runtime-deps/scan-imports — extract third-party package imports
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* assert each one is declared in `.agents/runtime-deps.json`.
|
|
8
|
-
*
|
|
9
|
-
* Robustness is the whole game here. A naive `from ['"]...['"]` regex also
|
|
10
|
-
* matches prose inside strings and comments (e.g. a log line containing the
|
|
11
|
-
* word "from 'x'"), which would invent phantom dependencies. Two guards
|
|
12
|
-
* prevent that:
|
|
13
|
-
*
|
|
14
|
-
* 1. Static `import` / `export … from` matches are anchored to the start
|
|
15
|
-
* of a line — a real import statement begins the line; prose inside a
|
|
16
|
-
* template literal does not.
|
|
17
|
-
* 2. Every extracted specifier's *top-level* package name is validated
|
|
18
|
-
* against the npm package-name grammar. Names with spaces, uppercase,
|
|
19
|
-
* or stray punctuation (i.e. accidental prose captures) are rejected.
|
|
20
|
-
*
|
|
21
|
-
* Node builtins (`node:fs`, `path`, …) and relative/absolute specifiers are
|
|
22
|
-
* excluded. Subpath specifiers (`ajv/dist/2020.js`, `@scope/pkg/sub`) are
|
|
23
|
-
* collapsed to their installable top-level name (`ajv`, `@scope/pkg`).
|
|
2
|
+
* runtime-deps/scan-imports — extract third-party top-level package imports
|
|
3
|
+
* from source, for the import-vs-manifest drift test. To avoid inventing
|
|
4
|
+
* phantom deps from prose, comments are stripped, static imports must start
|
|
5
|
+
* a line, and every name must match the npm package-name grammar. Subpaths
|
|
6
|
+
* collapse to their installable name.
|
|
24
7
|
*/
|
|
25
8
|
|
|
26
9
|
import fs from 'node:fs';
|
|
@@ -28,21 +11,15 @@ import { builtinModules } from 'node:module';
|
|
|
28
11
|
import path from 'node:path';
|
|
29
12
|
import { stripJsComments } from '../source-text/strip-js-comments.js';
|
|
30
13
|
|
|
31
|
-
/** Node builtins, with and without the `node:` prefix. */
|
|
32
14
|
const BUILTIN_MODULES = new Set([
|
|
33
15
|
...builtinModules,
|
|
34
16
|
...builtinModules.map((m) => `node:${m}`),
|
|
35
17
|
]);
|
|
36
18
|
|
|
37
|
-
|
|
38
|
-
* npm package-name grammar (top-level, optionally scoped). Lowercase,
|
|
39
|
-
* digits, and a small punctuation set only — deliberately strict so that
|
|
40
|
-
* accidental prose captures are rejected.
|
|
41
|
-
*/
|
|
19
|
+
// Deliberately strict so accidental prose captures are rejected.
|
|
42
20
|
const PACKAGE_NAME = /^(?:@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/;
|
|
43
21
|
|
|
44
22
|
/**
|
|
45
|
-
* Collapse an import specifier to its installable top-level package name.
|
|
46
23
|
* `@scope/pkg/sub` → `@scope/pkg`; `pkg/sub` → `pkg`.
|
|
47
24
|
*
|
|
48
25
|
* @param {string} specifier
|
|
@@ -55,8 +32,6 @@ export function toTopLevelPackage(specifier) {
|
|
|
55
32
|
}
|
|
56
33
|
|
|
57
34
|
/**
|
|
58
|
-
* True when `name` is a syntactically valid npm package name.
|
|
59
|
-
*
|
|
60
35
|
* @param {string} name
|
|
61
36
|
* @returns {boolean}
|
|
62
37
|
*/
|
|
@@ -64,27 +39,19 @@ export function isValidPackageName(name) {
|
|
|
64
39
|
return typeof name === 'string' && PACKAGE_NAME.test(name);
|
|
65
40
|
}
|
|
66
41
|
|
|
67
|
-
// Anchored static import / re-export: the statement must start the line.
|
|
68
42
|
const STATIC_FROM =
|
|
69
43
|
/^\s*(?:import|export)\b[^\n;]*?\bfrom\s*['"]([^'"]+)['"]/gm;
|
|
70
|
-
// Anchored side-effect import at line start.
|
|
71
44
|
const SIDE_EFFECT = /^\s*import\s*['"]([^'"]+)['"]/gm;
|
|
72
45
|
// `require(...)` and dynamic `import(...)` may appear mid-expression.
|
|
73
46
|
const CALL_FORM = /\b(?:require|import)\s*\(\s*['"]([^'"]+)['"]/g;
|
|
74
|
-
//
|
|
75
|
-
//
|
|
76
|
-
// under a different name, so calls through it are real runtime imports that
|
|
77
|
-
// `CALL_FORM` cannot see — it matches the literal callees `require`/`import`.
|
|
78
|
-
// A module reached only that way would be an undeclared, unpreflighted
|
|
79
|
-
// dependency that this scanner reported as absent.
|
|
47
|
+
// A `createRequire(...)` binding is a require under another name; calls
|
|
48
|
+
// through it are real imports CALL_FORM cannot see.
|
|
80
49
|
const REQUIRE_ALIAS =
|
|
81
50
|
/(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*createRequire\s*\(/g;
|
|
82
51
|
|
|
83
52
|
/**
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
* Returns `null` when the source binds none, so the common case adds no pass.
|
|
87
|
-
* Aliases named `require` need no entry — `CALL_FORM` already covers them.
|
|
53
|
+
* `null` when the source binds no alias (aliases named `require` are already
|
|
54
|
+
* covered).
|
|
88
55
|
*
|
|
89
56
|
* @param {string} cleaned Comment-stripped source.
|
|
90
57
|
* @returns {RegExp|null}
|
|
@@ -105,9 +72,6 @@ function aliasedRequireMatcher(cleaned) {
|
|
|
105
72
|
}
|
|
106
73
|
|
|
107
74
|
/**
|
|
108
|
-
* The specifier patterns to run over one source: the three fixed forms, plus
|
|
109
|
-
* an alias matcher when the source binds a `createRequire` result.
|
|
110
|
-
*
|
|
111
75
|
* @param {string} cleaned Comment-stripped source.
|
|
112
76
|
* @returns {RegExp[]}
|
|
113
77
|
*/
|
|
@@ -118,9 +82,6 @@ function specifierMatchers(cleaned) {
|
|
|
118
82
|
}
|
|
119
83
|
|
|
120
84
|
/**
|
|
121
|
-
* Extract the set of third-party top-level package names imported by a
|
|
122
|
-
* single source string.
|
|
123
|
-
*
|
|
124
85
|
* @param {string} source
|
|
125
86
|
* @returns {Set<string>}
|
|
126
87
|
*/
|
|
@@ -132,7 +93,7 @@ export function extractThirdPartyImports(source) {
|
|
|
132
93
|
let match = re.exec(cleaned);
|
|
133
94
|
while (match !== null) {
|
|
134
95
|
const specifier = match[1];
|
|
135
|
-
// Advance
|
|
96
|
+
// Advance first so every `continue` below is safe.
|
|
136
97
|
match = re.exec(cleaned);
|
|
137
98
|
if (
|
|
138
99
|
specifier.startsWith('.') ||
|
|
@@ -152,8 +113,6 @@ export function extractThirdPartyImports(source) {
|
|
|
152
113
|
}
|
|
153
114
|
|
|
154
115
|
/**
|
|
155
|
-
* Recursively collect every `.js` file under `dir`.
|
|
156
|
-
*
|
|
157
116
|
* @param {string} dir
|
|
158
117
|
* @returns {string[]}
|
|
159
118
|
*/
|
|
@@ -171,9 +130,6 @@ export function listJsFiles(dir) {
|
|
|
171
130
|
}
|
|
172
131
|
|
|
173
132
|
/**
|
|
174
|
-
* Scan every `.js` file under `dir` and map each third-party top-level
|
|
175
|
-
* package to the (relative) files that import it.
|
|
176
|
-
*
|
|
177
133
|
* @param {string} dir — directory root to scan (e.g. `.agents/scripts`).
|
|
178
134
|
* @returns {{ packages: Set<string>, byPackage: Map<string, string[]> }}
|
|
179
135
|
*/
|
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* detectors/common.js — shared
|
|
3
|
-
*
|
|
4
|
-
* Hoisted out of the detector modules (retry, rework) plus
|
|
5
|
-
* the since-deleted `signals/read.js`, and `signals/schema.js`, all of which shipped
|
|
6
|
-
* byte-equivalent copies of these predicates. See Story #2464.
|
|
2
|
+
* detectors/common.js — shared predicates for the signals layer.
|
|
7
3
|
*/
|
|
8
4
|
|
|
9
5
|
/**
|
|
10
|
-
*
|
|
11
|
-
* signal writer and reader as the canonical numeric-id guard.
|
|
6
|
+
* The canonical numeric-id guard for signal writers and readers.
|
|
12
7
|
*
|
|
13
8
|
* @param {unknown} v
|
|
14
9
|
* @returns {boolean}
|
|
@@ -18,9 +13,7 @@ export function isPositiveInt(v) {
|
|
|
18
13
|
}
|
|
19
14
|
|
|
20
15
|
/**
|
|
21
|
-
*
|
|
22
|
-
* into `emitter.tool` (canonical provenance) and, defensively, into
|
|
23
|
-
* `details.tool` — we accept either.
|
|
16
|
+
* `emitter.tool` is canonical; `details.tool` is accepted defensively.
|
|
24
17
|
*
|
|
25
18
|
* @param {object} rec
|
|
26
19
|
* @returns {string|null}
|
|
@@ -36,35 +29,17 @@ export function extractTool(rec) {
|
|
|
36
29
|
}
|
|
37
30
|
|
|
38
31
|
/**
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
* `
|
|
42
|
-
*
|
|
43
|
-
* function-type `TypeError`, the positive-integer `RangeError`s for the id
|
|
44
|
-
* fields, the non-empty-string `tracesPath` check, and the
|
|
45
|
-
* non-negative-integer `threshold` check. Story #4077 hoists that preamble
|
|
46
|
-
* here so the detectors share one error-message contract.
|
|
47
|
-
*
|
|
48
|
-
* Error wording stays per-detector-accurate by prefixing every message with
|
|
49
|
-
* `fnName` (e.g. `detectRework: …`). Error *types* are preserved exactly:
|
|
50
|
-
* the `args`/`tracesPath`/`nowFn` guards throw `TypeError`; the id and
|
|
51
|
-
* `threshold` guards throw `RangeError`.
|
|
52
|
-
*
|
|
53
|
-
* The validated fields are gated by the `require*` flags so the same helper
|
|
54
|
-
* serves both the Story-scoped detectors (rework/retry — full preamble) and
|
|
55
|
-
* the Epic-scoped hotspot detector (only `epicId` + `nowFn`). A field that
|
|
56
|
-
* is not required is neither validated nor read.
|
|
32
|
+
* Shared detector argument guard. Messages are prefixed with `fnName`;
|
|
33
|
+
* shape/`tracesPath`/`nowFn` failures throw `TypeError`, id and `threshold`
|
|
34
|
+
* failures `RangeError`. A field whose `require*` flag is off is neither
|
|
35
|
+
* validated nor returned.
|
|
57
36
|
*
|
|
58
37
|
* @param {object} args — the detector's raw argument object.
|
|
59
38
|
* @param {object} opts
|
|
60
|
-
* @param {string} opts.fnName —
|
|
61
|
-
*
|
|
62
|
-
* @param {boolean} [opts.
|
|
63
|
-
*
|
|
64
|
-
* @param {boolean} [opts.requireStoryId=true] — validate + return `storyId`
|
|
65
|
-
* (positive integer) and the optional `taskId` (positive integer or null).
|
|
66
|
-
* @param {boolean} [opts.requireThreshold=true] — validate + return
|
|
67
|
-
* `threshold` (non-negative integer).
|
|
39
|
+
* @param {string} opts.fnName — error-message prefix (e.g. `'detectRework'`).
|
|
40
|
+
* @param {boolean} [opts.requireTracesPath=true]
|
|
41
|
+
* @param {boolean} [opts.requireStoryId=true] — also gates the optional `taskId`.
|
|
42
|
+
* @param {boolean} [opts.requireThreshold=true]
|
|
68
43
|
* @returns {{
|
|
69
44
|
* tracesPath: string|undefined,
|
|
70
45
|
* epicId: number,
|
|
@@ -72,8 +47,7 @@ export function extractTool(rec) {
|
|
|
72
47
|
* taskId: number|null|undefined,
|
|
73
48
|
* threshold: number|undefined,
|
|
74
49
|
* nowFn: () => string,
|
|
75
|
-
* }}
|
|
76
|
-
* omitted (left `undefined`).
|
|
50
|
+
* }}
|
|
77
51
|
*/
|
|
78
52
|
export function validateDetectorArgs(args, opts) {
|
|
79
53
|
const { fnName } = opts;
|
|
@@ -1,23 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `lib/signals/` barrel
|
|
3
|
-
*
|
|
4
|
-
* Consumers do `import { schema, appendSignal } from './lib/signals/index.js'`
|
|
5
|
-
* (or `import * as signals from './lib/signals/index.js'`) so a future
|
|
6
|
-
* shape migration only has to touch this file.
|
|
7
|
-
*
|
|
8
|
-
* History:
|
|
9
|
-
* - Epic #1181 / Story #1438 / Task #1459 — initial barrel with `read`
|
|
10
|
-
* + `schema`; `buildSpanTree` was a throwing placeholder.
|
|
11
|
-
* - Epic #1181 / Story #1440 / Task #1461 — placeholder replaced by
|
|
12
|
-
* the real span-tree builder.
|
|
13
|
-
* - Story #1476 — `appendSignal` / `appendTrace` re-exported here
|
|
14
|
-
* via `./write.js` so the gate scripts (and any
|
|
15
|
-
* new code) converge on `lib/signals/` instead of importing the
|
|
16
|
-
* writer directly from `lib/observability/`.
|
|
17
|
-
* - Story #5003 — the reader half (`read`, `buildSpanTree`) went with the
|
|
18
|
-
* debug viewer that consumed it: it walked a `run-<id>/` layout no v2
|
|
19
|
-
* writer populates. `appendTrace` went with the trace hook, its only
|
|
20
|
-
* producer. What remains is the live write surface.
|
|
2
|
+
* `lib/signals/` barrel — the one import point, so a shape migration touches
|
|
3
|
+
* only this file.
|
|
21
4
|
*
|
|
22
5
|
* @module lib/signals
|
|
23
6
|
*/
|