mandrel 2.60.0 → 2.62.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/README.md +10 -10
- package/.agents/agents/story-worker.md +1 -1
- package/.agents/docs/agentrc-reference.json +4 -82
- package/.agents/docs/configuration.md +20 -87
- package/.agents/docs/workflows.md +1 -1
- package/.agents/instructions.md +1 -3
- package/.agents/rules/gherkin-standards.md +4 -0
- package/.agents/schemas/agentrc.schema.json +11 -486
- package/.agents/schemas/story-deliver-terminal.schema.json +10 -0
- package/.agents/schemas/validation-evidence.schema.json +2 -1
- package/.agents/scripts/README.md +14 -14
- package/.agents/scripts/acceptance-eval.js +32 -164
- package/.agents/scripts/agents-bootstrap-github.js +27 -129
- package/.agents/scripts/apply-quality-bootstrap.js +4 -40
- package/.agents/scripts/audit-baselines.js +6 -27
- package/.agents/scripts/audit-labels-bootstrap.js +5 -29
- package/.agents/scripts/audit-to-stories.js +91 -361
- package/.agents/scripts/boot-sweep.js +19 -72
- package/.agents/scripts/bootstrap.js +74 -395
- package/.agents/scripts/ceremony-derive.js +9 -45
- package/.agents/scripts/check-arch-cycles.js +14 -64
- package/.agents/scripts/check-baselines.js +8 -48
- package/.agents/scripts/check-context-budget.js +46 -172
- package/.agents/scripts/check-cyclomatic.js +12 -44
- package/.agents/scripts/check-dead-exports.js +13 -64
- package/.agents/scripts/check-doc-links.js +38 -186
- package/.agents/scripts/check-gherkin-corpus.js +24 -127
- package/.agents/scripts/check-test-temp-hygiene.js +28 -169
- package/.agents/scripts/coverage-capture.js +32 -99
- package/.agents/scripts/deliver-light.js +14 -101
- package/.agents/scripts/deliver-recover.js +6 -42
- package/.agents/scripts/deliver-run.js +36 -133
- package/.agents/scripts/diagnose-friction.js +24 -116
- package/.agents/scripts/drain-pending-cleanup.js +1 -1
- package/.agents/scripts/evidence-gate.js +23 -85
- package/.agents/scripts/file-ci-gap.js +10 -50
- package/.agents/scripts/generate-config-docs.js +30 -170
- package/.agents/scripts/generate-lens-checklists.js +8 -52
- package/.agents/scripts/generate-skills-index.js +14 -112
- package/.agents/scripts/generate-workflows-doc.js +10 -70
- package/.agents/scripts/git-cleanup.js +2 -34
- package/.agents/scripts/lib/Graph.js +24 -81
- package/.agents/scripts/lib/ITicketingProvider.js +47 -143
- package/.agents/scripts/lib/Logger.js +14 -76
- package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
- package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
- package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
- package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
- package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
- package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
- package/.agents/scripts/lib/audit-baselines/read.js +3 -16
- package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
- package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
- package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
- package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
- package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
- package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
- package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
- package/.agents/scripts/lib/audit-suite/findings.js +12 -52
- package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
- package/.agents/scripts/lib/audit-suite/index.js +1 -15
- package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
- package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
- package/.agents/scripts/lib/audit-suite/runner.js +13 -43
- package/.agents/scripts/lib/audit-suite/selector.js +49 -349
- package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
- package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
- package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
- package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
- package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
- package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
- package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
- package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
- package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
- package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
- package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
- package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
- package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
- package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
- package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
- package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
- package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
- package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
- package/.agents/scripts/lib/baseline-loader.js +12 -51
- package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
- package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
- package/.agents/scripts/lib/baselines/components.js +10 -61
- package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
- package/.agents/scripts/lib/baselines/crap-preview-incremental.js +5 -21
- package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
- package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
- package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
- package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
- package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
- package/.agents/scripts/lib/baselines/envelope.js +13 -129
- package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
- package/.agents/scripts/lib/baselines/git-base.js +23 -142
- package/.agents/scripts/lib/baselines/kernel.js +11 -111
- package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
- package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
- package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
- package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
- package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
- package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
- package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
- package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
- package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
- package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
- package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
- package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
- package/.agents/scripts/lib/baselines/path-canon.js +19 -128
- package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
- package/.agents/scripts/lib/baselines/reader.js +14 -107
- package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
- package/.agents/scripts/lib/baselines/scope.js +11 -135
- package/.agents/scripts/lib/baselines/writer.js +16 -149
- package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
- package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
- package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
- package/.agents/scripts/lib/bdd-step-index.js +26 -100
- package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
- package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
- package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
- package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
- package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
- package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
- package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
- package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
- package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
- package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
- package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
- package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
- package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
- package/.agents/scripts/lib/bootstrap/summary.js +1 -8
- package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
- package/.agents/scripts/lib/branch-name-guard.js +4 -23
- package/.agents/scripts/lib/changed-files.js +31 -143
- package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
- package/.agents/scripts/lib/checks/index.js +18 -101
- package/.agents/scripts/lib/checks/loop-health.js +11 -53
- package/.agents/scripts/lib/checks/state.js +16 -91
- package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
- package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
- package/.agents/scripts/lib/child-exec.js +39 -108
- package/.agents/scripts/lib/cli/standard-args.js +9 -116
- package/.agents/scripts/lib/cli-args.js +31 -146
- package/.agents/scripts/lib/cli-usage.js +5 -27
- package/.agents/scripts/lib/cli-utils.js +2 -12
- package/.agents/scripts/lib/close-validation/commands.js +13 -76
- package/.agents/scripts/lib/close-validation/gates.js +92 -331
- package/.agents/scripts/lib/close-validation/process.js +121 -151
- package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
- package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
- package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
- package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
- package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
- package/.agents/scripts/lib/close-validation/runner.js +53 -110
- package/.agents/scripts/lib/command-header.js +6 -28
- package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
- package/.agents/scripts/lib/config/baselines.js +3 -14
- package/.agents/scripts/lib/config/ci.js +8 -38
- package/.agents/scripts/lib/config/commands.js +1 -15
- package/.agents/scripts/lib/config/defaults.js +4 -33
- package/.agents/scripts/lib/config/delivery-routing.js +6 -35
- package/.agents/scripts/lib/config/explain.js +9 -80
- package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
- package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +2 -30
- package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
- package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
- package/.agents/scripts/lib/config/gates/index.js +2 -17
- package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
- package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
- package/.agents/scripts/lib/config/gates/shared.js +4 -64
- package/.agents/scripts/lib/config/github.js +4 -22
- package/.agents/scripts/lib/config/limits.js +4 -57
- package/.agents/scripts/lib/config/paths.js +2 -21
- package/.agents/scripts/lib/config/qa.js +4 -38
- package/.agents/scripts/lib/config/quality.js +76 -432
- package/.agents/scripts/lib/config/runners.js +12 -56
- package/.agents/scripts/lib/config/runtime.js +13 -57
- package/.agents/scripts/lib/config/shared.js +2 -16
- package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
- package/.agents/scripts/lib/config/temp-paths.js +40 -280
- package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
- package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
- package/.agents/scripts/lib/config-resolver.js +10 -52
- package/.agents/scripts/lib/config-schema-shared.js +1 -4
- package/.agents/scripts/lib/config-settings-schema-delivery.js +12 -294
- package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
- package/.agents/scripts/lib/config-settings-schema.js +37 -274
- package/.agents/scripts/lib/coverage-baseline.js +20 -110
- package/.agents/scripts/lib/coverage-capture-fullscope.js +12 -37
- package/.agents/scripts/lib/coverage-capture-incremental.js +12 -43
- package/.agents/scripts/lib/coverage-capture-usage.js +4 -24
- package/.agents/scripts/lib/coverage-capture.js +99 -224
- package/.agents/scripts/lib/coverage-utils.js +14 -79
- package/.agents/scripts/lib/cpu-pool.js +17 -123
- package/.agents/scripts/lib/crap-baseline-join.js +16 -88
- package/.agents/scripts/lib/crap-coordinates.js +6 -25
- package/.agents/scripts/lib/crap-engine.js +40 -153
- package/.agents/scripts/lib/crap-method-identity.js +16 -78
- package/.agents/scripts/lib/crap-utils.js +31 -155
- package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
- package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
- package/.agents/scripts/lib/dead-exports-knip.js +18 -56
- package/.agents/scripts/lib/dead-exports-mode.js +5 -24
- package/.agents/scripts/lib/degraded-mode.js +3 -26
- package/.agents/scripts/lib/dependency-parser.js +8 -40
- package/.agents/scripts/lib/dependency-version.js +13 -35
- package/.agents/scripts/lib/detect-package-manager.js +6 -36
- package/.agents/scripts/lib/doc-tiers.js +22 -126
- package/.agents/scripts/lib/duplicate-search.js +8 -72
- package/.agents/scripts/lib/env-loader.js +5 -27
- package/.agents/scripts/lib/error-redactor.js +6 -31
- package/.agents/scripts/lib/errors/index.js +2 -22
- package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
- package/.agents/scripts/lib/escomplex-kernel.js +21 -123
- package/.agents/scripts/lib/feedback-loop/graduator-core.js +93 -419
- package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
- package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -151
- package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
- package/.agents/scripts/lib/findings/classify-finding.js +14 -69
- package/.agents/scripts/lib/findings/promote-finding.js +14 -112
- package/.agents/scripts/lib/findings/provenance-field.js +11 -52
- package/.agents/scripts/lib/findings/route-finding.js +37 -255
- package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
- package/.agents/scripts/lib/findings/severity.js +18 -104
- package/.agents/scripts/lib/format-generated-json.js +12 -44
- package/.agents/scripts/lib/full-suite-lock.js +160 -429
- package/.agents/scripts/lib/full-suite-queue.js +213 -0
- package/.agents/scripts/lib/gates/baseline-store.js +5 -9
- package/.agents/scripts/lib/gates/friction.js +1 -3
- package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
- package/.agents/scripts/lib/gh-exec.js +31 -259
- package/.agents/scripts/lib/git/cached-fetch.js +9 -52
- package/.agents/scripts/lib/git/sync-from-base.js +15 -107
- package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
- package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
- package/.agents/scripts/lib/git-utils.js +37 -161
- package/.agents/scripts/lib/github/framework-repo.js +8 -71
- package/.agents/scripts/lib/github-url.js +2 -17
- package/.agents/scripts/lib/import-graph.js +11 -38
- package/.agents/scripts/lib/install-cmd-parser.js +4 -13
- package/.agents/scripts/lib/json-utils.js +3 -18
- package/.agents/scripts/lib/label-constants.js +16 -111
- package/.agents/scripts/lib/label-taxonomy.js +4 -30
- package/.agents/scripts/lib/maintainability-engine.js +12 -80
- package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
- package/.agents/scripts/lib/maintainability-utils.js +16 -92
- package/.agents/scripts/lib/mandrel-catalog.js +12 -70
- package/.agents/scripts/lib/notifications/notifier.js +13 -38
- package/.agents/scripts/lib/npm-scripts.js +4 -23
- package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
- package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
- package/.agents/scripts/lib/observability/signal-validator.js +5 -37
- package/.agents/scripts/lib/observability/signals-writer.js +11 -121
- package/.agents/scripts/lib/observability/source-classifier.js +21 -203
- package/.agents/scripts/lib/observability/terse-result.js +14 -47
- package/.agents/scripts/lib/onboard/init-tail.js +13 -74
- package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
- package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
- package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
- package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
- package/.agents/scripts/lib/orchestration/ceremony-routing.js +5 -75
- package/.agents/scripts/lib/orchestration/change-set.js +7 -36
- package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
- package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
- package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
- package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
- package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
- package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
- package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
- package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
- package/.agents/scripts/lib/orchestration/check-state.js +92 -0
- package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
- package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +42 -189
- package/.agents/scripts/lib/orchestration/code-review.js +24 -128
- package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
- package/.agents/scripts/lib/orchestration/complexity-gate.js +42 -214
- package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
- package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
- package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
- package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
- package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
- package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
- package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
- package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
- package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
- package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
- package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
- package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
- package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
- package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
- package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
- package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
- package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
- package/.agents/scripts/lib/orchestration/light-suitability.js +26 -231
- package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
- package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
- package/.agents/scripts/lib/orchestration/merge-queue.js +158 -0
- package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
- package/.agents/scripts/lib/orchestration/plan-context.js +52 -303
- package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
- package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
- package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
- package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
- package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
- package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
- package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +14 -78
- package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
- package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
- package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
- package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
- package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
- package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
- package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +49 -248
- package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +85 -368
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +8 -38
- package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +30 -190
- package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
- package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
- package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
- package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
- package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
- package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
- package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
- package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
- package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
- package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
- package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
- package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
- package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
- package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
- package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
- package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
- package/.agents/scripts/lib/orchestration/review-depth.js +12 -94
- package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
- package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
- package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
- package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
- package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
- package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
- package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
- package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
- package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
- package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
- package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
- package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
- package/.agents/scripts/lib/orchestration/run-epilogue.js +40 -199
- package/.agents/scripts/lib/orchestration/run-scoped-config.js +13 -81
- package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
- package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
- package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
- package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +190 -280
- package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +18 -80
- package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
- package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
- package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +183 -485
- package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
- package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +9 -50
- package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
- package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
- package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
- package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
- package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
- package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +110 -290
- package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
- package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
- package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
- package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
- package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
- package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
- package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
- package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
- package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -201
- package/.agents/scripts/lib/orchestration/story-follow-ups.js +43 -245
- package/.agents/scripts/lib/orchestration/story-init-envelope.js +4 -23
- package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
- package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
- package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -126
- package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
- package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
- package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
- package/.agents/scripts/lib/orchestration/ticket-validator.js +39 -181
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -250
- package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
- package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
- package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
- package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
- package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
- package/.agents/scripts/lib/path-security.js +3 -6
- package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
- package/.agents/scripts/lib/preflight-runner.js +13 -69
- package/.agents/scripts/lib/process-group.js +143 -0
- package/.agents/scripts/lib/project-root.js +2 -8
- package/.agents/scripts/lib/provider-factory.js +2 -25
- package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
- package/.agents/scripts/lib/qa/qa-session.js +15 -69
- package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
- package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
- package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
- package/.agents/scripts/lib/reserved-test-ids.js +9 -47
- package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
- package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
- package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
- package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
- package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
- package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
- package/.agents/scripts/lib/signals/detectors/common.js +12 -38
- package/.agents/scripts/lib/signals/index.js +2 -19
- package/.agents/scripts/lib/signals/schema.js +14 -109
- package/.agents/scripts/lib/signals/write.js +2 -11
- package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
- package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
- package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
- package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
- package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
- package/.agents/scripts/lib/single-story-sweep.js +14 -97
- package/.agents/scripts/lib/skills/parse-skill.js +13 -59
- package/.agents/scripts/lib/skills/skills-index.js +8 -29
- package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
- package/.agents/scripts/lib/source-extensions.js +11 -42
- package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
- package/.agents/scripts/lib/stdio-flush.js +9 -36
- package/.agents/scripts/lib/story-adjacency.js +8 -40
- package/.agents/scripts/lib/story-body/body-format-lints.js +22 -83
- package/.agents/scripts/lib/story-body/footer-block.js +11 -44
- package/.agents/scripts/lib/story-body/story-body.js +83 -358
- package/.agents/scripts/lib/temp-retention.js +42 -143
- package/.agents/scripts/lib/templates/decomposer-prompts.js +11 -65
- package/.agents/scripts/lib/test-env.js +12 -65
- package/.agents/scripts/lib/test-run-credit.js +10 -65
- package/.agents/scripts/lib/test-runner-contract.js +19 -74
- package/.agents/scripts/lib/test-temp.js +38 -184
- package/.agents/scripts/lib/test-tiers.js +12 -96
- package/.agents/scripts/lib/ticket-body-sections.js +21 -96
- package/.agents/scripts/lib/transpile.js +15 -74
- package/.agents/scripts/lib/util/concurrent-map.js +6 -25
- package/.agents/scripts/lib/util/parse-id-list.js +8 -34
- package/.agents/scripts/lib/util/poll-loop.js +8 -28
- package/.agents/scripts/lib/util/with-timeout.js +2 -11
- package/.agents/scripts/lib/validation-evidence.js +21 -96
- package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
- package/.agents/scripts/lib/wave-runner/live-probe.js +53 -221
- package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
- package/.agents/scripts/lib/workers/crap-worker.js +11 -64
- package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
- package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
- package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
- package/.agents/scripts/lib/workflow-closure.js +22 -105
- package/.agents/scripts/lib/workspace-provisioner.js +16 -54
- package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
- package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
- package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
- package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
- package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
- package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
- package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
- package/.agents/scripts/lib/worktree-manager.js +15 -40
- package/.agents/scripts/lint-issue-body.js +12 -68
- package/.agents/scripts/mandrel-update-preflight.js +10 -70
- package/.agents/scripts/merge-baseline.js +30 -104
- package/.agents/scripts/nav-registry-diff.js +22 -108
- package/.agents/scripts/notify.js +12 -69
- package/.agents/scripts/plan-context.js +27 -111
- package/.agents/scripts/plan-critics.js +12 -66
- package/.agents/scripts/plan-persist.js +31 -148
- package/.agents/scripts/plan-run-epilogue.js +11 -37
- package/.agents/scripts/pr-watch-with-update.js +76 -267
- package/.agents/scripts/providers/github/auth.js +3 -8
- package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
- package/.agents/scripts/providers/github/board-add.js +5 -21
- package/.agents/scripts/providers/github/branch-protection.js +11 -43
- package/.agents/scripts/providers/github/cache.js +2 -14
- package/.agents/scripts/providers/github/comments.js +7 -40
- package/.agents/scripts/providers/github/compose.js +3 -19
- package/.agents/scripts/providers/github/errors.js +22 -125
- package/.agents/scripts/providers/github/issues.js +31 -123
- package/.agents/scripts/providers/github/labels.js +24 -124
- package/.agents/scripts/providers/github/mappers.js +5 -27
- package/.agents/scripts/providers/github/merge-methods.js +3 -22
- package/.agents/scripts/providers/github/project-board.js +2 -17
- package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
- package/.agents/scripts/providers/github/request-helpers.js +5 -32
- package/.agents/scripts/providers/github/search-budget.js +9 -39
- package/.agents/scripts/providers/github/search-query.js +5 -26
- package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
- package/.agents/scripts/providers/github/sub-issues.js +7 -36
- package/.agents/scripts/providers/github/tickets.js +32 -134
- package/.agents/scripts/providers/github.js +18 -59
- package/.agents/scripts/prune-plan-run-labels.js +12 -46
- package/.agents/scripts/quality-preview.js +35 -220
- package/.agents/scripts/resolve-doc-tiers.js +3 -26
- package/.agents/scripts/resolve-stories.js +16 -67
- package/.agents/scripts/resync-status-column.js +6 -25
- package/.agents/scripts/run-tests.js +29 -104
- package/.agents/scripts/single-story-close.js +23 -135
- package/.agents/scripts/single-story-confirm-merge.js +32 -139
- package/.agents/scripts/single-story-init.js +47 -209
- package/.agents/scripts/stories-wave-tick.js +102 -472
- package/.agents/scripts/sync-agentrc.js +3 -21
- package/.agents/scripts/sync-claude-agents.js +9 -55
- package/.agents/scripts/sync-claude-commands.js +20 -110
- package/.agents/scripts/test-wrapper.js +6 -43
- package/.agents/scripts/update-coverage-baseline.js +5 -22
- package/.agents/scripts/update-crap-baseline.js +7 -30
- package/.agents/scripts/update-duplication-baseline.js +16 -92
- package/.agents/scripts/update-maintainability-baseline.js +8 -62
- package/.agents/scripts/update-ticket-state.js +1 -7
- package/.agents/scripts/validate-skills.js +6 -26
- package/.agents/templates/agent-protocol.md +2 -2
- package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
- package/.agents/workflows/audit-accessibility.md +4 -7
- package/.agents/workflows/audit-adrs.md +3 -6
- package/.agents/workflows/audit-architecture.md +3 -11
- package/.agents/workflows/audit-baselines.md +6 -9
- package/.agents/workflows/audit-clean-code.md +8 -12
- package/.agents/workflows/audit-data-model.md +3 -7
- package/.agents/workflows/audit-dependencies.md +4 -7
- package/.agents/workflows/audit-devops.md +4 -8
- package/.agents/workflows/audit-documentation.md +1 -4
- package/.agents/workflows/audit-mobile.md +4 -7
- package/.agents/workflows/audit-navigability.md +3 -6
- package/.agents/workflows/audit-performance.md +2 -4
- package/.agents/workflows/audit-privacy.md +4 -7
- package/.agents/workflows/audit-quality.md +4 -7
- package/.agents/workflows/audit-security.md +4 -7
- package/.agents/workflows/audit-seo.md +4 -7
- package/.agents/workflows/audit-sre.md +4 -7
- package/.agents/workflows/audit-to-stories.md +17 -30
- package/.agents/workflows/audit-ux-ui.md +4 -7
- package/.agents/workflows/helpers/audit-lens-core.md +1 -1
- package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
- package/.agents/workflows/helpers/deliver-digest.md +6 -4
- package/.agents/workflows/helpers/deliver-reference.md +114 -188
- package/.agents/workflows/helpers/deliver-story-reference.md +189 -533
- package/.agents/workflows/helpers/plan-reference.md +86 -139
- package/.agents/workflows/helpers/qa-core.md +12 -0
- package/.agents/workflows/memory-consolidate.md +1 -1
- package/.agents/workflows/qa-assist.md +27 -71
- package/.agents/workflows/qa-explore.md +19 -59
- package/.agents/workflows/qa-run.md +11 -33
- package/README.md +1 -1
- package/bin/mandrel.js +5 -46
- package/bin/postinstall.js +18 -107
- package/docs/CHANGELOG.md +32 -0
- package/lib/cli/doctor.js +11 -71
- package/lib/cli/init.js +26 -165
- package/lib/cli/migrate.js +5 -64
- package/lib/cli/registry.js +84 -467
- package/lib/cli/sync-agents.js +4 -64
- package/lib/cli/sync-commands.js +11 -64
- package/lib/cli/sync.js +34 -213
- package/lib/cli/uninstall.js +40 -219
- package/lib/cli/update.js +105 -661
- package/lib/cli/version-check.js +8 -72
- package/lib/cli/version-helpers.js +14 -87
- package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
- package/lib/migrations/index.js +15 -92
- package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
- package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
- package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
- package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
- package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
- package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
- package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
- package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
- package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +2 -21
- package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
- package/package.json +16 -14
- package/.agents/docs/SDLC.md +0 -590
- package/.agents/docs/quality-gates.md +0 -1183
- package/.agents/rules/known-tooling-behavior.md +0 -200
- package/.agents/rules/orchestration-error-handling.md +0 -61
- package/.agents/rules/test-seams.md +0 -59
- package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
- package/.agents/schemas/baselines/lint.schema.json +0 -47
- package/.agents/scripts/check-action-pinning.js +0 -260
- package/.agents/scripts/check-audit-attribution.js +0 -302
- package/.agents/scripts/check-baseline-drift.js +0 -211
- package/.agents/scripts/check-baseline-scope.js +0 -362
- package/.agents/scripts/check-generated-validator.js +0 -202
- package/.agents/scripts/check-knip-entries.js +0 -159
- package/.agents/scripts/check-lifecycle-lint.js +0 -294
- package/.agents/scripts/check-pinned-override-notes.js +0 -102
- package/.agents/scripts/check-schema-references.js +0 -368
- package/.agents/scripts/check-test-portability.js +0 -512
- package/.agents/scripts/check-workflow-citations.js +0 -218
- package/.agents/scripts/check-workflow-cli-lint.js +0 -299
- package/.agents/scripts/check-workflow-timeouts.js +0 -291
- package/.agents/scripts/install-matrix-assert.js +0 -326
- package/.agents/scripts/lib/audit-advisories.js +0 -195
- package/.agents/scripts/lib/audit-attribution.js +0 -134
- package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
- package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
- package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
- package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
- package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
- package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
- package/.agents/scripts/lib/c8-cli-path.js +0 -21
- package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
- package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
- package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
- package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
- package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
- package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
- package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
- package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
- package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
- package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
- package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
- package/.agents/scripts/lib/fs-walk.js +0 -52
- package/.agents/scripts/lib/knip-config-resolver.js +0 -181
- package/.agents/scripts/lib/knip-entry-sync.js +0 -452
- package/.agents/scripts/lib/pinned-override-notes.js +0 -88
- package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
- package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
- package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
- package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
- package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
- package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
- package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
- package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
- package/.agents/scripts/lib/test-isolate/runner.js +0 -483
- package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
- package/.agents/scripts/lib/test-profile/render-report.js +0 -45
- package/.agents/scripts/lint-label-vocabulary.js +0 -214
- package/.agents/scripts/post-structured-comment.js +0 -127
- package/.agents/scripts/provision-git-hooks.js +0 -85
- package/.agents/scripts/prune-baseline-orphans.js +0 -181
- package/.agents/scripts/run-coverage.js +0 -197
- package/.agents/scripts/run-lint.js +0 -133
- package/.agents/scripts/run-test-profile.js +0 -129
- package/.agents/scripts/run-verify.js +0 -125
- package/.agents/scripts/test-isolate.js +0 -55
- package/.agents/scripts/update-dead-exports-baseline.js +0 -321
|
@@ -1,26 +1,15 @@
|
|
|
1
1
|
// lib/migrations/steps/2.2.0-retire-epic-ac-tags.js
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* The v2 Epic removal deleted `acceptance-spec-reconciler.js`, the only
|
|
7
|
-
* consumer of the namespaced per-Epic AC tags, and the `/mandrel-plan` authoring
|
|
8
|
-
* prompt no longer mandates them. Surviving tags in consumer `.feature`
|
|
9
|
-
* files are inert and violate the gherkin-standards tag taxonomy's
|
|
10
|
-
* no-ad-hoc-tags rule, so this step removes them: each `@epic-<digits>-ac-<digits>`
|
|
11
|
-
* token is deleted from tag lines, a tag line left with no tags is dropped
|
|
12
|
-
* entirely, and every other tag and line is preserved byte-for-byte. Files
|
|
13
|
-
* with no stale tags are never rewritten.
|
|
3
|
+
* Strip the inert, taxonomy-violating `@epic-<id>-ac-N` tags from consumer
|
|
4
|
+
* feature files; a tag line left empty is dropped, everything else is kept
|
|
5
|
+
* byte-for-byte, and untouched files are never rewritten.
|
|
14
6
|
*/
|
|
15
7
|
|
|
16
8
|
import nodeFs from 'node:fs';
|
|
17
9
|
import path from 'node:path';
|
|
18
10
|
|
|
19
11
|
/**
|
|
20
|
-
*
|
|
21
|
-
* `.agents/scripts/lib/bdd-runner-detect.js`. Duplicated deliberately:
|
|
22
|
-
* `lib/` runs from the installed npm package inside a consumer project and
|
|
23
|
-
* must not import from the materialized `.agents/` payload.
|
|
12
|
+
* Mirrors `bdd-runner-detect.js`: `lib/` must not import the `.agents/` payload.
|
|
24
13
|
*/
|
|
25
14
|
const CANONICAL_FEATURE_ROOTS = Object.freeze([
|
|
26
15
|
'tests/features',
|
|
@@ -30,18 +19,11 @@ const CANONICAL_FEATURE_ROOTS = Object.freeze([
|
|
|
30
19
|
|
|
31
20
|
const EPIC_AC_TAG_RE = /@epic-\d+-ac-\d+/;
|
|
32
21
|
|
|
33
|
-
/**
|
|
34
|
-
* A Gherkin tag line: optional indentation followed by one or more
|
|
35
|
-
* whitespace-separated `@tag` tokens and nothing else.
|
|
36
|
-
*/
|
|
37
22
|
const TAG_LINE_RE = /^(\s*)(@\S+(?:\s+@\S+)*)\s*$/;
|
|
38
23
|
|
|
39
24
|
/**
|
|
40
|
-
* Recursively collect `.feature` file paths under `root`.
|
|
41
|
-
*
|
|
42
25
|
* @param {string} root
|
|
43
|
-
* @param {typeof nodeFs} [fsImpl]
|
|
44
|
-
* `node:fs` per `.agents/rules/test-seams.md` rule 1.
|
|
26
|
+
* @param {typeof nodeFs} [fsImpl]
|
|
45
27
|
* @returns {string[]}
|
|
46
28
|
*/
|
|
47
29
|
function collectFeatureFiles(root, fsImpl = nodeFs) {
|
|
@@ -72,11 +54,8 @@ function collectFeatureFiles(root, fsImpl = nodeFs) {
|
|
|
72
54
|
|
|
73
55
|
/**
|
|
74
56
|
* @param {unknown} ctx
|
|
75
|
-
* @param {typeof nodeFs} [fsImpl]
|
|
76
|
-
*
|
|
77
|
-
* (`.agents/rules/test-seams.md` rule 4).
|
|
78
|
-
* @returns {string[]} Absolute paths of every `.feature` file under the
|
|
79
|
-
* canonical feature roots that exist in the consumer tree.
|
|
57
|
+
* @param {typeof nodeFs} [fsImpl]
|
|
58
|
+
* @returns {string[]}
|
|
80
59
|
*/
|
|
81
60
|
function resolveFeatureFiles(ctx, fsImpl = nodeFs) {
|
|
82
61
|
const projectRoot = ctx?.projectRoot ?? process.cwd();
|
|
@@ -86,10 +65,6 @@ function resolveFeatureFiles(ctx, fsImpl = nodeFs) {
|
|
|
86
65
|
}
|
|
87
66
|
|
|
88
67
|
/**
|
|
89
|
-
* Strip retired `@epic-<id>-ac-<n>` tokens from one file's content.
|
|
90
|
-
* Only tag lines are touched; a tag line whose every tag was retired is
|
|
91
|
-
* dropped. Returns the original string when nothing matched.
|
|
92
|
-
*
|
|
93
68
|
* @param {string} content
|
|
94
69
|
* @returns {string}
|
|
95
70
|
*/
|
|
@@ -122,9 +97,7 @@ export const retireEpicAcTags = {
|
|
|
122
97
|
'(their reconciler consumer was deleted in the v2 Epic removal)',
|
|
123
98
|
/**
|
|
124
99
|
* @param {{ projectRoot?: string, fs?: typeof nodeFs }} [ctx]
|
|
125
|
-
* @param {typeof nodeFs} [fsImpl]
|
|
126
|
-
* to `ctx.fs` when the migration runner threads one, else the real
|
|
127
|
-
* `node:fs` (`.agents/rules/test-seams.md` rule 1).
|
|
100
|
+
* @param {typeof nodeFs} [fsImpl]
|
|
128
101
|
* @returns {boolean}
|
|
129
102
|
*/
|
|
130
103
|
detect(ctx, fsImpl = ctx?.fs ?? nodeFs) {
|
|
@@ -138,9 +111,7 @@ export const retireEpicAcTags = {
|
|
|
138
111
|
},
|
|
139
112
|
/**
|
|
140
113
|
* @param {{ projectRoot?: string, fs?: typeof nodeFs }} [ctx]
|
|
141
|
-
* @param {typeof nodeFs} [fsImpl]
|
|
142
|
-
* to `ctx.fs` when the migration runner threads one, else the real
|
|
143
|
-
* `node:fs` (`.agents/rules/test-seams.md` rule 1).
|
|
114
|
+
* @param {typeof nodeFs} [fsImpl]
|
|
144
115
|
* @returns {void}
|
|
145
116
|
*/
|
|
146
117
|
apply(ctx, fsImpl = ctx?.fs ?? nodeFs) {
|
|
@@ -1,17 +1,5 @@
|
|
|
1
1
|
// lib/migrations/steps/2.20.0-retire-codebase-snapshot.js
|
|
2
|
-
/**
|
|
3
|
-
* Story #4811 — strip the retired `planning.codebaseSnapshot` block from a
|
|
4
|
-
* consumer's `.agentrc.json` and from the `.agentrc.local.json` overlay an
|
|
5
|
-
* operator pins in `.agentrc.local.json`.
|
|
6
|
-
*
|
|
7
|
-
* Spec authoring is grounded by targeted retrieval plus the Phase 8
|
|
8
|
-
* file-assumption gate, so the snapshot block has no consumer; the block
|
|
9
|
-
* carries `additionalProperties: false`, so a config still setting it fails
|
|
10
|
-
* validation on upgrade rather than warning.
|
|
11
|
-
*
|
|
12
|
-
* `planning` is optional, so a config that carried nothing but the snapshot
|
|
13
|
-
* does not keep an orphan `planning: {}`.
|
|
14
|
-
*/
|
|
2
|
+
/** Strip the reader-less `planning.codebaseSnapshot` block. */
|
|
15
3
|
|
|
16
4
|
import { createRetireAgentrcKeyStep } from '../helpers/retire-agentrc-key.js';
|
|
17
5
|
|
|
@@ -1,32 +1,7 @@
|
|
|
1
1
|
// lib/migrations/steps/2.32.0-retire-lint-baseline-command.js
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* and the `commands` block carries `additionalProperties: false`, so a
|
|
6
|
-
* config still naming the command fails validation on upgrade.
|
|
7
|
-
*
|
|
8
|
-
* It sweeps **both** config surfaces. `config-resolver.js` deep-merges
|
|
9
|
-
* `.agentrc.local.json` over `.agentrc.json` and validates the result, so a
|
|
10
|
-
* key surviving in the operator's overlay fails exactly as a base one would.
|
|
11
|
-
* Sweeping only the base would report "nothing to migrate" and leave that
|
|
12
|
-
* consumer hard-broken with no self-service remedy — re-running
|
|
13
|
-
* `mandrel update` would keep reporting clean — while this commit's
|
|
14
|
-
* `BREAKING CHANGE:` footer promises the upgrade deletes the key for them.
|
|
15
|
-
*
|
|
16
|
-
* The `lint` baseline KIND survives for consumers whose own linter writes
|
|
17
|
-
* `baselines/lint.json`; only the framework-owned capture shell is gone, so
|
|
18
|
-
* nothing here touches the baseline file or the gate config.
|
|
19
|
-
*
|
|
20
|
-
* An emptied `commands` block is deliberately left in place (`pruneDepth: 0`):
|
|
21
|
-
* unlike `planning.complexityGate`, `project` is a required block and an empty
|
|
22
|
-
* `commands` object is valid against the schema, so pruning it would be a
|
|
23
|
-
* cosmetic edit to a config the consumer owns.
|
|
24
|
-
*
|
|
25
|
-
* This step is also the carrier for the release note #5004 never emitted: its
|
|
26
|
-
* commit ships the `BREAKING CHANGE:` footer that the squash subject on `main`
|
|
27
|
-
* (`227e1af4`) lacks, and which release-please therefore could not surface.
|
|
28
|
-
* See `single-story-close/phases/conventional-subject.js` for the close-side
|
|
29
|
-
* fix that stops the next one being lost.
|
|
3
|
+
* Strip `project.commands.lintBaseline` (its capture CLI is gone). An emptied
|
|
4
|
+
* `commands` is kept: `project` is required and `{}` is valid.
|
|
30
5
|
*/
|
|
31
6
|
|
|
32
7
|
import { createRetireAgentrcKeyStep } from '../helpers/retire-agentrc-key.js';
|
|
@@ -1,28 +1,7 @@
|
|
|
1
1
|
// lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* - `delivery.routing.freshCriticSampleRate` — the maker-checker sampling
|
|
7
|
-
* floor is gone; the standard profile routes purely off the derived
|
|
8
|
-
* change level (high or underivable → fresh critic, low → inline).
|
|
9
|
-
* - `delivery.codeReview.maxFixScopeFiles` — the auto-fix file-count
|
|
10
|
-
* ceiling bounded remediation by count rather than by risk.
|
|
11
|
-
* - `delivery.signals` (`rework.editsPerFile`, `retry.repeatCount`) — the
|
|
12
|
-
* detector thresholds and `SIGNALS_DEFAULTS` are retired wholesale.
|
|
13
|
-
* - `delivery.quality.codingGuardrails.cyclomaticMustFix` — the cyclomatic
|
|
14
|
-
* ratchet keeps its fixed ceiling of 12; `cyclomaticFlag` stays advisory.
|
|
15
|
-
*
|
|
16
|
-
* Every affected block carries `additionalProperties: false`, so a config
|
|
17
|
-
* still setting any of them fails validation on upgrade rather than warning.
|
|
18
|
-
* It sweeps **both** config surfaces (`.agentrc.json` and the gitignored
|
|
19
|
-
* `.agentrc.local.json`), because `config-resolver.js` deep-merges the
|
|
20
|
-
* overlay before the AJV gate runs.
|
|
21
|
-
*
|
|
22
|
-
* Pruning: `delivery.signals` is removed whole (`pruneDepth: 1` prunes an
|
|
23
|
-
* emptied `delivery`); the nested keys prune their emptied ancestors up to
|
|
24
|
-
* `delivery` itself. `delivery` is optional, so an emptied block is removed
|
|
25
|
-
* rather than left as `{}`. A sibling key that survives keeps its block.
|
|
3
|
+
* Strip the retired `delivery.*` limit knobs; `delivery` is optional, so
|
|
4
|
+
* emptied ancestors are pruned up to it.
|
|
26
5
|
*/
|
|
27
6
|
|
|
28
7
|
import { createRetireAgentrcKeyStep } from '../helpers/retire-agentrc-key.js';
|
|
@@ -1,32 +1,7 @@
|
|
|
1
1
|
// lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* - `planning.complexityGate` — the plan-side lite claim and its persist
|
|
7
|
-
* backstop are gone; nothing reads the switch.
|
|
8
|
-
* - `planning.riskHeuristics` — the phrase list was empty in every consumer
|
|
9
|
-
* that resolved it, and the critic trigger that matched it went with the
|
|
10
|
-
* consolidation critic.
|
|
11
|
-
* - `planning.failOnSharedEditors`, `planning.requireExplicitCrossStoryDeps`,
|
|
12
|
-
* `planning.failOnRegistryConflicts`, `planning.failOnLargeFanOut`,
|
|
13
|
-
* `planning.largeFanOutThreshold`, `planning.crossCuttingRegistries` —
|
|
14
|
-
* every conflict finding is advisory now, and the registry and fan-out
|
|
15
|
-
* findings no longer exist.
|
|
16
|
-
* - `planning.memoryPool.staleAfterDays`, `planning.memoryPool.growthDelta`
|
|
17
|
-
* — the memory-hygiene advisory keeps only its index-byte arm.
|
|
18
|
-
*
|
|
19
|
-
* The `planning` block carries `additionalProperties: false`, so a config
|
|
20
|
-
* still setting any of them fails validation on upgrade rather than warning.
|
|
21
|
-
* It sweeps **both** config surfaces (`.agentrc.json` and the gitignored
|
|
22
|
-
* `.agentrc.local.json`), because `config-resolver.js` deep-merges the
|
|
23
|
-
* overlay before the AJV gate runs.
|
|
24
|
-
*
|
|
25
|
-
* Pruning: the two `memoryPool` keys prune the `memoryPool` object when it
|
|
26
|
-
* empties and then `planning` itself (`pruneDepth: 2`); the top-level keys
|
|
27
|
-
* prune `planning` (`pruneDepth: 1`). `planning` is optional, so an emptied
|
|
28
|
-
* block is removed rather than left as `{}`. A `memoryPool` that still
|
|
29
|
-
* carries `indexByteCeiling` survives untouched.
|
|
3
|
+
* Strip the retired `planning.*` limit knobs; `planning` is optional, so
|
|
4
|
+
* emptied blocks are pruned.
|
|
30
5
|
*/
|
|
31
6
|
|
|
32
7
|
import { createRetireAgentrcKeyStep } from '../helpers/retire-agentrc-key.js';
|
|
@@ -1,26 +1,7 @@
|
|
|
1
1
|
// lib/migrations/steps/2.60.0-retire-audit-results-autofile.js
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* The audit-results graduator this toggle switched was deleted two releases
|
|
7
|
-
* ago, so the key had no runtime reader left: Story #5341's flip of its
|
|
8
|
-
* default from `true` to `false` changed nothing at all, because nothing read
|
|
9
|
-
* either value. A toggle with no reader is worse than no toggle — it reads as
|
|
10
|
-
* a live control, and a consumer that set it was configuring nothing.
|
|
11
|
-
*
|
|
12
|
-
* `delivery.feedbackLoop` carries `additionalProperties: false`, so a config
|
|
13
|
-
* that still sets the key fails AJV validation outright on upgrade rather than
|
|
14
|
-
* warning. That is what makes this a migration rather than a docs change.
|
|
15
|
-
*
|
|
16
|
-
* Both config surfaces are swept: `config-resolver.js` deep-merges
|
|
17
|
-
* `.agentrc.local.json` over `.agentrc.json` **before** the AJV gate runs, so
|
|
18
|
-
* a key surviving in the gitignored overlay fails exactly as a base one would.
|
|
19
|
-
*
|
|
20
|
-
* Pruning: `pruneDepth: 2` prunes an emptied `feedbackLoop` and then an
|
|
21
|
-
* emptied `delivery`, both of which are optional. The sibling `retroProposals`
|
|
22
|
-
* toggle is deliberately untouched — it has a live reader — so a consumer who
|
|
23
|
-
* set both keeps its block.
|
|
3
|
+
* Strip `delivery.feedbackLoop.auditResultsAutoFile`: it had no reader. The
|
|
4
|
+
* sibling `retroProposals` is live and stays.
|
|
24
5
|
*/
|
|
25
6
|
|
|
26
7
|
import { createRetireAgentrcKeyStep } from '../helpers/retire-agentrc-key.js';
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
// lib/migrations/steps/strip-removed-agentrc-keys.js
|
|
2
|
+
/**
|
|
3
|
+
* Strip the `.agentrc` keys the config-surface cut removed (removed gates,
|
|
4
|
+
* zero-reader keys, tuning keys folded into constants) from both config
|
|
5
|
+
* surfaces, reporting each one's replacement — and a `behaviour change` line
|
|
6
|
+
* when the consumer's value differed, so the upgrade never silently changes
|
|
7
|
+
* delivery. Only `delivery`/`planning` (optional) ancestors are pruned.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import nodeFs from 'node:fs';
|
|
11
|
+
import path from 'node:path';
|
|
12
|
+
|
|
13
|
+
const AGENTRC_FILENAMES = Object.freeze([
|
|
14
|
+
'.agentrc.json',
|
|
15
|
+
'.agentrc.local.json',
|
|
16
|
+
]);
|
|
17
|
+
|
|
18
|
+
const PRUNABLE_ROOTS = new Set(['delivery', 'planning']);
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @param {string} dotted
|
|
22
|
+
* @param {string} constant
|
|
23
|
+
* @param {unknown} value
|
|
24
|
+
*/
|
|
25
|
+
const folded = (dotted, constant, value) => ({
|
|
26
|
+
path: dotted.split('.'),
|
|
27
|
+
constant,
|
|
28
|
+
value,
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* `alwaysChanges`: removal changes behaviour for anyone who had it on.
|
|
33
|
+
*
|
|
34
|
+
* @param {string} dotted
|
|
35
|
+
* @param {string} reason
|
|
36
|
+
* @param {{ alwaysChanges?: boolean }} [opts]
|
|
37
|
+
*/
|
|
38
|
+
const removed = (dotted, reason, { alwaysChanges = false } = {}) => ({
|
|
39
|
+
path: dotted.split('.'),
|
|
40
|
+
reason,
|
|
41
|
+
alwaysChanges,
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
const REMOVED_AGENTRC_KEYS = Object.freeze([
|
|
45
|
+
removed(
|
|
46
|
+
'delivery.quality.gates.lint',
|
|
47
|
+
'the lint baseline gate was removed (npm run lint still runs as a close gate)',
|
|
48
|
+
{ alwaysChanges: true },
|
|
49
|
+
),
|
|
50
|
+
removed(
|
|
51
|
+
'delivery.quality.gates.lighthouse',
|
|
52
|
+
'the lighthouse baseline gate was removed',
|
|
53
|
+
{ alwaysChanges: true },
|
|
54
|
+
),
|
|
55
|
+
removed('delivery.quality.baselineEpsilon.lint', 'its gate was removed'),
|
|
56
|
+
removed(
|
|
57
|
+
'delivery.quality.baselineEpsilon.lighthouse',
|
|
58
|
+
'its gate was removed',
|
|
59
|
+
),
|
|
60
|
+
removed('delivery.quality.gates.mutation.strykerConfigPath', 'no reader'),
|
|
61
|
+
removed('delivery.auditToStories.autoComment', 'no reader'),
|
|
62
|
+
removed('delivery.codeReview.providerConfig', 'no reader'),
|
|
63
|
+
removed('delivery.quality.gates.crap.friction', 'no reader'),
|
|
64
|
+
removed('delivery.quality.gates.crap.refreshTimeoutMs', 'no reader'),
|
|
65
|
+
removed(
|
|
66
|
+
'delivery.quality.gates.maintainability.refreshTimeoutMs',
|
|
67
|
+
'no reader',
|
|
68
|
+
),
|
|
69
|
+
removed('delivery.quality.gates.duplication.refreshTimeoutMs', 'no reader'),
|
|
70
|
+
removed(
|
|
71
|
+
'delivery.quality.gates.crap.incrementalCoverage.enabled',
|
|
72
|
+
'deprecated alias — set skipWhenUnchanged / baselineJoin instead',
|
|
73
|
+
{ alwaysChanges: true },
|
|
74
|
+
),
|
|
75
|
+
folded('delivery.quality.gateScoping.scope', 'GATE_SCOPING.scope', 'diff'),
|
|
76
|
+
folded(
|
|
77
|
+
'delivery.quality.gateScoping.diffRef',
|
|
78
|
+
'GATE_SCOPING.diffRef',
|
|
79
|
+
'main',
|
|
80
|
+
),
|
|
81
|
+
folded(
|
|
82
|
+
'delivery.quality.gates.crap.refreshTag',
|
|
83
|
+
'BASELINE_REFRESH_TAG',
|
|
84
|
+
'baseline-refresh:',
|
|
85
|
+
),
|
|
86
|
+
folded(
|
|
87
|
+
'delivery.quality.gates.maintainability.refreshTag',
|
|
88
|
+
'BASELINE_REFRESH_TAG',
|
|
89
|
+
'baseline-refresh:',
|
|
90
|
+
),
|
|
91
|
+
folded(
|
|
92
|
+
'delivery.quality.gates.coverage.timeoutMs',
|
|
93
|
+
'COVERAGE_GATE_DEFAULTS.timeoutMs',
|
|
94
|
+
600000,
|
|
95
|
+
),
|
|
96
|
+
folded(
|
|
97
|
+
'delivery.quality.formatAutofix.timeoutMs',
|
|
98
|
+
'FORMAT_AUTOFIX_TIMEOUT_MS',
|
|
99
|
+
60000,
|
|
100
|
+
),
|
|
101
|
+
folded(
|
|
102
|
+
'delivery.quality.codingGuardrails.cyclomaticFlag',
|
|
103
|
+
'CODING_GUARDRAILS.cyclomaticFlag',
|
|
104
|
+
8,
|
|
105
|
+
),
|
|
106
|
+
folded(
|
|
107
|
+
'delivery.quality.codingGuardrails.requireSiblingTest',
|
|
108
|
+
'CODING_GUARDRAILS.requireSiblingTest',
|
|
109
|
+
false,
|
|
110
|
+
),
|
|
111
|
+
folded(
|
|
112
|
+
'delivery.quality.autoRefresh.crapJumpCap',
|
|
113
|
+
'AUTO_REFRESH_DEFAULTS.crapJumpCap',
|
|
114
|
+
5,
|
|
115
|
+
),
|
|
116
|
+
folded(
|
|
117
|
+
'delivery.quality.autoRefresh.scope',
|
|
118
|
+
'AUTO_REFRESH_DEFAULTS.scope',
|
|
119
|
+
'diff',
|
|
120
|
+
),
|
|
121
|
+
...Object.entries({
|
|
122
|
+
maintainability: 0.5,
|
|
123
|
+
crap: 0.5,
|
|
124
|
+
coverage: 0.1,
|
|
125
|
+
mutation: 0.5,
|
|
126
|
+
'bundle-size': 1024,
|
|
127
|
+
duplication: 0.5,
|
|
128
|
+
}).map(([kind, value]) =>
|
|
129
|
+
folded(
|
|
130
|
+
`delivery.quality.baselineEpsilon.${kind}`,
|
|
131
|
+
`BASELINE_EPSILON.${kind}`,
|
|
132
|
+
value,
|
|
133
|
+
),
|
|
134
|
+
),
|
|
135
|
+
folded('delivery.codeReview.maxFixAttempts', 'none (no reader)', 3),
|
|
136
|
+
folded('github.defaultTimeoutMs', 'GH_DEFAULT_TIMEOUT_MS', 60000),
|
|
137
|
+
folded(
|
|
138
|
+
'delivery.ci.watch.pollIntervalMs',
|
|
139
|
+
'WATCH_DEFAULTS.pollIntervalMs (--poll-interval-ms)',
|
|
140
|
+
10000,
|
|
141
|
+
),
|
|
142
|
+
folded(
|
|
143
|
+
'delivery.ci.watch.maxPolls',
|
|
144
|
+
'WATCH_DEFAULTS.maxPolls (--max-polls)',
|
|
145
|
+
180,
|
|
146
|
+
),
|
|
147
|
+
folded(
|
|
148
|
+
'delivery.ci.watch.maxResumes',
|
|
149
|
+
'WATCH_DEFAULTS.maxResumes (--max-resumes)',
|
|
150
|
+
3,
|
|
151
|
+
),
|
|
152
|
+
folded(
|
|
153
|
+
'delivery.ci.watch.attachWindowMs',
|
|
154
|
+
'WATCH_DEFAULTS.attachWindowMs (--attach-window-ms)',
|
|
155
|
+
1200000,
|
|
156
|
+
),
|
|
157
|
+
folded(
|
|
158
|
+
'delivery.execution.timeoutMs',
|
|
159
|
+
'LIMITS_DEFAULTS.executionTimeoutMs',
|
|
160
|
+
600000,
|
|
161
|
+
),
|
|
162
|
+
folded(
|
|
163
|
+
'delivery.execution.requireCreditedCapture',
|
|
164
|
+
'off (coverage-capture --require-credited)',
|
|
165
|
+
false,
|
|
166
|
+
),
|
|
167
|
+
folded(
|
|
168
|
+
'delivery.tempRetention.staleDays',
|
|
169
|
+
'TEMP_RETENTION_DEFAULTS.staleDays',
|
|
170
|
+
7,
|
|
171
|
+
),
|
|
172
|
+
folded('delivery.mergeWatch.intervalSeconds', 'DEFAULT_INTERVAL_SECONDS', 30),
|
|
173
|
+
folded('delivery.mergeWatch.updateAttempts', 'DEFAULT_UPDATE_ATTEMPTS', 3),
|
|
174
|
+
folded('delivery.review.lensDiffFloor', 'DEFAULT_LENS_DIFF_FLOOR', 40),
|
|
175
|
+
folded(
|
|
176
|
+
'delivery.feedbackLoop.frictionWindowDays',
|
|
177
|
+
'FRICTION_WINDOW_DAYS',
|
|
178
|
+
30,
|
|
179
|
+
),
|
|
180
|
+
folded(
|
|
181
|
+
'delivery.auditToStories.severityFloor',
|
|
182
|
+
'DEFAULT_SEVERITY_FLOOR (--severity)',
|
|
183
|
+
'high',
|
|
184
|
+
),
|
|
185
|
+
folded('planning.memoryPool.indexByteCeiling', 'INDEX_BYTE_CEILING', 24576),
|
|
186
|
+
]);
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* @param {object | null} config
|
|
190
|
+
* @param {string[]} keyPath
|
|
191
|
+
* @returns {object[] | null}
|
|
192
|
+
*/
|
|
193
|
+
function containersFor(config, keyPath) {
|
|
194
|
+
if (!config || typeof config !== 'object') return null;
|
|
195
|
+
const chain = [config];
|
|
196
|
+
for (const segment of keyPath.slice(0, -1)) {
|
|
197
|
+
const next = chain[chain.length - 1][segment];
|
|
198
|
+
if (!next || typeof next !== 'object' || Array.isArray(next)) return null;
|
|
199
|
+
chain.push(next);
|
|
200
|
+
}
|
|
201
|
+
return chain;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* @param {object | null} config
|
|
206
|
+
* @param {string[]} keyPath
|
|
207
|
+
* @returns {{ present: boolean, value?: unknown }}
|
|
208
|
+
*/
|
|
209
|
+
function lookup(config, keyPath) {
|
|
210
|
+
const chain = containersFor(config, keyPath);
|
|
211
|
+
const leaf = keyPath[keyPath.length - 1];
|
|
212
|
+
if (!chain || !Object.hasOwn(chain[chain.length - 1], leaf)) {
|
|
213
|
+
return { present: false };
|
|
214
|
+
}
|
|
215
|
+
return { present: true, value: chain[chain.length - 1][leaf] };
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* @param {object} config
|
|
220
|
+
* @param {string[]} keyPath
|
|
221
|
+
* @returns {void}
|
|
222
|
+
*/
|
|
223
|
+
function deleteAndPrune(config, keyPath) {
|
|
224
|
+
const chain = containersFor(config, keyPath);
|
|
225
|
+
if (!chain) return;
|
|
226
|
+
delete chain[chain.length - 1][keyPath[keyPath.length - 1]];
|
|
227
|
+
if (!PRUNABLE_ROOTS.has(keyPath[0])) return;
|
|
228
|
+
for (let index = chain.length - 1; index > 0; index -= 1) {
|
|
229
|
+
if (Object.keys(chain[index]).length > 0) break;
|
|
230
|
+
delete chain[index - 1][keyPath[index - 1]];
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* @param {object} entry
|
|
236
|
+
* @param {unknown} value
|
|
237
|
+
* @returns {boolean}
|
|
238
|
+
*/
|
|
239
|
+
function changesBehaviour(entry, value) {
|
|
240
|
+
if ('constant' in entry) {
|
|
241
|
+
return JSON.stringify(value) !== JSON.stringify(entry.value);
|
|
242
|
+
}
|
|
243
|
+
if (!entry.alwaysChanges) return false;
|
|
244
|
+
return !(value && typeof value === 'object' && value.enabled === false);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* @param {string} filename
|
|
249
|
+
* @param {object} entry
|
|
250
|
+
* @param {unknown} value
|
|
251
|
+
* @returns {string}
|
|
252
|
+
*/
|
|
253
|
+
function reportLine(filename, entry, value) {
|
|
254
|
+
const dotted = entry.path.join('.');
|
|
255
|
+
const replacement =
|
|
256
|
+
'constant' in entry
|
|
257
|
+
? `now ${entry.constant} = ${JSON.stringify(entry.value)}`
|
|
258
|
+
: entry.reason;
|
|
259
|
+
const prefix = changesBehaviour(entry, value)
|
|
260
|
+
? ` behaviour change: ${filename} set ${dotted} = ${JSON.stringify(value)};`
|
|
261
|
+
: ` removed ${filename} ${dotted};`;
|
|
262
|
+
return `${prefix} ${replacement}`;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Mutates `config`.
|
|
267
|
+
*
|
|
268
|
+
* @param {object} config
|
|
269
|
+
* @param {string} filename
|
|
270
|
+
* @returns {string[]}
|
|
271
|
+
*/
|
|
272
|
+
function stripRemovedKeys(config, filename) {
|
|
273
|
+
const lines = [];
|
|
274
|
+
for (const entry of REMOVED_AGENTRC_KEYS) {
|
|
275
|
+
const { present, value } = lookup(config, entry.path);
|
|
276
|
+
if (!present) continue;
|
|
277
|
+
lines.push(reportLine(filename, entry, value));
|
|
278
|
+
deleteAndPrune(config, entry.path);
|
|
279
|
+
}
|
|
280
|
+
return lines;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* @param {{ projectRoot?: string }} ctx
|
|
285
|
+
* @param {string} filename
|
|
286
|
+
* @param {typeof nodeFs} fsImpl
|
|
287
|
+
* @returns {object | null}
|
|
288
|
+
*/
|
|
289
|
+
function readConfig(ctx, filename, fsImpl) {
|
|
290
|
+
try {
|
|
291
|
+
const file = path.join(ctx?.projectRoot ?? process.cwd(), filename);
|
|
292
|
+
return JSON.parse(fsImpl.readFileSync(file, 'utf8'));
|
|
293
|
+
} catch {
|
|
294
|
+
return null;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* @param {object | null} config
|
|
300
|
+
* @returns {boolean}
|
|
301
|
+
*/
|
|
302
|
+
function carriesRemovedKey(config) {
|
|
303
|
+
return REMOVED_AGENTRC_KEYS.some(
|
|
304
|
+
(entry) => lookup(config, entry.path).present,
|
|
305
|
+
);
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
export const stripRemovedAgentrcKeys = {
|
|
309
|
+
version: '2.61.0',
|
|
310
|
+
description:
|
|
311
|
+
'strip the .agentrc keys the config-surface cut removed — the lint and ' +
|
|
312
|
+
'lighthouse gates, zero-reader keys, and never-set tuning keys now ' +
|
|
313
|
+
'fixed as constants (Story #5382)',
|
|
314
|
+
detect(ctx) {
|
|
315
|
+
const fsImpl = ctx?.fs ?? nodeFs;
|
|
316
|
+
return AGENTRC_FILENAMES.some((filename) =>
|
|
317
|
+
carriesRemovedKey(readConfig(ctx, filename, fsImpl)),
|
|
318
|
+
);
|
|
319
|
+
},
|
|
320
|
+
apply(ctx) {
|
|
321
|
+
const fsImpl = ctx?.fs ?? nodeFs;
|
|
322
|
+
const log = ctx?.log ?? console.log;
|
|
323
|
+
for (const filename of AGENTRC_FILENAMES) {
|
|
324
|
+
const config = readConfig(ctx, filename, fsImpl);
|
|
325
|
+
if (!carriesRemovedKey(config)) continue;
|
|
326
|
+
for (const line of stripRemovedKeys(config, filename)) log(line);
|
|
327
|
+
fsImpl.writeFileSync(
|
|
328
|
+
path.join(ctx?.projectRoot ?? process.cwd(), filename),
|
|
329
|
+
`${JSON.stringify(config, null, 2)}\n`,
|
|
330
|
+
);
|
|
331
|
+
}
|
|
332
|
+
},
|
|
333
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mandrel",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.62.0",
|
|
4
4
|
"description": "Claude Code-first opinionated workflow framework: instructions, skills, rules, and SDLC workflows that govern AI coding assistants.",
|
|
5
5
|
"files": [
|
|
6
6
|
".agents/",
|
|
@@ -20,21 +20,21 @@
|
|
|
20
20
|
"test:quick": "node .agents/scripts/run-tests.js --tier quick",
|
|
21
21
|
"test:integration": "node .agents/scripts/run-tests.js --tier integration",
|
|
22
22
|
"test:e2e": "node .agents/scripts/run-tests.js --tier e2e",
|
|
23
|
-
"test:profile": "node
|
|
23
|
+
"test:profile": "node scripts/run-test-profile.js",
|
|
24
24
|
"test:census": "SPAWN_CENSUS_OUT=\"${SPAWN_CENSUS_OUT:-temp/census.json}\" NODE_OPTIONS=\"--require $PWD/tests/fixtures/spawn-census.cjs\" node .agents/scripts/run-tests.js",
|
|
25
|
-
"test:isolate": "node
|
|
26
|
-
"verify": "node
|
|
25
|
+
"test:isolate": "node scripts/test-isolate.js",
|
|
26
|
+
"verify": "node scripts/run-verify.js",
|
|
27
27
|
"typecheck": "node -e \"process.exit(0)\"",
|
|
28
|
-
"test:coverage": "node
|
|
28
|
+
"test:coverage": "node scripts/run-coverage.js",
|
|
29
29
|
"coverage:check": "node .agents/scripts/check-baselines.js --gate coverage",
|
|
30
30
|
"coverage:update": "node .agents/scripts/update-coverage-baseline.js",
|
|
31
31
|
"coverage:reanchor": "node .agents/scripts/update-coverage-baseline.js --full-scope",
|
|
32
32
|
"baseline:agents-loc": "node baselines/agents-loc-baseline.mjs",
|
|
33
|
-
"baselines:scope": "node
|
|
34
|
-
"baselines:prune": "node
|
|
33
|
+
"baselines:scope": "node scripts/check-baseline-scope.js",
|
|
34
|
+
"baselines:prune": "node scripts/prune-baseline-orphans.js",
|
|
35
35
|
"baselines:merge-driver": "node .agents/scripts/merge-baseline.js --install",
|
|
36
36
|
"lint:md": "markdownlint-cli2 \".agents/**/*.md\" \"*.md\" \"!node_modules/**\" \"!.worktrees/**\"",
|
|
37
|
-
"lint": "node
|
|
37
|
+
"lint": "node scripts/run-lint.js && node scripts/check-generated-validator.js --check && node scripts/check-pinned-override-notes.js && npm run docs:check",
|
|
38
38
|
"docs:gen": "node .agents/scripts/generate-config-docs.js && node .agents/scripts/generate-workflows-doc.js && node .agents/scripts/generate-lens-checklists.js",
|
|
39
39
|
"docs:check": "node .agents/scripts/generate-config-docs.js --check && node .agents/scripts/generate-workflows-doc.js --check && node .agents/scripts/generate-lens-checklists.js --check && node .agents/scripts/check-doc-links.js && npm run skills:check",
|
|
40
40
|
"skills:index": "node .agents/scripts/generate-skills-index.js",
|
|
@@ -49,12 +49,14 @@
|
|
|
49
49
|
"check:context-budget": "node .agents/scripts/check-context-budget.js",
|
|
50
50
|
"check:cyclomatic": "node .agents/scripts/check-cyclomatic.js",
|
|
51
51
|
"cyclomatic:update": "node .agents/scripts/check-cyclomatic.js --update",
|
|
52
|
-
"dead-exports:update": "node
|
|
53
|
-
"check:knip-entries": "node
|
|
54
|
-
"validator:gen": "node
|
|
55
|
-
"validator:check": "node
|
|
56
|
-
"
|
|
57
|
-
"check:
|
|
52
|
+
"dead-exports:update": "node scripts/update-dead-exports-baseline.js && node scripts/update-dead-exports-baseline.js --production",
|
|
53
|
+
"check:knip-entries": "node scripts/check-knip-entries.js",
|
|
54
|
+
"validator:gen": "node scripts/check-generated-validator.js",
|
|
55
|
+
"validator:check": "node scripts/check-generated-validator.js --check",
|
|
56
|
+
"config:ceiling": "node scripts/check-agentrc-key-ceiling.js",
|
|
57
|
+
"check:comment-policy": "node scripts/check-comment-policy.js",
|
|
58
|
+
"check:schema-refs": "node scripts/check-schema-references.js",
|
|
59
|
+
"check:workflow-citations": "node scripts/check-workflow-citations.js",
|
|
58
60
|
"crap:check": "node .agents/scripts/check-baselines.js --gate crap",
|
|
59
61
|
"crap:update": "node .agents/scripts/update-crap-baseline.js",
|
|
60
62
|
"crap:reanchor": "node .agents/scripts/update-crap-baseline.js --full-scope",
|