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
|
@@ -163,12 +163,6 @@
|
|
|
163
163
|
"description": "The human the framework escalates to, `@`-prefixed. Used for HITL @-mentions on `agent::blocked`.",
|
|
164
164
|
"default": "@[USERNAME]"
|
|
165
165
|
},
|
|
166
|
-
"defaultTimeoutMs": {
|
|
167
|
-
"type": "integer",
|
|
168
|
-
"minimum": 1000,
|
|
169
|
-
"description": "Default `timeoutMs` applied to every `gh` subprocess the provider facade spawns, so a stalled socket or long-poll cannot hang an orchestration indefinitely. A `GhExecTimeoutError` from a hit ceiling is classified `transient` and retried by `withTransientRetry`. Story #2860.",
|
|
170
|
-
"default": 60000
|
|
171
|
-
},
|
|
172
166
|
"followUpRepos": {
|
|
173
167
|
"type": "object",
|
|
174
168
|
"description": "Repository slugs for the non-consumer follow-up ownership buckets, used when a CI gap, retro proposal, or audit finding belongs to someone other than the repo that surfaced it.",
|
|
@@ -327,21 +321,8 @@
|
|
|
327
321
|
},
|
|
328
322
|
"planning": {
|
|
329
323
|
"type": "object",
|
|
330
|
-
"description": "Inputs to `/mandrel-plan`: the
|
|
324
|
+
"description": "Inputs to `/mandrel-plan`: the opt-in navigability reachability gate.",
|
|
331
325
|
"properties": {
|
|
332
|
-
"memoryPool": {
|
|
333
|
-
"type": "object",
|
|
334
|
-
"description": "Threshold for the memory-hygiene advisory `/mandrel-plan` surfaces at Gate #1. Advisory only: it recommends `/memory-consolidate` and never gates, reroutes, or mutates the memory pool.",
|
|
335
|
-
"properties": {
|
|
336
|
-
"indexByteCeiling": {
|
|
337
|
-
"type": "integer",
|
|
338
|
-
"minimum": 1,
|
|
339
|
-
"description": "Recommend a consolidation pass once the pool's `MEMORY.md` index exceeds this many bytes. The harness truncates the index it loads into each session at its own byte cap, so an oversized index is a loss already happening — every entry listed after the cut is invisible — rather than a hygiene forecast. Default 24576, the harness cap itself.",
|
|
340
|
-
"default": 24576
|
|
341
|
-
}
|
|
342
|
-
},
|
|
343
|
-
"additionalProperties": false
|
|
344
|
-
},
|
|
345
326
|
"navigation": {
|
|
346
327
|
"type": "object",
|
|
347
328
|
"description": "Opt-in navigability reachability gate. Absent or empty routeGlobs is a silent no-op.",
|
|
@@ -370,27 +351,16 @@
|
|
|
370
351
|
},
|
|
371
352
|
"delivery": {
|
|
372
353
|
"type": "object",
|
|
373
|
-
"description": "Everything `/mandrel-deliver` and `single-story-close` consume:
|
|
354
|
+
"description": "Everything `/mandrel-deliver` and `single-story-close` consume: worktree isolation, runner concurrency, docs freshness, quality gates, merge/CI watch, review ceremony, and the feedback loop.",
|
|
374
355
|
"properties": {
|
|
375
356
|
"execution": {
|
|
376
357
|
"type": "object",
|
|
377
|
-
"description": "
|
|
358
|
+
"description": "Serialization of the full-suite spawns delivery drives.",
|
|
378
359
|
"properties": {
|
|
379
|
-
"timeoutMs": {
|
|
380
|
-
"type": "integer",
|
|
381
|
-
"minimum": 1,
|
|
382
|
-
"description": "Per-command timeout (ms) for the long-running spawns delivery drives — the close-validation chain and the gate CLIs.",
|
|
383
|
-
"default": 600000
|
|
384
|
-
},
|
|
385
360
|
"fullSuiteLock": {
|
|
386
361
|
"type": "boolean",
|
|
387
362
|
"description": "Serialize full-suite spawns (`npm test` / `npm run test:coverage`) behind a host-level advisory lock, so two concurrent deliveries on one checkout do not run two suites against the same cores. Best-effort: a wait that expires spawns anyway, so the lock can never fail a delivery. Set false — or export `MANDREL_FULL_SUITE_LOCK=0` for one invocation — to disable.",
|
|
388
363
|
"default": true
|
|
389
|
-
},
|
|
390
|
-
"requireCreditedCapture": {
|
|
391
|
-
"type": "boolean",
|
|
392
|
-
"description": "Refuse a full-suite coverage capture that no committed stamp covers, instead of paying for it. Default false — the run is announced (a warning naming the crediting invocation, emitted before the spawn) and then executed, which is the pre-existing behaviour. Set true when the whole-suite cost is large enough that a close should stop at zero seconds rather than absorb it silently.",
|
|
393
|
-
"default": false
|
|
394
364
|
}
|
|
395
365
|
},
|
|
396
366
|
"additionalProperties": false
|
|
@@ -423,12 +393,6 @@
|
|
|
423
393
|
"description": "Master switch. Default true — reclaiming a landed Story's gate transcripts and validation evidence is the behaviour, and this knob turns it off. When false every purge path is a reported no-op.",
|
|
424
394
|
"default": true
|
|
425
395
|
},
|
|
426
|
-
"staleDays": {
|
|
427
|
-
"type": "integer",
|
|
428
|
-
"minimum": 1,
|
|
429
|
-
"description": "Age floor (days, default 7) for the families no Story id can be recovered from — roster-level audit reports and abandoned plan-<slug>/ dirs. Story-keyed artifacts do not wait for it: they are purged as soon as their merge is confirmed.",
|
|
430
|
-
"default": 7
|
|
431
|
-
},
|
|
432
396
|
"classes": {
|
|
433
397
|
"type": "object",
|
|
434
398
|
"description": "Per-class opt-out. Each defaults to true; set one false to keep that family while the rest are purged.",
|
|
@@ -549,100 +513,12 @@
|
|
|
549
513
|
},
|
|
550
514
|
"quality": {
|
|
551
515
|
"type": "object",
|
|
552
|
-
"description": "Quality-gate configuration. Every gate lives under `gates.<tier>` and shares the same `{ enabled, baselinePath, tolerance, floors, components }` base
|
|
516
|
+
"description": "Quality-gate configuration. Every gate lives under `gates.<tier>` and shares the same `{ enabled, baselinePath, tolerance, floors, components }` base.",
|
|
553
517
|
"properties": {
|
|
554
|
-
"gateScoping": {
|
|
555
|
-
"type": "object",
|
|
556
|
-
"description": "Shared scope applied to every gate that supports one, unless the gate overrides it.",
|
|
557
|
-
"properties": {
|
|
558
|
-
"scope": {
|
|
559
|
-
"type": "string",
|
|
560
|
-
"enum": ["diff", "full"],
|
|
561
|
-
"description": "Score only the files changed against `diffRef` (`diff`) or every file in the gate target dirs (`full`).",
|
|
562
|
-
"default": "diff"
|
|
563
|
-
},
|
|
564
|
-
"diffRef": {
|
|
565
|
-
"type": "string",
|
|
566
|
-
"minLength": 1,
|
|
567
|
-
"description": "Git ref the `diff` scope is computed against.",
|
|
568
|
-
"default": "main"
|
|
569
|
-
}
|
|
570
|
-
},
|
|
571
|
-
"additionalProperties": false
|
|
572
|
-
},
|
|
573
518
|
"gates": {
|
|
574
519
|
"type": "object",
|
|
575
|
-
"description": "The
|
|
520
|
+
"description": "The six quality gates, each sharing the `{ enabled, baselinePath, tolerance, floors, components }` base.",
|
|
576
521
|
"properties": {
|
|
577
|
-
"lint": {
|
|
578
|
-
"type": "object",
|
|
579
|
-
"description": "Lint-count ratchet. Floors are absolute error/warning counts; the baseline pins the current count so a regression is visible even while the floor is not yet met.",
|
|
580
|
-
"properties": {
|
|
581
|
-
"enabled": {
|
|
582
|
-
"type": "boolean",
|
|
583
|
-
"description": "When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.",
|
|
584
|
-
"default": true
|
|
585
|
-
},
|
|
586
|
-
"baselinePath": {
|
|
587
|
-
"type": "string",
|
|
588
|
-
"not": {
|
|
589
|
-
"pattern": "([;&|`]|\\$\\()"
|
|
590
|
-
},
|
|
591
|
-
"minLength": 1,
|
|
592
|
-
"description": "Repo-root-relative path to the gate's committed baseline artifact.",
|
|
593
|
-
"default": "baselines/lint.json"
|
|
594
|
-
},
|
|
595
|
-
"tolerance": {
|
|
596
|
-
"type": "object",
|
|
597
|
-
"description": "How much a rollup may drift from the committed baseline before the gate reports a regression.",
|
|
598
|
-
"required": ["kind", "value"],
|
|
599
|
-
"properties": {
|
|
600
|
-
"kind": {
|
|
601
|
-
"type": "string",
|
|
602
|
-
"enum": ["absolute", "percent"],
|
|
603
|
-
"description": "Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."
|
|
604
|
-
},
|
|
605
|
-
"value": {
|
|
606
|
-
"type": "number",
|
|
607
|
-
"minimum": 0,
|
|
608
|
-
"description": "The tolerance magnitude. 0 means no drift is allowed."
|
|
609
|
-
}
|
|
610
|
-
},
|
|
611
|
-
"additionalProperties": false,
|
|
612
|
-
"default": {
|
|
613
|
-
"kind": "absolute",
|
|
614
|
-
"value": 0
|
|
615
|
-
}
|
|
616
|
-
},
|
|
617
|
-
"floors": {
|
|
618
|
-
"type": "object",
|
|
619
|
-
"description": "Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.",
|
|
620
|
-
"additionalProperties": {
|
|
621
|
-
"type": "object",
|
|
622
|
-
"additionalProperties": {
|
|
623
|
-
"type": "number"
|
|
624
|
-
}
|
|
625
|
-
},
|
|
626
|
-
"default": {
|
|
627
|
-
"*": {
|
|
628
|
-
"errorCount": 0
|
|
629
|
-
}
|
|
630
|
-
}
|
|
631
|
-
},
|
|
632
|
-
"components": {
|
|
633
|
-
"type": "object",
|
|
634
|
-
"description": "Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.",
|
|
635
|
-
"additionalProperties": {
|
|
636
|
-
"type": "array",
|
|
637
|
-
"items": {
|
|
638
|
-
"type": "string",
|
|
639
|
-
"minLength": 1
|
|
640
|
-
}
|
|
641
|
-
}
|
|
642
|
-
}
|
|
643
|
-
},
|
|
644
|
-
"additionalProperties": false
|
|
645
|
-
},
|
|
646
522
|
"coverage": {
|
|
647
523
|
"type": "object",
|
|
648
524
|
"description": "Line/branch/function coverage ratchet, read from the Istanbul JSON summary the project test run emits.",
|
|
@@ -719,12 +595,6 @@
|
|
|
719
595
|
"minLength": 1,
|
|
720
596
|
"description": "Repo-relative path to the Istanbul `coverage-final.json` the capture step writes and the gate reads.",
|
|
721
597
|
"default": "coverage/coverage-final.json"
|
|
722
|
-
},
|
|
723
|
-
"timeoutMs": {
|
|
724
|
-
"type": "integer",
|
|
725
|
-
"minimum": 1,
|
|
726
|
-
"description": "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.",
|
|
727
|
-
"default": 600000
|
|
728
598
|
}
|
|
729
599
|
},
|
|
730
600
|
"additionalProperties": false
|
|
@@ -844,36 +714,6 @@
|
|
|
844
714
|
"maximum": 1,
|
|
845
715
|
"description": "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%."
|
|
846
716
|
},
|
|
847
|
-
"friction": {
|
|
848
|
-
"type": "object",
|
|
849
|
-
"description": "Friction-signal wiring for a CRAP baseline regression, so a recurring one can reach the actionable threshold.",
|
|
850
|
-
"properties": {
|
|
851
|
-
"markerKey": {
|
|
852
|
-
"type": "string",
|
|
853
|
-
"minLength": 1,
|
|
854
|
-
"description": "Signal marker key the regression is recorded under."
|
|
855
|
-
}
|
|
856
|
-
},
|
|
857
|
-
"additionalProperties": false,
|
|
858
|
-
"default": {
|
|
859
|
-
"markerKey": "crap-baseline-regression"
|
|
860
|
-
}
|
|
861
|
-
},
|
|
862
|
-
"refreshTag": {
|
|
863
|
-
"type": "string",
|
|
864
|
-
"not": {
|
|
865
|
-
"pattern": "([;&|`]|\\$\\()"
|
|
866
|
-
},
|
|
867
|
-
"minLength": 1,
|
|
868
|
-
"description": "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.",
|
|
869
|
-
"default": "baseline-refresh:"
|
|
870
|
-
},
|
|
871
|
-
"refreshTimeoutMs": {
|
|
872
|
-
"type": "integer",
|
|
873
|
-
"minimum": 1,
|
|
874
|
-
"description": "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).",
|
|
875
|
-
"default": 60000
|
|
876
|
-
},
|
|
877
717
|
"ignoreGlobs": {
|
|
878
718
|
"type": "array",
|
|
879
719
|
"items": {
|
|
@@ -897,10 +737,6 @@
|
|
|
897
737
|
"description": "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.",
|
|
898
738
|
"default": false
|
|
899
739
|
},
|
|
900
|
-
"enabled": {
|
|
901
|
-
"type": "boolean",
|
|
902
|
-
"description": "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."
|
|
903
|
-
},
|
|
904
740
|
"baseRef": {
|
|
905
741
|
"type": "string",
|
|
906
742
|
"minLength": 1,
|
|
@@ -1008,20 +844,6 @@
|
|
|
1008
844
|
"description": "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.",
|
|
1009
845
|
"default": []
|
|
1010
846
|
},
|
|
1011
|
-
"refreshTag": {
|
|
1012
|
-
"type": "string",
|
|
1013
|
-
"not": {
|
|
1014
|
-
"pattern": "([;&|`]|\\$\\()"
|
|
1015
|
-
},
|
|
1016
|
-
"minLength": 1,
|
|
1017
|
-
"description": "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)."
|
|
1018
|
-
},
|
|
1019
|
-
"refreshTimeoutMs": {
|
|
1020
|
-
"type": "integer",
|
|
1021
|
-
"minimum": 1,
|
|
1022
|
-
"description": "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).",
|
|
1023
|
-
"default": 60000
|
|
1024
|
-
},
|
|
1025
847
|
"ignoreGlobs": {
|
|
1026
848
|
"type": "array",
|
|
1027
849
|
"items": {
|
|
@@ -1099,121 +921,6 @@
|
|
|
1099
921
|
"minLength": 1
|
|
1100
922
|
}
|
|
1101
923
|
}
|
|
1102
|
-
},
|
|
1103
|
-
"strykerConfigPath": {
|
|
1104
|
-
"type": ["string", "null"],
|
|
1105
|
-
"minLength": 1,
|
|
1106
|
-
"not": {
|
|
1107
|
-
"type": "string",
|
|
1108
|
-
"pattern": "([;&|`]|\\$\\()"
|
|
1109
|
-
},
|
|
1110
|
-
"description": "Repo-relative path to the Stryker config. `null` lets Stryker resolve its own default.",
|
|
1111
|
-
"default": null
|
|
1112
|
-
}
|
|
1113
|
-
},
|
|
1114
|
-
"additionalProperties": false
|
|
1115
|
-
},
|
|
1116
|
-
"lighthouse": {
|
|
1117
|
-
"type": "object",
|
|
1118
|
-
"description": "Lighthouse category-score ratchet for web targets. Off by default — it needs a running deployment.",
|
|
1119
|
-
"properties": {
|
|
1120
|
-
"enabled": {
|
|
1121
|
-
"type": "boolean",
|
|
1122
|
-
"description": "When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.",
|
|
1123
|
-
"default": false
|
|
1124
|
-
},
|
|
1125
|
-
"baselinePath": {
|
|
1126
|
-
"type": "string",
|
|
1127
|
-
"not": {
|
|
1128
|
-
"pattern": "([;&|`]|\\$\\()"
|
|
1129
|
-
},
|
|
1130
|
-
"minLength": 1,
|
|
1131
|
-
"description": "Repo-root-relative path to the gate's committed baseline artifact.",
|
|
1132
|
-
"default": "baselines/lighthouse.json"
|
|
1133
|
-
},
|
|
1134
|
-
"tolerance": {
|
|
1135
|
-
"type": "object",
|
|
1136
|
-
"description": "How much a rollup may drift from the committed baseline before the gate reports a regression.",
|
|
1137
|
-
"required": ["kind", "value"],
|
|
1138
|
-
"properties": {
|
|
1139
|
-
"kind": {
|
|
1140
|
-
"type": "string",
|
|
1141
|
-
"enum": ["absolute", "percent"],
|
|
1142
|
-
"description": "Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."
|
|
1143
|
-
},
|
|
1144
|
-
"value": {
|
|
1145
|
-
"type": "number",
|
|
1146
|
-
"minimum": 0,
|
|
1147
|
-
"description": "The tolerance magnitude. 0 means no drift is allowed."
|
|
1148
|
-
}
|
|
1149
|
-
},
|
|
1150
|
-
"additionalProperties": false,
|
|
1151
|
-
"default": {
|
|
1152
|
-
"kind": "absolute",
|
|
1153
|
-
"value": 0
|
|
1154
|
-
}
|
|
1155
|
-
},
|
|
1156
|
-
"floors": {
|
|
1157
|
-
"type": "object",
|
|
1158
|
-
"description": "Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.",
|
|
1159
|
-
"additionalProperties": {
|
|
1160
|
-
"type": "object",
|
|
1161
|
-
"additionalProperties": {
|
|
1162
|
-
"type": "number"
|
|
1163
|
-
}
|
|
1164
|
-
},
|
|
1165
|
-
"default": {
|
|
1166
|
-
"*": {
|
|
1167
|
-
"performance": 0,
|
|
1168
|
-
"accessibility": 0,
|
|
1169
|
-
"bestPractices": 0,
|
|
1170
|
-
"seo": 0
|
|
1171
|
-
}
|
|
1172
|
-
}
|
|
1173
|
-
},
|
|
1174
|
-
"components": {
|
|
1175
|
-
"type": "object",
|
|
1176
|
-
"description": "Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.",
|
|
1177
|
-
"additionalProperties": {
|
|
1178
|
-
"type": "array",
|
|
1179
|
-
"items": {
|
|
1180
|
-
"type": "string",
|
|
1181
|
-
"minLength": 1
|
|
1182
|
-
}
|
|
1183
|
-
}
|
|
1184
|
-
},
|
|
1185
|
-
"baseUrl": {
|
|
1186
|
-
"type": ["string", "null"],
|
|
1187
|
-
"minLength": 1,
|
|
1188
|
-
"not": {
|
|
1189
|
-
"type": "string",
|
|
1190
|
-
"pattern": "([;&|`]|\\$\\()"
|
|
1191
|
-
},
|
|
1192
|
-
"description": "Origin the routes are resolved against. `null` leaves the gate unusable, which is why it ships disabled.",
|
|
1193
|
-
"default": null
|
|
1194
|
-
},
|
|
1195
|
-
"routes": {
|
|
1196
|
-
"type": "array",
|
|
1197
|
-
"items": {
|
|
1198
|
-
"type": "object",
|
|
1199
|
-
"description": "One route the Lighthouse run scores.",
|
|
1200
|
-
"required": ["path"],
|
|
1201
|
-
"properties": {
|
|
1202
|
-
"path": {
|
|
1203
|
-
"type": "string",
|
|
1204
|
-
"minLength": 1,
|
|
1205
|
-
"description": "Route path appended to `baseUrl`."
|
|
1206
|
-
},
|
|
1207
|
-
"formFactor": {
|
|
1208
|
-
"type": "string",
|
|
1209
|
-
"enum": ["mobile", "desktop"],
|
|
1210
|
-
"description": "Emulated form factor for this route."
|
|
1211
|
-
}
|
|
1212
|
-
},
|
|
1213
|
-
"additionalProperties": false
|
|
1214
|
-
},
|
|
1215
|
-
"description": "Routes to score on each run.",
|
|
1216
|
-
"default": []
|
|
1217
924
|
}
|
|
1218
925
|
},
|
|
1219
926
|
"additionalProperties": false
|
|
@@ -1315,7 +1022,7 @@
|
|
|
1315
1022
|
},
|
|
1316
1023
|
"duplication": {
|
|
1317
1024
|
"type": "object",
|
|
1318
|
-
"description": "Code-duplication (DRY) gate (Story #3664). Shares the gate base and adds the scan-scope extras: the `targetDirs` the duplication scanner walks
|
|
1025
|
+
"description": "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.",
|
|
1319
1026
|
"properties": {
|
|
1320
1027
|
"enabled": {
|
|
1321
1028
|
"type": "boolean",
|
|
@@ -1409,12 +1116,6 @@
|
|
|
1409
1116
|
"description": "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).",
|
|
1410
1117
|
"default": ["src"]
|
|
1411
1118
|
},
|
|
1412
|
-
"refreshTimeoutMs": {
|
|
1413
|
-
"type": "integer",
|
|
1414
|
-
"minimum": 1,
|
|
1415
|
-
"description": "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).",
|
|
1416
|
-
"default": 60000
|
|
1417
|
-
},
|
|
1418
1119
|
"ignoreGlobs": {
|
|
1419
1120
|
"type": "array",
|
|
1420
1121
|
"items": {
|
|
@@ -1430,104 +1131,14 @@
|
|
|
1430
1131
|
},
|
|
1431
1132
|
"additionalProperties": false
|
|
1432
1133
|
},
|
|
1433
|
-
"formatAutofix": {
|
|
1434
|
-
"type": "object",
|
|
1435
|
-
"description": "Bounded-timeout knob for the close-time `npx biome format --write` spawn (Story #2165). A SIGKILL fired at the budget boundary maps to exit 124 so the close orchestrator can flip the Story to `agent::blocked` with a friction comment.",
|
|
1436
|
-
"properties": {
|
|
1437
|
-
"timeoutMs": {
|
|
1438
|
-
"type": "integer",
|
|
1439
|
-
"minimum": 1,
|
|
1440
|
-
"description": "Timeout (ms) for the format-write spawn.",
|
|
1441
|
-
"default": 60000
|
|
1442
|
-
}
|
|
1443
|
-
},
|
|
1444
|
-
"additionalProperties": false
|
|
1445
|
-
},
|
|
1446
|
-
"codingGuardrails": {
|
|
1447
|
-
"type": "object",
|
|
1448
|
-
"description": "Authoring-time cyclomatic-complexity advisories surfaced by the quality-preview pre-commit gate.",
|
|
1449
|
-
"properties": {
|
|
1450
|
-
"cyclomaticFlag": {
|
|
1451
|
-
"type": "integer",
|
|
1452
|
-
"minimum": 1,
|
|
1453
|
-
"description": "Cyclomatic complexity at which a new or changed method is flagged for a refactor look.",
|
|
1454
|
-
"default": 8
|
|
1455
|
-
},
|
|
1456
|
-
"requireSiblingTest": {
|
|
1457
|
-
"type": "boolean",
|
|
1458
|
-
"description": "When true, a new source file with no colocated sibling test is reported by the guardrails pass.",
|
|
1459
|
-
"default": false
|
|
1460
|
-
}
|
|
1461
|
-
},
|
|
1462
|
-
"additionalProperties": false
|
|
1463
|
-
},
|
|
1464
1134
|
"autoRefresh": {
|
|
1465
1135
|
"type": "object",
|
|
1466
|
-
"description": "Baseline-attribution auto-refresh: when a gate can prove a regression is a legitimate consequence of the diff, it rewrites the baseline instead of blocking.",
|
|
1136
|
+
"description": "Baseline-attribution auto-refresh: when a gate can prove a regression is a legitimate consequence of the diff, it rewrites the baseline instead of blocking. The single-row CRAP jump cap (5) and the rescore scope (`diff`) are fixed.",
|
|
1467
1137
|
"properties": {
|
|
1468
1138
|
"enabled": {
|
|
1469
1139
|
"type": "boolean",
|
|
1470
1140
|
"description": "Master switch for the auto-refresh path. When false, every baseline refresh is a deliberate operator action.",
|
|
1471
1141
|
"default": true
|
|
1472
|
-
},
|
|
1473
|
-
"crapJumpCap": {
|
|
1474
|
-
"type": "number",
|
|
1475
|
-
"minimum": 0,
|
|
1476
|
-
"description": "Largest single-row CRAP jump the auto-refresh will absorb. A larger jump is reported as a regression rather than rewritten.",
|
|
1477
|
-
"default": 5
|
|
1478
|
-
},
|
|
1479
|
-
"scope": {
|
|
1480
|
-
"type": "string",
|
|
1481
|
-
"enum": ["diff", "full"],
|
|
1482
|
-
"description": "Whether an auto-refresh rescores only the changed files (`diff`) or every file in the target dirs (`full`).",
|
|
1483
|
-
"default": "diff"
|
|
1484
|
-
}
|
|
1485
|
-
},
|
|
1486
|
-
"additionalProperties": false
|
|
1487
|
-
},
|
|
1488
|
-
"baselineEpsilon": {
|
|
1489
|
-
"type": "object",
|
|
1490
|
-
"description": "Per-kind epsilon for s-stability-epsilon (Story #1964). Sub-epsilon row deltas resolve to prior bytes so env variance does not rewrite the on-disk baseline.",
|
|
1491
|
-
"properties": {
|
|
1492
|
-
"maintainability": {
|
|
1493
|
-
"type": "number",
|
|
1494
|
-
"minimum": 0,
|
|
1495
|
-
"default": 0.5
|
|
1496
|
-
},
|
|
1497
|
-
"crap": {
|
|
1498
|
-
"type": "number",
|
|
1499
|
-
"minimum": 0,
|
|
1500
|
-
"default": 0.5
|
|
1501
|
-
},
|
|
1502
|
-
"coverage": {
|
|
1503
|
-
"type": "number",
|
|
1504
|
-
"minimum": 0,
|
|
1505
|
-
"default": 0.1
|
|
1506
|
-
},
|
|
1507
|
-
"mutation": {
|
|
1508
|
-
"type": "number",
|
|
1509
|
-
"minimum": 0,
|
|
1510
|
-
"default": 0.5
|
|
1511
|
-
},
|
|
1512
|
-
"lint": {
|
|
1513
|
-
"type": "number",
|
|
1514
|
-
"minimum": 0,
|
|
1515
|
-
"default": 0
|
|
1516
|
-
},
|
|
1517
|
-
"lighthouse": {
|
|
1518
|
-
"type": "number",
|
|
1519
|
-
"minimum": 0,
|
|
1520
|
-
"default": 1
|
|
1521
|
-
},
|
|
1522
|
-
"bundle-size": {
|
|
1523
|
-
"type": "number",
|
|
1524
|
-
"minimum": 0,
|
|
1525
|
-
"default": 1024
|
|
1526
|
-
},
|
|
1527
|
-
"duplication": {
|
|
1528
|
-
"type": "number",
|
|
1529
|
-
"minimum": 0,
|
|
1530
|
-
"default": 0.5
|
|
1531
1142
|
}
|
|
1532
1143
|
},
|
|
1533
1144
|
"additionalProperties": false
|
|
@@ -1569,19 +1180,13 @@
|
|
|
1569
1180
|
},
|
|
1570
1181
|
"mergeWatch": {
|
|
1571
1182
|
"type": "object",
|
|
1572
|
-
"description": "Knobs consumed by the close-and-land merge wait (Story #4543
|
|
1183
|
+
"description": "Knobs consumed by the close-and-land merge wait (Story #4543). `mode` (Story #4698) selects the close-time merge posture. `maxWaitSeconds` bounds ONE invocation of the merge wait and its expiry returns a resumable `pending` terminal with no label mutation; `maxBudgetSeconds` bounds the CUMULATIVE wait across resumes (anchored at the PR's createdAt, so a resume does not restart the clock) and exhausting it is the genuine give-up that classifies and blocks. The 30s poll cadence and the cap of 3 behind-the-base updates are fixed.",
|
|
1573
1184
|
"properties": {
|
|
1574
1185
|
"mode": {
|
|
1575
1186
|
"type": "string",
|
|
1576
1187
|
"enum": ["sync", "async"],
|
|
1577
1188
|
"description": "Close-time merge-wait posture (Story #4698). `sync` (default) keeps the in-close foreground merge wait unchanged. `async` caps the per-invocation wait to a short ~60s probe window — long enough to catch an instant merge and, via the head-anchored required-check predicate, an instantly-red required check — then returns the resumable `pending` terminal (exit 3) with a `nextCommand`. Opt in when slow CI makes the foreground wait routinely expire: the worker launches `nextCommand` in the background instead of burning the host tool slot polling. `maxBudgetSeconds` (the cumulative give-up) is unchanged."
|
|
1578
1189
|
},
|
|
1579
|
-
"intervalSeconds": {
|
|
1580
|
-
"type": "integer",
|
|
1581
|
-
"minimum": 1,
|
|
1582
|
-
"description": "Seconds between merge-wait polls. Default 30.",
|
|
1583
|
-
"default": 30
|
|
1584
|
-
},
|
|
1585
1190
|
"maxWaitSeconds": {
|
|
1586
1191
|
"type": "integer",
|
|
1587
1192
|
"minimum": 1,
|
|
@@ -1592,18 +1197,13 @@
|
|
|
1592
1197
|
"minimum": 1,
|
|
1593
1198
|
"description": "Cumulative wall-clock budget (seconds) across merge-wait resumes, anchored at the PR's createdAt. Default 3600 (60 minutes). Exhausting this classifies the block and transitions the Story to agent::blocked.",
|
|
1594
1199
|
"default": 3600
|
|
1595
|
-
},
|
|
1596
|
-
"updateAttempts": {
|
|
1597
|
-
"type": "integer",
|
|
1598
|
-
"minimum": 0,
|
|
1599
|
-
"description": "Maximum times the merge wait will bring a behind-the-base PR up to date before giving up on the branch. Default 3. Set 0 to disable the update."
|
|
1600
1200
|
}
|
|
1601
1201
|
},
|
|
1602
1202
|
"additionalProperties": false
|
|
1603
1203
|
},
|
|
1604
1204
|
"codeReview": {
|
|
1605
1205
|
"type": "object",
|
|
1606
|
-
"description": "Review-provider chain
|
|
1206
|
+
"description": "Review-provider chain and on-branch remediation threshold for the /mandrel-deliver code-review ceremony.",
|
|
1607
1207
|
"properties": {
|
|
1608
1208
|
"providers": {
|
|
1609
1209
|
"type": "array",
|
|
@@ -1683,17 +1283,6 @@
|
|
|
1683
1283
|
}
|
|
1684
1284
|
]
|
|
1685
1285
|
},
|
|
1686
|
-
"providerConfig": {
|
|
1687
|
-
"type": "object",
|
|
1688
|
-
"additionalProperties": true,
|
|
1689
|
-
"description": "Optional escape hatch for adapter-specific configuration. No documented keys in Epic #2815; reserved so future adapters can be configured without another schema migration."
|
|
1690
|
-
},
|
|
1691
|
-
"maxFixAttempts": {
|
|
1692
|
-
"type": "integer",
|
|
1693
|
-
"minimum": 0,
|
|
1694
|
-
"description": "Maximum auto-fix retry attempts per finding in /mandrel-deliver Phase 5 (code-review). 0 disables auto-fix. Default 3.",
|
|
1695
|
-
"default": 3
|
|
1696
|
-
},
|
|
1697
1286
|
"autoFixSeverity": {
|
|
1698
1287
|
"type": "string",
|
|
1699
1288
|
"enum": ["high", "medium"],
|
|
@@ -1703,18 +1292,6 @@
|
|
|
1703
1292
|
},
|
|
1704
1293
|
"additionalProperties": false
|
|
1705
1294
|
},
|
|
1706
|
-
"review": {
|
|
1707
|
-
"type": "object",
|
|
1708
|
-
"description": "Close-scope review tuning (Story #4699). Governs the Story-scope local-lens pass that runs inside the close subprocess; the maker-blind code-review pass and all hard gates are unaffected.",
|
|
1709
|
-
"properties": {
|
|
1710
|
-
"lensDiffFloor": {
|
|
1711
|
-
"type": "integer",
|
|
1712
|
-
"minimum": 0,
|
|
1713
|
-
"description": "Changed-line floor for the close-scope lens walk (Story #4699). A diff strictly below this many changed lines (additions + deletions) with zero sensitive-path hits skips lens materialization and records the skip in the findings-yield ledger. Default 40; 0 disables the skip. Hard gates and the maker-blind code-review pass are unaffected."
|
|
1714
|
-
}
|
|
1715
|
-
},
|
|
1716
|
-
"additionalProperties": false
|
|
1717
|
-
},
|
|
1718
1295
|
"refactorStage": {
|
|
1719
1296
|
"type": "object",
|
|
1720
1297
|
"description": "Opt-in, config-gated post-green refactor checkpoint wired into story-deliver (Story #3430, Epic #3418). Strictly additive and default-OFF: when disabled, story-deliver behaves exactly as before. Advisory only — never changes existing close-validation gate semantics.",
|
|
@@ -1742,72 +1319,20 @@
|
|
|
1742
1319
|
},
|
|
1743
1320
|
"feedbackLoop": {
|
|
1744
1321
|
"type": "object",
|
|
1745
|
-
"description": "Opt-in toggle for the close-time retro auto-file graduator
|
|
1322
|
+
"description": "Opt-in toggle for the close-time retro auto-file graduator. Auto-filing defaults to OFF (Story #5341).",
|
|
1746
1323
|
"properties": {
|
|
1747
1324
|
"retroProposals": {
|
|
1748
1325
|
"type": "boolean",
|
|
1749
1326
|
"description": "When true, the retro auto-files its actionable routed proposals as meta::<framework-gap|consumer-improvement> + friction::<category> issues via the graduator pre-parsed-findings seam, and the rendered retro sections list the filed issue numbers instead of paste-ready gh command stanzas. Defaults to false (Story #5341), which renders the command stanzas instead.",
|
|
1750
1327
|
"default": false
|
|
1751
|
-
},
|
|
1752
|
-
"frictionWindowDays": {
|
|
1753
|
-
"type": "integer",
|
|
1754
|
-
"minimum": 1,
|
|
1755
|
-
"description": "How many days back the run-scope friction recurrence window reaches (Story #4850). The window spans every surviving per-Story signal stream rather than the triggering run's own Stories, so that a defect firing once per Story can reach the actionable threshold; this bounds it by age so a defect fixed weeks ago stops re-routing. Rows older than the bound — and rows carrying no readable timestamp — are excluded and counted on the roll-up step result. Default 30."
|
|
1756
|
-
}
|
|
1757
|
-
},
|
|
1758
|
-
"additionalProperties": false
|
|
1759
|
-
},
|
|
1760
|
-
"auditToStories": {
|
|
1761
|
-
"type": "object",
|
|
1762
|
-
"description": "Knobs for the `/audit-to-stories` unattended (`--auto`) sweep (Story #4626).",
|
|
1763
|
-
"properties": {
|
|
1764
|
-
"severityFloor": {
|
|
1765
|
-
"type": "string",
|
|
1766
|
-
"enum": ["critical", "high", "medium", "low", "all"],
|
|
1767
|
-
"description": "Minimum severity a finding must meet to be proposed as a Story on an unattended `/audit-to-stories --auto` sweep (Story #4626). Default high."
|
|
1768
|
-
},
|
|
1769
|
-
"autoComment": {
|
|
1770
|
-
"type": "boolean",
|
|
1771
|
-
"description": "When true (default), `/audit-to-stories --auto` posts a re-detected comment on an already-open matched Issue instead of silently skipping it."
|
|
1772
1328
|
}
|
|
1773
1329
|
},
|
|
1774
1330
|
"additionalProperties": false
|
|
1775
1331
|
},
|
|
1776
1332
|
"ci": {
|
|
1777
1333
|
"type": "object",
|
|
1778
|
-
"description": "CI-aware delivery namespace (Story #4356, Epic #4355): the merge
|
|
1334
|
+
"description": "CI-aware delivery namespace (Story #4356, Epic #4355): the merge posture and the advisory-check policy.",
|
|
1779
1335
|
"properties": {
|
|
1780
|
-
"watch": {
|
|
1781
|
-
"type": "object",
|
|
1782
|
-
"description": "Story #4356 (Epic #4355). Poll-loop tuning for the merge/CI watch. pollIntervalMs is the cadence between check probes; maxPolls caps total probes before the watcher gives up; maxResumes caps how many times the watcher may resume after a transient stall; attachWindowMs bounds the wait for a required context to attach at all.",
|
|
1783
|
-
"properties": {
|
|
1784
|
-
"pollIntervalMs": {
|
|
1785
|
-
"type": "integer",
|
|
1786
|
-
"minimum": 1,
|
|
1787
|
-
"description": "Milliseconds between check probes.",
|
|
1788
|
-
"default": 10000
|
|
1789
|
-
},
|
|
1790
|
-
"maxPolls": {
|
|
1791
|
-
"type": "integer",
|
|
1792
|
-
"minimum": 1,
|
|
1793
|
-
"description": "Total probes before the watcher gives up on one invocation.",
|
|
1794
|
-
"default": 180
|
|
1795
|
-
},
|
|
1796
|
-
"maxResumes": {
|
|
1797
|
-
"type": "integer",
|
|
1798
|
-
"minimum": 0,
|
|
1799
|
-
"description": "How many times the watcher may resume after a transient stall. 0 disables resuming.",
|
|
1800
|
-
"default": 3
|
|
1801
|
-
},
|
|
1802
|
-
"attachWindowMs": {
|
|
1803
|
-
"type": "integer",
|
|
1804
|
-
"minimum": 1,
|
|
1805
|
-
"description": "Story #4890. How long (ms) the watch keeps re-resolving an EMPTY `gh pr checks --required` set before it stops waiting for a required context to attach. A ruleset attaches its contexts asynchronously and the arrival latency is set by the slowest one, so a required context that is an aggregator job gated on every other tier is the last to appear — measured at 16m52s on this repository. Default 1200000 (20 minutes). Raise it for a repository whose contexts arrive later still; exhausting the window is never reported as a red check (the watch exits 2, not-yet-started).",
|
|
1806
|
-
"default": 1200000
|
|
1807
|
-
}
|
|
1808
|
-
},
|
|
1809
|
-
"additionalProperties": false
|
|
1810
|
-
},
|
|
1811
1336
|
"autoMerge": {
|
|
1812
1337
|
"type": "string",
|
|
1813
1338
|
"enum": ["trust-ci", "strict"],
|