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,23 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `
|
|
3
|
-
*
|
|
4
|
-
* `.agents/docs/agentrc-reference.json` is the authoritative editor-reference
|
|
5
|
-
* inventory of every field the framework supports plus its default
|
|
6
|
-
* value. Runtime accessors under `lib/config/*.js` (`COMMANDS_DEFAULTS`,
|
|
7
|
-
* `BRANCH_PROTECTION_DEFAULTS`, gate defaults, etc.) layer the same
|
|
8
|
-
* values onto whatever the project config carries; a parity test
|
|
9
|
-
* (tests/config/full-agentrc-runtime-parity.test.js) keeps the two in
|
|
10
|
-
* lockstep.
|
|
11
|
-
*
|
|
12
|
-
* Story #1995: the `/mandrel-update` sync helper consults this module
|
|
13
|
-
* (not the template directly) to decide whether a project value is
|
|
14
|
-
* "just the default" and therefore safe to omit from `.agentrc.json`.
|
|
15
|
-
*
|
|
16
|
-
* Identity placeholders (`[OWNER]`, `[REPO]`, `@[USERNAME]`) carry no
|
|
17
|
-
* meaningful default — the operator must set them. They survive in
|
|
18
|
-
* the returned object so the consumer can see the expected shape, but
|
|
19
|
-
* the sync helper treats them as "no usable default" via
|
|
20
|
-
* `IDENTITY_PLACEHOLDER_PATHS`.
|
|
2
|
+
* `.agentrc.json` defaults from `.agents/docs/agentrc-reference.json`; a
|
|
3
|
+
* parity test keeps them in lockstep with the runtime accessors' constants.
|
|
21
4
|
*/
|
|
22
5
|
|
|
23
6
|
import fs from 'node:fs';
|
|
@@ -33,12 +16,7 @@ export const FULL_AGENTRC_PATH = path.join(
|
|
|
33
16
|
'agentrc-reference.json',
|
|
34
17
|
);
|
|
35
18
|
|
|
36
|
-
/**
|
|
37
|
-
* Dotted paths whose template value is a human placeholder
|
|
38
|
-
* (`[OWNER]`, `[REPO]`, `@[USERNAME]`). The sync helper treats these
|
|
39
|
-
* as "no default" — they are never auto-filled, and a project value
|
|
40
|
-
* present at one of these paths is never flagged as redundant.
|
|
41
|
-
*/
|
|
19
|
+
/** Placeholder-valued paths: never auto-filled, never flagged redundant. */
|
|
42
20
|
export const IDENTITY_PLACEHOLDER_PATHS = Object.freeze([
|
|
43
21
|
'github.owner',
|
|
44
22
|
'github.repo',
|
|
@@ -48,8 +26,6 @@ export const IDENTITY_PLACEHOLDER_PATHS = Object.freeze([
|
|
|
48
26
|
let _cache = null;
|
|
49
27
|
|
|
50
28
|
/**
|
|
51
|
-
* Parse `.agents/docs/agentrc-reference.json` and return a deep-frozen snapshot.
|
|
52
|
-
*
|
|
53
29
|
* @param {{ bustCache?: boolean }} [opts]
|
|
54
30
|
* @returns {object}
|
|
55
31
|
*/
|
|
@@ -57,7 +33,6 @@ export function getAgentrcDefaults(opts = {}) {
|
|
|
57
33
|
if (!opts.bustCache && _cache) return _cache;
|
|
58
34
|
const raw = fs.readFileSync(FULL_AGENTRC_PATH, 'utf8');
|
|
59
35
|
const parsed = JSON.parse(raw);
|
|
60
|
-
// Strip the `$schema` pointer — it's editor metadata, not a default.
|
|
61
36
|
delete parsed.$schema;
|
|
62
37
|
_cache = deepFreeze(parsed);
|
|
63
38
|
return _cache;
|
|
@@ -70,8 +45,7 @@ function deepFreeze(obj) {
|
|
|
70
45
|
}
|
|
71
46
|
|
|
72
47
|
/**
|
|
73
|
-
*
|
|
74
|
-
* scalar / array leaf. Objects are descended into, not yielded.
|
|
48
|
+
* Arrays are leaves.
|
|
75
49
|
*
|
|
76
50
|
* @param {object} defaults
|
|
77
51
|
* @returns {Generator<[string, unknown]>}
|
|
@@ -93,9 +67,6 @@ export function* iterDefaultLeaves(defaults, prefix = '') {
|
|
|
93
67
|
}
|
|
94
68
|
|
|
95
69
|
/**
|
|
96
|
-
* Look up a dotted path inside an arbitrary nested object.
|
|
97
|
-
* Returns `{ present: boolean, value: unknown }`.
|
|
98
|
-
*
|
|
99
70
|
* @param {object|null|undefined} obj
|
|
100
71
|
* @param {string} dottedPath
|
|
101
72
|
*/
|
|
@@ -1,45 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `delivery.routing
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* single-vs-fan-out kill-switch). Story #5313 dropped
|
|
7
|
-
* `delivery.routing.freshCriticSampleRate` (the maker-checker sampling
|
|
8
|
-
* floor), and Story #5343 dropped the derived-level routing that replaced
|
|
9
|
-
* it: `minimal` and `standard` resolve the inline self-eval as the Story's
|
|
10
|
-
* verdict owner whatever the diff touches, and `strict` is the one profile
|
|
11
|
-
* that spawns a fresh-context critic. v2 has one Story delivery path;
|
|
12
|
-
* routing here is only about spawn boot context and the ceremony profile.
|
|
13
|
-
*
|
|
14
|
-
* `delivery.routing.roleScopedAgents` is the **kill-switch for the role-scoped
|
|
15
|
-
* boot contexts** (Epic #4478, M7-B). It defaults to `true`: a converted spawn
|
|
16
|
-
* (`story-worker`, `acceptance-critic`) boots on its own
|
|
17
|
-
* `.claude/agents/<role>.md` system prompt instead of re-paying the full
|
|
18
|
-
* `CLAUDE.md` @-import closure, which is the whole payoff of the context diet
|
|
19
|
-
* (≈50KB → ≈8KB per spawn). When set to `false`, every converted spawn falls
|
|
20
|
-
* back to `subagent_type: general-purpose` — the instant, code-rollback-free
|
|
21
|
-
* per-consumer revert, and the universal escape for hosts that ignore
|
|
22
|
-
* `.claude/agents/`. Flipping it off never drops a gate: the fallback is the
|
|
23
|
-
* full-closure agent that ran before M7-B.
|
|
24
|
-
*
|
|
25
|
-
* Framework-defaults pattern mirrors `lib/config/ci.js#getCiDelivery`.
|
|
2
|
+
* `delivery.routing`: spawn boot context and ceremony profile. Only `strict`
|
|
3
|
+
* spawns a fresh-context critic; `minimal`/`standard` use the inline
|
|
4
|
+
* self-eval. `roleScopedAgents: false` falls every converted spawn back to
|
|
5
|
+
* `general-purpose` with the full closure — a revert that drops no gate.
|
|
26
6
|
*/
|
|
27
7
|
|
|
28
8
|
export const DELIVERY_ROUTING_DEFAULTS = Object.freeze({
|
|
29
9
|
roleScopedAgents: true,
|
|
30
10
|
/** @type {'minimal'|'standard'|'strict'} */
|
|
31
11
|
ceremonyProfile: 'standard',
|
|
32
|
-
/**
|
|
33
|
-
* When true (default), attended `/mandrel-deliver` lands through merge in one
|
|
34
|
-
* close (`--wait-merge` semantics) instead of stopping at `agent::closing`.
|
|
35
|
-
* Operators opt out per-run with `--no-wait-merge`.
|
|
36
|
-
*/
|
|
12
|
+
/** Land through merge in one close; opt out with `--no-wait-merge`. */
|
|
37
13
|
closeAndLand: true,
|
|
38
14
|
});
|
|
39
15
|
|
|
40
16
|
/**
|
|
41
|
-
* Normalize ceremony profile; unknown values → `standard`.
|
|
42
|
-
*
|
|
43
17
|
* @param {unknown} value
|
|
44
18
|
* @returns {'minimal'|'standard'|'strict'}
|
|
45
19
|
*/
|
|
@@ -51,10 +25,7 @@ function normalizeCeremonyProfile(value) {
|
|
|
51
25
|
}
|
|
52
26
|
|
|
53
27
|
/**
|
|
54
|
-
*
|
|
55
|
-
* any field the operator omitted. Accepts the full resolved config, the bare
|
|
56
|
-
* `delivery` bag, or the bare `routing` bag — mirroring `getCiDelivery`'s
|
|
57
|
-
* tolerant unwrap so callers can pass whichever shape they hold.
|
|
28
|
+
* Accepts the full config, the `delivery` bag, or the `routing` bag.
|
|
58
29
|
*
|
|
59
30
|
* @param {object | null | undefined} config
|
|
60
31
|
* @returns {{
|
|
@@ -1,25 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* config key mean, what is its effective value, and where did that value
|
|
6
|
-
* come from?". It pairs with the unified config resolver: the resolver
|
|
7
|
-
* decides the *effective* value, this module attributes that value to a
|
|
8
|
-
* *source* layer and pins a one-line *meaning* to every key.
|
|
9
|
-
*
|
|
10
|
-
* Source attribution is two-valued (Story #3690 removed the named
|
|
11
|
-
* config-profile layer):
|
|
12
|
-
* - `agentrc` — the key is present in the project's resolved `.agentrc.json`
|
|
13
|
-
* (including any `.agentrc.local.json` overlay). The operator
|
|
14
|
-
* set it.
|
|
15
|
-
* - `default` — the project does not carry the key; the framework default
|
|
16
|
-
* from `.agents/docs/agentrc-reference.json` applies.
|
|
17
|
-
*
|
|
18
|
-
* Secret hygiene: no key in the `.agentrc.json` surface is a credential today,
|
|
19
|
-
* but the report is defensive — any key whose dotted path matches a
|
|
20
|
-
* secret-shaped token (`token`, `secret`, `password`, `apiKey`, `credential`,
|
|
21
|
-
* …) has its value redacted to `null` and is flagged `redacted: true`. Only
|
|
22
|
-
* the *source* of a secret is ever reported, never the value.
|
|
2
|
+
* `mandrel explain`: each config key's effective value, source (`agentrc`
|
|
3
|
+
* incl. local overlay, or `default`) and one-line meaning. Secret-shaped keys
|
|
4
|
+
* report their source only; the value is redacted to `null`.
|
|
23
5
|
*/
|
|
24
6
|
|
|
25
7
|
import { resolveConfig } from '../config-resolver.js';
|
|
@@ -30,11 +12,7 @@ import {
|
|
|
30
12
|
} from './defaults.js';
|
|
31
13
|
|
|
32
14
|
/**
|
|
33
|
-
*
|
|
34
|
-
* case-insensitively against any segment of the dotted path. The
|
|
35
|
-
* `.agentrc.json` schema carries none of these today; the guard is forward
|
|
36
|
-
* defence so a future credential-shaped key never leaks its value through
|
|
37
|
-
* `mandrel explain`.
|
|
15
|
+
* Forward defence: no key matches today.
|
|
38
16
|
*
|
|
39
17
|
* @type {readonly RegExp[]}
|
|
40
18
|
*/
|
|
@@ -51,12 +29,7 @@ const SECRET_SEGMENT_PATTERNS = Object.freeze([
|
|
|
51
29
|
]);
|
|
52
30
|
|
|
53
31
|
/**
|
|
54
|
-
*
|
|
55
|
-
* paths (`...floors.*`) are covered by the prefix fallbacks below, so this
|
|
56
|
-
* map pins the operator-facing keys that benefit from a bespoke gloss. Any
|
|
57
|
-
* key without an exact entry falls back to the longest matching prefix gloss,
|
|
58
|
-
* then to a top-level block gloss, so every key always reports a non-empty
|
|
59
|
-
* meaning.
|
|
32
|
+
* Exact glosses; misses fall back to the longest prefix, then the block.
|
|
60
33
|
*
|
|
61
34
|
* @type {Readonly<Record<string, string>>}
|
|
62
35
|
*/
|
|
@@ -88,8 +61,6 @@ const KEY_MEANINGS = Object.freeze({
|
|
|
88
61
|
'github.projectOwner': 'Owner of the GitHub Projects board.',
|
|
89
62
|
'github.operatorHandle':
|
|
90
63
|
'GitHub @handle mentioned when a run needs operator attention.',
|
|
91
|
-
'github.defaultTimeoutMs':
|
|
92
|
-
'Default timeout (ms) for GitHub CLI / API calls when a caller does not supply one.',
|
|
93
64
|
'github.branchProtection.enforce':
|
|
94
65
|
'Whether the framework applies branch-protection rules.',
|
|
95
66
|
'github.branchProtection.requiredChecks':
|
|
@@ -118,14 +89,6 @@ const KEY_MEANINGS = Object.freeze({
|
|
|
118
89
|
'Tokens identifying the nav-registry SSOT a route-adding Story is expected to reference.',
|
|
119
90
|
|
|
120
91
|
// delivery.*
|
|
121
|
-
'delivery.execution.timeoutMs':
|
|
122
|
-
'Per-execution timeout for orchestrated delivery steps.',
|
|
123
|
-
'delivery.ci.watch.pollIntervalMs':
|
|
124
|
-
'Poll cadence (ms) for the merge/CI watch loop.',
|
|
125
|
-
'delivery.ci.watch.maxPolls':
|
|
126
|
-
'Maximum number of poll probes before the CI watch gives up.',
|
|
127
|
-
'delivery.ci.watch.maxResumes':
|
|
128
|
-
'Maximum times the CI watch may resume after a transient stall.',
|
|
129
92
|
'delivery.ci.autoMerge':
|
|
130
93
|
'Merge posture: trust-ci merges on green checks; strict also requires a clean review gate.',
|
|
131
94
|
'delivery.docsFreshness.paths':
|
|
@@ -146,14 +109,10 @@ const KEY_MEANINGS = Object.freeze({
|
|
|
146
109
|
'Whether a worktree is removed after a Story closes cleanly.',
|
|
147
110
|
'delivery.worktreeIsolation.bootstrapFiles':
|
|
148
111
|
'Files copied into each new worktree (e.g. .env, .mcp.json, local overrides).',
|
|
149
|
-
'delivery.mergeWatch.intervalSeconds':
|
|
150
|
-
'Poll cadence (seconds) for the close-and-land merge wait after the arm.',
|
|
151
112
|
'delivery.mergeWatch.maxBudgetSeconds':
|
|
152
113
|
'Cumulative wall-clock budget (seconds) across resumes before the merge wait gives up and blocks.',
|
|
153
114
|
'delivery.codeReview.providers':
|
|
154
115
|
'Ordered provider chain the code-review phase consults.',
|
|
155
|
-
'delivery.codeReview.maxFixAttempts':
|
|
156
|
-
'Maximum auto-fix attempts the code-review phase makes.',
|
|
157
116
|
'delivery.codeReview.autoFixSeverity':
|
|
158
117
|
'Severity threshold for on-branch code-review remediation (medium fixes 🔴/🟠/🟡, high fixes 🔴/🟠 only; default medium).',
|
|
159
118
|
'delivery.routing.roleScopedAgents':
|
|
@@ -164,8 +123,6 @@ const KEY_MEANINGS = Object.freeze({
|
|
|
164
123
|
'When true, single-story-close lands through merge in one close (opt out with --no-wait-merge).',
|
|
165
124
|
'delivery.feedbackLoop.retroProposals':
|
|
166
125
|
'When true, auto-file actionable retro proposals as follow-up issues.',
|
|
167
|
-
'delivery.quality.formatAutofix.timeoutMs':
|
|
168
|
-
'Bounded timeout (ms) for the close-time format autofix spawn.',
|
|
169
126
|
'delivery.quality.requireBaselines':
|
|
170
127
|
'When true, absent baseline artifacts fail close-validation instead of skipping cleanly.',
|
|
171
128
|
'delivery.quality.navigability.routeGlobs':
|
|
@@ -187,10 +144,6 @@ const KEY_MEANINGS = Object.freeze({
|
|
|
187
144
|
});
|
|
188
145
|
|
|
189
146
|
/**
|
|
190
|
-
* Prefix-keyed fallback glosses. Used when a key has no exact entry in
|
|
191
|
-
* `KEY_MEANINGS` (notably wildcard floor paths and per-gate sub-keys). The
|
|
192
|
-
* longest matching prefix wins.
|
|
193
|
-
*
|
|
194
147
|
* @type {ReadonlyArray<[string, string]>}
|
|
195
148
|
*/
|
|
196
149
|
const PREFIX_MEANINGS = Object.freeze([
|
|
@@ -198,20 +151,12 @@ const PREFIX_MEANINGS = Object.freeze([
|
|
|
198
151
|
'delivery.quality.gates',
|
|
199
152
|
'Quality-gate threshold/configuration for the delivery close gate.',
|
|
200
153
|
],
|
|
201
|
-
[
|
|
202
|
-
'delivery.quality.codingGuardrails',
|
|
203
|
-
'Per-commit coding-guardrail threshold.',
|
|
204
|
-
],
|
|
205
154
|
[
|
|
206
155
|
'delivery.quality.autoRefresh',
|
|
207
156
|
'Auto-refresh policy for ratcheted baselines.',
|
|
208
157
|
],
|
|
209
|
-
[
|
|
210
|
-
'delivery.quality.baselineEpsilon',
|
|
211
|
-
'Tolerance epsilon applied when comparing a quality baseline.',
|
|
212
|
-
],
|
|
213
158
|
['delivery.quality', 'Delivery-time quality configuration.'],
|
|
214
|
-
['delivery.mergeWatch', 'Merge-wait
|
|
159
|
+
['delivery.mergeWatch', 'Merge-wait posture and wall-clock budget.'],
|
|
215
160
|
[
|
|
216
161
|
'delivery.feedbackLoop',
|
|
217
162
|
'Opt-out toggles for auto-filing non-blocking findings.',
|
|
@@ -220,7 +165,7 @@ const PREFIX_MEANINGS = Object.freeze([
|
|
|
220
165
|
'delivery.routing',
|
|
221
166
|
'Delivery-spawn routing and acceptance-ceremony profile.',
|
|
222
167
|
],
|
|
223
|
-
['delivery.ci', 'CI-aware delivery namespace (
|
|
168
|
+
['delivery.ci', 'CI-aware delivery namespace (auto-merge, advisory checks).'],
|
|
224
169
|
[
|
|
225
170
|
'planning.navigation',
|
|
226
171
|
'Plan-time navigability reachability gate (route globs + nav registry).',
|
|
@@ -237,9 +182,6 @@ const PREFIX_MEANINGS = Object.freeze([
|
|
|
237
182
|
]);
|
|
238
183
|
|
|
239
184
|
/**
|
|
240
|
-
* Block-level fallback glosses by top-level prefix. Guarantees every key gets
|
|
241
|
-
* a non-empty meaning even if neither the exact map nor a prefix gloss matches.
|
|
242
|
-
*
|
|
243
185
|
* @type {Readonly<Record<string, string>>}
|
|
244
186
|
*/
|
|
245
187
|
const BLOCK_MEANINGS = Object.freeze({
|
|
@@ -251,8 +193,6 @@ const BLOCK_MEANINGS = Object.freeze({
|
|
|
251
193
|
});
|
|
252
194
|
|
|
253
195
|
/**
|
|
254
|
-
* Is `dottedPath` a secret-bearing key whose value must be redacted?
|
|
255
|
-
*
|
|
256
196
|
* @param {string} dottedPath
|
|
257
197
|
* @returns {boolean}
|
|
258
198
|
*/
|
|
@@ -265,8 +205,6 @@ export function isSecretKey(dottedPath) {
|
|
|
265
205
|
}
|
|
266
206
|
|
|
267
207
|
/**
|
|
268
|
-
* Resolve the one-line meaning for a dotted config key.
|
|
269
|
-
*
|
|
270
208
|
* @param {string} dottedPath
|
|
271
209
|
* @returns {string}
|
|
272
210
|
*/
|
|
@@ -274,7 +212,6 @@ export function meaningFor(dottedPath) {
|
|
|
274
212
|
if (Object.hasOwn(KEY_MEANINGS, dottedPath)) {
|
|
275
213
|
return KEY_MEANINGS[dottedPath];
|
|
276
214
|
}
|
|
277
|
-
// Longest matching prefix wins.
|
|
278
215
|
let best = null;
|
|
279
216
|
for (const [prefix, gloss] of PREFIX_MEANINGS) {
|
|
280
217
|
if (
|
|
@@ -291,12 +228,9 @@ export function meaningFor(dottedPath) {
|
|
|
291
228
|
}
|
|
292
229
|
|
|
293
230
|
/**
|
|
294
|
-
* Attribute a key's effective value to a source layer and capture the value
|
|
295
|
-
* the resolver actually applies.
|
|
296
|
-
*
|
|
297
231
|
* @param {string} dottedPath
|
|
298
|
-
* @param {object|null} rawAgentrc
|
|
299
|
-
* @param {unknown} defaultValue
|
|
232
|
+
* @param {object|null} rawAgentrc — merged agentrc + local overlay.
|
|
233
|
+
* @param {unknown} defaultValue
|
|
300
234
|
* @returns {{ source: 'agentrc'|'default', value: unknown }}
|
|
301
235
|
*/
|
|
302
236
|
function attribute(dottedPath, rawAgentrc, defaultValue) {
|
|
@@ -308,12 +242,7 @@ function attribute(dottedPath, rawAgentrc, defaultValue) {
|
|
|
308
242
|
}
|
|
309
243
|
|
|
310
244
|
/**
|
|
311
|
-
* Build the config-explain report: one entry per known config key, each
|
|
312
|
-
* carrying its effective value, source layer, and one-line meaning.
|
|
313
|
-
*
|
|
314
245
|
* @param {{ cwd?: string }} [opts]
|
|
315
|
-
* - `cwd`: project root whose `.agentrc.json` is resolved (default: the
|
|
316
|
-
* framework root via `resolveConfig`).
|
|
317
246
|
* @returns {Array<{
|
|
318
247
|
* key: string,
|
|
319
248
|
* value: unknown,
|
|
@@ -21,18 +21,6 @@ export const COVERAGE_GATE = {
|
|
|
21
21
|
'Repo-relative path to the Istanbul `coverage-final.json` the capture step writes and the gate reads.',
|
|
22
22
|
default: COVERAGE_GATE_DEFAULTS.coveragePath,
|
|
23
23
|
},
|
|
24
|
-
// Story #2136 / Task #2142 — bounded timeout for `npm run test:coverage`.
|
|
25
|
-
// Wired into `runCapture` via `spawnSync({ timeout, killSignal })`. A
|
|
26
|
-
// SIGKILL fired by the timeout is translated to exit code 124 (the GNU
|
|
27
|
-
// `timeout` convention) so close-validation can branch on "hang" vs.
|
|
28
|
-
// "test failed".
|
|
29
|
-
timeoutMs: {
|
|
30
|
-
type: 'integer',
|
|
31
|
-
minimum: 1,
|
|
32
|
-
description:
|
|
33
|
-
'Bounded timeout (ms) for the `npm run test:coverage` capture spawn. A SIGKILL at the budget boundary maps to exit 124 so close-validation can tell a hang from a test failure.',
|
|
34
|
-
default: COVERAGE_GATE_DEFAULTS.timeoutMs,
|
|
35
|
-
},
|
|
36
24
|
},
|
|
37
25
|
additionalProperties: false,
|
|
38
26
|
};
|
|
@@ -1,31 +1,8 @@
|
|
|
1
1
|
/* node:coverage ignore file -- AJV schema declaration (data-as-code) */
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* `delivery.quality.gates.crap.incrementalCoverage
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* Split into its own module (rather than an inline property literal on
|
|
8
|
-
* `CRAP_GATE`) so the schema addition lands as a new file, not a same-file
|
|
9
|
-
* expansion of `crap.schema.js` — the file this module's sole export is
|
|
10
|
-
* spread into.
|
|
11
|
-
*
|
|
12
|
-
* The two switches are deliberately independent because they are not equally
|
|
13
|
-
* safe:
|
|
14
|
-
*
|
|
15
|
-
* - **`skipWhenUnchanged`** (default `true`) decides *whether* to capture:
|
|
16
|
-
* no changed file under `crap.targetDirs` versus `baseRef` means no
|
|
17
|
-
* capture at all. It is a pure saving — the gates score exactly what they
|
|
18
|
-
* scored before, because nothing they score moved.
|
|
19
|
-
* - **`baselineJoin`** (default `false`) loosens gate semantics: the CRAP
|
|
20
|
-
* join resolves a method in an untouched file from its committed baseline
|
|
21
|
-
* row instead of requiring fresh coverage for it.
|
|
22
|
-
*
|
|
23
|
-
* Bundling them under one `enabled` switch is what forced the earlier default
|
|
24
|
-
* flip to be reverted. `enabled` survives as a deprecated alias that sets
|
|
25
|
-
* both.
|
|
26
|
-
*
|
|
27
|
-
* Neither switch narrows the capture run itself: a capture that does happen is
|
|
28
|
-
* the ordinary full `npm run test:coverage` (Story #5065).
|
|
4
|
+
* `delivery.quality.gates.crap.incrementalCoverage`; the two switches stay
|
|
5
|
+
* independent because only `baselineJoin` loosens the gate.
|
|
29
6
|
*/
|
|
30
7
|
export const INCREMENTAL_COVERAGE_SCHEMA = {
|
|
31
8
|
type: 'object',
|
|
@@ -44,11 +21,6 @@ export const INCREMENTAL_COVERAGE_SCHEMA = {
|
|
|
44
21
|
'Let the CRAP join resolve a method in a file the diff did not touch from its committed baseline row instead of requiring fresh coverage for it. A gate loosening, not a saving — defaults to false.',
|
|
45
22
|
default: false,
|
|
46
23
|
},
|
|
47
|
-
enabled: {
|
|
48
|
-
type: 'boolean',
|
|
49
|
-
description:
|
|
50
|
-
'DEPRECATED alias for setting both `skipWhenUnchanged` and `baselineJoin`. Prefer the two switches: they are not equally safe, and bundling them is why the earlier default flip was reverted. Either explicit switch overrides this alias.',
|
|
51
|
-
},
|
|
52
24
|
baseRef: {
|
|
53
25
|
type: 'string',
|
|
54
26
|
minLength: 1,
|
|
@@ -2,11 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { CRAP_GATE_DEFAULTS } from '../quality.js';
|
|
4
4
|
import { INCREMENTAL_COVERAGE_SCHEMA } from './crap-incremental-coverage.schema.js';
|
|
5
|
-
import {
|
|
6
|
-
gateBase,
|
|
7
|
-
LIST_OR_EXTENDER_OF_STRINGS,
|
|
8
|
-
SAFE_STRING,
|
|
9
|
-
} from './shared.js';
|
|
5
|
+
import { gateBase, LIST_OR_EXTENDER_OF_STRINGS } from './shared.js';
|
|
10
6
|
|
|
11
7
|
export const CRAP_GATE = {
|
|
12
8
|
type: 'object',
|
|
@@ -38,7 +34,6 @@ export const CRAP_GATE = {
|
|
|
38
34
|
'When true, the gate refuses to score without a coverage artifact rather than silently reporting complexity-only rows.',
|
|
39
35
|
default: CRAP_GATE_DEFAULTS.requireCoverage,
|
|
40
36
|
},
|
|
41
|
-
// Story #4775 — fail-closed floor on the per-method coverage JOIN.
|
|
42
37
|
minMethodResolutionRate: {
|
|
43
38
|
type: 'number',
|
|
44
39
|
minimum: 0,
|
|
@@ -46,34 +41,6 @@ export const CRAP_GATE = {
|
|
|
46
41
|
description:
|
|
47
42
|
'Fail-closed floor on the per-method coverage JOIN (Story #4775): the fraction of methods that must resolve a coverage entry, counted only over files that HAVE one, before `update-crap-baseline.js` will persist. A broken join is silent by construction — unresolved methods are simply absent — so the updater refuses rather than writing a thin baseline and logging it as success. Not enforced below 25 joinable methods, where a diff-scoped run’s rate is noise. Default 0.75; a healthy repo resolves ~98%.',
|
|
48
43
|
},
|
|
49
|
-
friction: {
|
|
50
|
-
type: 'object',
|
|
51
|
-
description:
|
|
52
|
-
'Friction-signal wiring for a CRAP baseline regression, so a recurring one can reach the actionable threshold.',
|
|
53
|
-
properties: {
|
|
54
|
-
markerKey: {
|
|
55
|
-
type: 'string',
|
|
56
|
-
minLength: 1,
|
|
57
|
-
description: 'Signal marker key the regression is recorded under.',
|
|
58
|
-
},
|
|
59
|
-
},
|
|
60
|
-
additionalProperties: false,
|
|
61
|
-
default: { ...CRAP_GATE_DEFAULTS.friction },
|
|
62
|
-
},
|
|
63
|
-
refreshTag: {
|
|
64
|
-
...SAFE_STRING,
|
|
65
|
-
minLength: 1,
|
|
66
|
-
description:
|
|
67
|
-
'Commit-subject substring that acknowledges a deliberate CRAP baseline refresh in the compared range. A range commit carrying it that also touches the baseline file demotes head-vs-base regressions; floors stay enforced.',
|
|
68
|
-
default: CRAP_GATE_DEFAULTS.refreshTag,
|
|
69
|
-
},
|
|
70
|
-
refreshTimeoutMs: {
|
|
71
|
-
type: 'integer',
|
|
72
|
-
minimum: 1,
|
|
73
|
-
description:
|
|
74
|
-
'Bounded timeout (ms) for `npm run crap:update` spawned by the baseline-attribution refresh path. Mirrors `coverage.timeoutMs`: a SIGKILL fired at the budget boundary maps to exit 124 so the close orchestrator can flip the Story to `agent::blocked`. Default 60000 (Story #2165).',
|
|
75
|
-
default: CRAP_GATE_DEFAULTS.refreshTimeoutMs,
|
|
76
|
-
},
|
|
77
44
|
ignoreGlobs: {
|
|
78
45
|
type: 'array',
|
|
79
46
|
items: { type: 'string', minLength: 1 },
|
|
@@ -5,7 +5,7 @@ import { gateBase, LIST_OR_EXTENDER_OF_STRINGS } from './shared.js';
|
|
|
5
5
|
export const DUPLICATION_GATE = {
|
|
6
6
|
type: 'object',
|
|
7
7
|
description:
|
|
8
|
-
'Code-duplication (DRY) gate (Story #3664). Shares the gate base and adds the scan-scope extras: the `targetDirs` the duplication scanner walks
|
|
8
|
+
'Code-duplication (DRY) gate (Story #3664). Shares the gate base and adds the scan-scope extras: the `targetDirs` the duplication scanner walks and `ignoreGlobs` to exclude files from the scan.',
|
|
9
9
|
properties: {
|
|
10
10
|
...gateBase({
|
|
11
11
|
enabled: false,
|
|
@@ -19,13 +19,6 @@ export const DUPLICATION_GATE = {
|
|
|
19
19
|
"Directories whose JS sources the duplication (DRY) gate scans for copy-paste clones. Mandrel ships a `src/`-centric default; projects whose executable code lives elsewhere (e.g. this repo's `.agents/scripts/`) override here. The framework default is intentionally not auto-discovered, so an override is the explicit, auditable signal (Story #3664).",
|
|
20
20
|
default: ['src'],
|
|
21
21
|
},
|
|
22
|
-
refreshTimeoutMs: {
|
|
23
|
-
type: 'integer',
|
|
24
|
-
minimum: 1,
|
|
25
|
-
description:
|
|
26
|
-
'Bounded timeout (ms) for `npm run duplication:update` spawned by the baseline-attribution refresh path. Mirrors `crap.refreshTimeoutMs` / `coverage.timeoutMs`: a SIGKILL fired at the budget boundary maps to exit 124. Default 60000 (Story #3664).',
|
|
27
|
-
default: 60000,
|
|
28
|
-
},
|
|
29
22
|
ignoreGlobs: {
|
|
30
23
|
type: 'array',
|
|
31
24
|
items: { type: 'string', minLength: 1 },
|
|
@@ -4,34 +4,19 @@ import { BUNDLE_SIZE_GATE } from './bundle-size.schema.js';
|
|
|
4
4
|
import { COVERAGE_GATE } from './coverage.schema.js';
|
|
5
5
|
import { CRAP_GATE } from './crap.schema.js';
|
|
6
6
|
import { DUPLICATION_GATE } from './duplication.schema.js';
|
|
7
|
-
import { LIGHTHOUSE_GATE } from './lighthouse.schema.js';
|
|
8
|
-
import { LINT_GATE } from './lint.schema.js';
|
|
9
7
|
import { MAINTAINABILITY_GATE } from './maintainability.schema.js';
|
|
10
8
|
import { MUTATION_GATE } from './mutation.schema.js';
|
|
11
9
|
|
|
12
|
-
/**
|
|
13
|
-
* Composite `delivery.quality.gates` schema — closed shape.
|
|
14
|
-
*
|
|
15
|
-
* Split from the former `lib/config-gates-schema.js` aggregate
|
|
16
|
-
* (Story #2987) into per-gate sub-schema files under
|
|
17
|
-
* `lib/config/gates/`. Shared fragments (`gateBase()`, `SAFE_STRING`,
|
|
18
|
-
* `TOLERANCE_SCHEMA`, `FLOORS_SCHEMA`, `COMPONENTS_SCHEMA`,
|
|
19
|
-
* `LIST_OR_EXTENDER_OF_STRINGS`, `NULLABLE_NONEMPTY_SAFE_STRING`) live
|
|
20
|
-
* in `./shared.js`. Each per-gate file exports one sub-schema literal
|
|
21
|
-
* with the gate-specific extras layered on top of `gateBase()`, passing
|
|
22
|
-
* that gate's own base-field defaults (Story #5007).
|
|
23
|
-
*/
|
|
10
|
+
/** Composite `delivery.quality.gates` schema — closed shape. */
|
|
24
11
|
export const GATES_SCHEMA = {
|
|
25
12
|
type: 'object',
|
|
26
13
|
description:
|
|
27
|
-
'The
|
|
14
|
+
'The six quality gates, each sharing the `{ enabled, baselinePath, tolerance, floors, components }` base.',
|
|
28
15
|
properties: {
|
|
29
|
-
lint: LINT_GATE,
|
|
30
16
|
coverage: COVERAGE_GATE,
|
|
31
17
|
crap: CRAP_GATE,
|
|
32
18
|
maintainability: MAINTAINABILITY_GATE,
|
|
33
19
|
mutation: MUTATION_GATE,
|
|
34
|
-
lighthouse: LIGHTHOUSE_GATE,
|
|
35
20
|
'bundle-size': BUNDLE_SIZE_GATE,
|
|
36
21
|
duplication: DUPLICATION_GATE,
|
|
37
22
|
},
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
/* node:coverage ignore file -- AJV schema declaration (data-as-code) */
|
|
2
2
|
|
|
3
3
|
import { MAINTAINABILITY_GATE_DEFAULTS } from '../quality.js';
|
|
4
|
-
import {
|
|
5
|
-
gateBase,
|
|
6
|
-
LIST_OR_EXTENDER_OF_STRINGS,
|
|
7
|
-
SAFE_STRING,
|
|
8
|
-
} from './shared.js';
|
|
4
|
+
import { gateBase, LIST_OR_EXTENDER_OF_STRINGS } from './shared.js';
|
|
9
5
|
|
|
10
6
|
export const MAINTAINABILITY_GATE = {
|
|
11
7
|
type: 'object',
|
|
@@ -24,21 +20,6 @@ export const MAINTAINABILITY_GATE = {
|
|
|
24
20
|
"Directories whose JS sources the maintainability gate scores. Mandrel ships a `src/`-centric default; projects whose executable code lives elsewhere (e.g. this repo's `.agents/scripts/` plus `tests/`) override here. The framework default is intentionally not auto-discovered, so an override is the explicit, auditable signal.",
|
|
25
21
|
default: [...MAINTAINABILITY_GATE_DEFAULTS.targetDirs],
|
|
26
22
|
},
|
|
27
|
-
// Story #4731 — commit-subject substring that acknowledges a deliberate
|
|
28
|
-
// maintainability baseline refresh in the compared range.
|
|
29
|
-
refreshTag: {
|
|
30
|
-
...SAFE_STRING,
|
|
31
|
-
minLength: 1,
|
|
32
|
-
description:
|
|
33
|
-
"Commit-subject substring that acknowledges a deliberate maintainability baseline refresh in the compared range. Mirrors the CRAP gate's `refreshTag`; a range commit carrying it that touches the baseline file demotes head-vs-base regressions (floors still enforced).",
|
|
34
|
-
},
|
|
35
|
-
refreshTimeoutMs: {
|
|
36
|
-
type: 'integer',
|
|
37
|
-
minimum: 1,
|
|
38
|
-
description:
|
|
39
|
-
'Bounded timeout (ms) for `npm run maintainability:update` spawned by the baseline-attribution refresh path. Mirrors `coverage.timeoutMs`: a SIGKILL fired at the budget boundary maps to exit 124 so the close orchestrator can flip the Story to `agent::blocked`. Default 60000 (Story #2165).',
|
|
40
|
-
default: MAINTAINABILITY_GATE_DEFAULTS.refreshTimeoutMs,
|
|
41
|
-
},
|
|
42
23
|
ignoreGlobs: {
|
|
43
24
|
type: 'array',
|
|
44
25
|
items: { type: 'string', minLength: 1 },
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* node:coverage ignore file -- AJV schema declaration (data-as-code) */
|
|
2
2
|
|
|
3
|
-
import { gateBase
|
|
3
|
+
import { gateBase } from './shared.js';
|
|
4
4
|
|
|
5
5
|
export const MUTATION_GATE = {
|
|
6
6
|
type: 'object',
|
|
@@ -13,12 +13,6 @@ export const MUTATION_GATE = {
|
|
|
13
13
|
tolerance: { kind: 'percent', value: 0 },
|
|
14
14
|
floors: { '*': { score: 60 } },
|
|
15
15
|
}),
|
|
16
|
-
strykerConfigPath: {
|
|
17
|
-
...NULLABLE_NONEMPTY_SAFE_STRING,
|
|
18
|
-
description:
|
|
19
|
-
'Repo-relative path to the Stryker config. `null` lets Stryker resolve its own default.',
|
|
20
|
-
default: null,
|
|
21
|
-
},
|
|
22
16
|
},
|
|
23
17
|
additionalProperties: false,
|
|
24
18
|
};
|