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
|
@@ -194,6 +194,16 @@
|
|
|
194
194
|
},
|
|
195
195
|
"additionalProperties": false
|
|
196
196
|
},
|
|
197
|
+
"lockWait": {
|
|
198
|
+
"type": ["object", "null"],
|
|
199
|
+
"description": "Story #5377 — full-suite lock accounting for this close: how long its gates waited, in total, for another full suite on the same host to release the lock, and whether a wait expired. null when the close never waited. Distinct from waitBudget, which is merge-wait accounting only. An expired wait inside close spawns nothing, and the close ends pending at phase close-validation with nextCommand re-running close.",
|
|
200
|
+
"required": ["waitedSeconds", "expired"],
|
|
201
|
+
"properties": {
|
|
202
|
+
"waitedSeconds": { "type": "number", "minimum": 0 },
|
|
203
|
+
"expired": { "type": "boolean" }
|
|
204
|
+
},
|
|
205
|
+
"additionalProperties": false
|
|
206
|
+
},
|
|
197
207
|
"timestamp": { "type": "string", "format": "date-time" }
|
|
198
208
|
},
|
|
199
209
|
"allOf": [
|
|
@@ -40,10 +40,11 @@
|
|
|
40
40
|
"check-baselines",
|
|
41
41
|
"check-baselines-independent",
|
|
42
42
|
"check-baselines-coverage",
|
|
43
|
+
"quality-preview",
|
|
43
44
|
"check-maintainability",
|
|
44
45
|
"check-crap"
|
|
45
46
|
],
|
|
46
|
-
"description": "Stable gate identifier. Closed enum — additions require a schema bump. Must be a superset of every gate name buildDefaultGates() can emit (lib/close-validation/gates.js); tests/close-validation-gates-enum.test.js pins that gate-list ⊆ enum invariant. `coverage-capture` and `check-baselines` are the real close-validation gates (Story #4697); `check-baselines-independent` / `check-baselines-coverage` are the split pair the gate registers as when its enabled-kind set resolves (Story #5172), with `check-baselines` kept as both the unsplit fail-closed fallback and the historical name; `check-maintainability` / `check-crap` are the retired per-kind gates (Story #2210) kept so historical evidence records still validate."
|
|
47
|
+
"description": "Stable gate identifier. Closed enum — additions require a schema bump. Must be a superset of every gate name buildDefaultGates() can emit (lib/close-validation/gates.js); tests/close-validation-gates-enum.test.js pins that gate-list ⊆ enum invariant. `coverage-capture` and `check-baselines` are the real close-validation gates (Story #4697); `check-baselines-independent` / `check-baselines-coverage` are the split pair the gate registers as when its enabled-kind set resolves (Story #5172), with `check-baselines` kept as both the unsplit fail-closed fallback and the historical name; `quality-preview` replays the pre-push CRAP-scope preview at close, registered beside `coverage-capture` (Story #5378); `check-maintainability` / `check-crap` are the retired per-kind gates (Story #2210) kept so historical evidence records still validate."
|
|
47
48
|
},
|
|
48
49
|
"commitSha": {
|
|
49
50
|
"type": "string",
|
|
@@ -5,13 +5,22 @@ invoked indirectly by `npm run …`, slash-command workflows
|
|
|
5
5
|
(`.agents/workflows/*.md`), or Husky / GitHub Actions hooks; you rarely
|
|
6
6
|
need to call them by hand.
|
|
7
7
|
|
|
8
|
-
This file is **not** an exhaustive index of the ~
|
|
8
|
+
This file is **not** an exhaustive index of the ~65 top-level entrypoints —
|
|
9
9
|
it is the orientation pointer for the directory. Every script documents
|
|
10
10
|
its own flags under `--help`, and each is reachable from a real caller:
|
|
11
11
|
search `package.json` scripts, `.agents/workflows/`, and the Husky /
|
|
12
|
-
GitHub Actions surfaces first.
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
GitHub Actions surfaces first.
|
|
13
|
+
|
|
14
|
+
**Only consumer-facing tooling ships here.** Every top-level CLI in this
|
|
15
|
+
directory is named by a consumer surface — a workflow, skill, rule, agent
|
|
16
|
+
file, template, `instructions.md`, the package's `bin/` / `lib/`, or a
|
|
17
|
+
string `lib/bootstrap/` writes into a consumer's `package.json` or hooks.
|
|
18
|
+
Mandrel's own contributor tooling (its lint and verify aggregates, test
|
|
19
|
+
diagnostics, CI-only ratchets and baseline-maintenance utilities) lives in
|
|
20
|
+
the repository's root `scripts/` directory, which is outside the npm
|
|
21
|
+
`files` array and never reaches a consumer. Mandrel's CI enforces that
|
|
22
|
+
boundary: a top-level CLI here that no consumer surface names fails it,
|
|
23
|
+
and so does any file under `.agents/` importing from outside `.agents/`.
|
|
15
24
|
|
|
16
25
|
The one script an operator-facing workflow drives **by name, repeatedly**, is
|
|
17
26
|
[`deliver-run.js`](deliver-run.js): one beat of a multi-Story
|
|
@@ -23,22 +32,13 @@ delivery chain (`resolve-stories.js`, `single-story-init.js`,
|
|
|
23
32
|
`single-story-close.js`, `stories-wave-tick.js`) is reached through it or
|
|
24
33
|
through a workflow step.
|
|
25
34
|
|
|
26
|
-
`check-knip-entries.js` reads the entry list from whatever configuration knip itself would
|
|
27
|
-
load — `knip.json`, `knip.jsonc`, `.knip.json(c)`, `knip.ts`, `knip.js`,
|
|
28
|
-
`knip.config.ts`, `knip.config.js`, or `package.json#knip` — evaluating
|
|
29
|
-
TS/JS modules rather than parsing them, and counting entries declared
|
|
30
|
-
per-workspace as well as at the top level. A project with no knip
|
|
31
|
-
configuration at all exits 0 with a skip line, so the gate is safe to
|
|
32
|
-
wire everywhere; a configuration that exists but cannot be resolved
|
|
33
|
-
still exits 2.
|
|
34
|
-
|
|
35
35
|
## See Also
|
|
36
36
|
|
|
37
37
|
- [`/.agents/README.md`](../README.md) — consumer user guide.
|
|
38
38
|
- [`/docs/architecture.md`](../../docs/architecture.md) — system
|
|
39
39
|
architecture; the "Key Scripts" section lists the standard
|
|
40
40
|
orchestration entrypoints.
|
|
41
|
-
- [
|
|
41
|
+
- [`docs/quality-gates.md`](https://github.com/dsj1984/mandrel/blob/main/docs/quality-gates.md) — coverage,
|
|
42
42
|
CRAP, and maintainability baselines + floors.
|
|
43
43
|
- `package.json` `scripts` — the canonical list of standard CLIs
|
|
44
44
|
(`test`, `verify`, `coverage:update`, …).
|
|
@@ -1,74 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* acceptance-eval.js — bounded per-Story acceptance
|
|
4
|
+
* acceptance-eval.js — bounded per-Story acceptance gate. The deterministic
|
|
5
|
+
* scorer of the round's single authored verdict: validate it against the
|
|
6
|
+
* schema (malformed is a hard error), decide `proceed | redraft | block` under
|
|
7
|
+
* `delivery.acceptanceEval.maxRounds`, emit an `acceptance-eval` signal, and
|
|
8
|
+
* print one JSON envelope. Only `block` exits non-zero; the ticket transition
|
|
9
|
+
* stays the workflow's job.
|
|
5
10
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* (`.agents/schemas/acceptance-eval-verdict.schema.json`). This CLI is the
|
|
12
|
-
* deterministic SCORER of that single authored verdict — it validates and
|
|
13
|
-
* decides, it never re-scores the criteria as an independent additional
|
|
14
|
-
* pass — turning the verdict into the loop's next action:
|
|
15
|
-
*
|
|
16
|
-
* 1. Validate the verdict file against the verdict JSON Schema (a
|
|
17
|
-
* malformed verdict is a hard error — the loop refuses to guess).
|
|
18
|
-
* 2. Decide `proceed | redraft | block` from the per-criterion verdicts
|
|
19
|
-
* and the resolved redraft budget (`delivery.acceptanceEval.maxRounds`;
|
|
20
|
-
* `0` means the verdict is scored once with no redraft round).
|
|
21
|
-
* 3. Emit one per-criterion `acceptance-eval` signal into the retro /
|
|
22
|
-
* feedback substrate so the retro and `/mandrel-plan` Phase 0 feedback
|
|
23
|
-
* fetch can see which acceptance items needed rework and the round
|
|
24
|
-
* count.
|
|
25
|
-
* 4. Print a single JSON envelope and exit:
|
|
26
|
-
* - `proceed` → exit 0; the workflow flips the Story to `closing`.
|
|
27
|
-
* - `redraft` → exit 0; the workflow reworks the flagged criteria
|
|
28
|
-
* and re-runs the critic pass for the next round.
|
|
29
|
-
* - `block` → exit non-zero; the workflow transitions the Story
|
|
30
|
-
* to `agent::blocked`, posts a `friction` comment naming the
|
|
31
|
-
* unmet criteria, and stops. It never silently proceeds to close.
|
|
32
|
-
*
|
|
33
|
-
* The ticket transition / friction-comment authoring stays the workflow
|
|
34
|
-
* agent's job (via `story-phase.js --phase blocked` + `diagnose-friction.js`)
|
|
35
|
-
* — this CLI is the decision + signal boundary, mirroring how the existing
|
|
36
|
-
* gates separate decision from ticket mutation.
|
|
37
|
-
*
|
|
38
|
-
* One invocation shape: per-Story. The diff is one Story's; round scoping
|
|
39
|
-
* is per Story off the Story's `signals.ndjson`. (v2.0.0 removed the Epic
|
|
40
|
-
* tier along with the per-AC-cluster `--epic <id> --cluster <id>` mode that
|
|
41
|
-
* scored an Epic `## Acceptance Table` against a `main..epic/<id>` diff.)
|
|
42
|
-
*
|
|
43
|
-
* One gate call per round (Story #4951; Story #5343 retired the cluster
|
|
44
|
-
* protocol that used to fan a round out). The round's owner authors ONE
|
|
45
|
-
* verdict covering every `acceptance[]` item — `criteria[]` in
|
|
46
|
-
* acceptance-array order — and it is scored here exactly once. A second call
|
|
47
|
-
* inside one round would burn a Story-level round for nothing (distinct
|
|
48
|
-
* fingerprints defeat the replay guard) and race the `signals.ndjson` round
|
|
49
|
-
* ledger. The gate reads the Story's own `acceptance[]` count off its body
|
|
50
|
-
* (Story #5313) and rejects a verdict whose `criteria[]` length differs
|
|
51
|
-
* **before** scoring, so the mistake costs no round. `--expected-criteria` is
|
|
52
|
-
* still accepted but is redundant with the derived count: when both are known
|
|
53
|
-
* they must agree.
|
|
54
|
-
*
|
|
55
|
-
* CLI:
|
|
56
|
-
* --story <id> Story ID (required).
|
|
57
|
-
* --verdict <path> Path to the round's verdict JSON (required).
|
|
58
|
-
* --expected-criteria <n> Optional; must equal the Story's acceptance[]
|
|
59
|
-
* count when the body is readable.
|
|
60
|
-
* --no-signal Suppress the signal emit (tests).
|
|
61
|
-
*
|
|
62
|
-
* Stdout: a single JSON envelope
|
|
63
|
-
* { storyId, epicId, fullSuiteVerifyCommands[], decision, round, cap,
|
|
64
|
-
* capReached, totalCriteria, metCount, unmetCriteria[], signalEmitted,
|
|
65
|
-
* replay, verdictFingerprint }
|
|
66
|
-
* (`epicId` is retained as a always-null field for envelope stability.)
|
|
67
|
-
*
|
|
68
|
-
* Reading is free (Story #4874): re-invoking the gate over a verdict the
|
|
69
|
-
* ledger has already scored replays that round (`replay: true`,
|
|
70
|
-
* `signalEmitted: false`) instead of consuming one, so an unchanged verdict
|
|
71
|
-
* can never escalate from `redraft` to `block` by being looked at twice.
|
|
11
|
+
* One verdict, one gate call per round, covering every `acceptance[]` item in
|
|
12
|
+
* order — the count is read off the Story body and a mismatch is rejected
|
|
13
|
+
* before scoring, so it costs no round. Re-scoring an already-scored verdict
|
|
14
|
+
* replays its round (`replay: true`) and never escalates. `epicId` is an
|
|
15
|
+
* always-null envelope field kept for stability.
|
|
72
16
|
*
|
|
73
17
|
* @see .agents/scripts/lib/orchestration/acceptance-eval-decision.js
|
|
74
18
|
* @see .agents/schemas/acceptance-eval-verdict.schema.json
|
|
@@ -109,13 +53,8 @@ const VERDICT_SCHEMA_PATH = path.resolve(
|
|
|
109
53
|
);
|
|
110
54
|
|
|
111
55
|
/**
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
* Deliberately **not** memoised in a module-level variable: a module-level
|
|
115
|
-
* cache is reset only on re-import, so it silently defeats the `io` seam below
|
|
116
|
-
* (the second caller's injected reader is never consulted) and makes parallel
|
|
117
|
-
* test isolation impossible — `.agents/rules/test-seams.md` rule 3. The gate
|
|
118
|
-
* compiles the schema once per CLI run, so there is nothing to memoise.
|
|
56
|
+
* Deliberately not memoised: a module-level cache would bypass the `io` seam
|
|
57
|
+
* for every later caller. One compile per CLI run.
|
|
119
58
|
*
|
|
120
59
|
* @param {string} [schemaPath]
|
|
121
60
|
* @param {{ readFileSync: typeof readFileSync }} [io]
|
|
@@ -132,10 +71,7 @@ function getVerdictValidator(
|
|
|
132
71
|
}
|
|
133
72
|
|
|
134
73
|
/**
|
|
135
|
-
*
|
|
136
|
-
* any violation so the loop never acts on a malformed verdict.
|
|
137
|
-
*
|
|
138
|
-
* Exported for tests.
|
|
74
|
+
* Throws on any schema violation.
|
|
139
75
|
*
|
|
140
76
|
* @param {unknown} verdict
|
|
141
77
|
* @param {{ schemaPath?: string, io?: { readFileSync: typeof readFileSync } }} [opts]
|
|
@@ -177,22 +113,14 @@ function parseCliArgs(argv) {
|
|
|
177
113
|
};
|
|
178
114
|
}
|
|
179
115
|
|
|
180
|
-
/**
|
|
181
|
-
* The coverage contract, stated once so both the flag error and the coverage
|
|
182
|
-
* error name the same shape the caller has to produce.
|
|
183
|
-
*/
|
|
184
116
|
const MERGE_CONTRACT =
|
|
185
117
|
'One round = ONE verdict -> ONE gate call: the verdict must carry one ' +
|
|
186
118
|
'criteria[] record per acceptance[] item, in acceptance-array order, ' +
|
|
187
119
|
'before scoring.';
|
|
188
120
|
|
|
189
121
|
/**
|
|
190
|
-
*
|
|
191
|
-
*
|
|
192
|
-
* already read. Total: any failure — no provider, an unreadable ticket, an
|
|
193
|
-
* unparseable body — yields `null`, which routes the caller to the flag (when
|
|
194
|
-
* passed) and otherwise to a stated, logged skip. It never manufactures a
|
|
195
|
-
* count.
|
|
122
|
+
* The Story body's `acceptance[]` count; any failure yields `null`, never a
|
|
123
|
+
* manufactured count.
|
|
196
124
|
*
|
|
197
125
|
* @param {{ storyId: number, config: object }} args
|
|
198
126
|
* @param {{ createProviderFn?: typeof createProvider, parseBodyFn?: typeof parseStoryBody }} [deps]
|
|
@@ -216,9 +144,7 @@ export async function readStoryAcceptanceCount(
|
|
|
216
144
|
}
|
|
217
145
|
|
|
218
146
|
/**
|
|
219
|
-
*
|
|
220
|
-
* derived count is authoritative; a flag that disagrees with it is a wiring
|
|
221
|
-
* error worth failing on rather than a value to prefer silently.
|
|
147
|
+
* The derived count wins; a disagreeing flag is a wiring error and throws.
|
|
222
148
|
*
|
|
223
149
|
* @param {{ derived: number|null, flagged: number|null }} args
|
|
224
150
|
* @returns {number|null}
|
|
@@ -234,10 +160,7 @@ export function reconcileExpectedCriteria({ derived, flagged }) {
|
|
|
234
160
|
}
|
|
235
161
|
|
|
236
162
|
/**
|
|
237
|
-
* The count
|
|
238
|
-
* reconciled with the optional flag, with a stated skip when neither is
|
|
239
|
-
* readable (Story #5313). Split out of `runAcceptanceEvalCli` so the CLI
|
|
240
|
-
* body's own branching stays inside its committed cyclomatic budget.
|
|
163
|
+
* The coverage count, with a logged skip when neither source is readable.
|
|
241
164
|
*
|
|
242
165
|
* @param {{ storyId: number, config: object, flagged: number|null, readAcceptanceCountImpl: typeof readStoryAcceptanceCount, logger: { warn?: Function } }} args
|
|
243
166
|
* @returns {Promise<number|null>}
|
|
@@ -260,22 +183,14 @@ async function resolveExpectedCriteriaCount({
|
|
|
260
183
|
}
|
|
261
184
|
|
|
262
185
|
/**
|
|
263
|
-
*
|
|
264
|
-
* `null` when the flag is absent. Since Story #5313 the gate derives the
|
|
265
|
-
* count from the Story body; the flag remains accepted for callers that
|
|
266
|
-
* still pass it and is checked against the derived value.
|
|
267
|
-
*
|
|
268
|
-
* Exported for tests.
|
|
186
|
+
* `--expected-criteria` as a positive integer, or `null` when absent.
|
|
269
187
|
*
|
|
270
188
|
* @param {string|null|undefined} raw
|
|
271
189
|
* @returns {number|null}
|
|
272
190
|
*/
|
|
273
191
|
export function resolveExpectedCriteria(raw) {
|
|
274
192
|
if (raw === null || raw === undefined) return null;
|
|
275
|
-
// Digits only
|
|
276
|
-
// resolved to 4 — a guard whose entire job is to reject a wrong-sized
|
|
277
|
-
// verdict was itself accepting a malformed count, and a typo'd `--expected-
|
|
278
|
-
// criteria` would then wave through a verdict of the wrong length.
|
|
193
|
+
// Digits only — `parseInt('4abc')` is 4, which would wave a typo through.
|
|
279
194
|
const text = String(raw).trim();
|
|
280
195
|
const expected = /^\d+$/.test(text) ? Number(text) : Number.NaN;
|
|
281
196
|
if (!Number.isInteger(expected) || expected < 1) {
|
|
@@ -287,13 +202,8 @@ export function resolveExpectedCriteria(raw) {
|
|
|
287
202
|
}
|
|
288
203
|
|
|
289
204
|
/**
|
|
290
|
-
* Reject a verdict
|
|
291
|
-
*
|
|
292
|
-
* Called **before** `runAcceptanceEval`, which is where the round ledger is
|
|
293
|
-
* read and appended — so a partial verdict handed to the gate by mistake
|
|
294
|
-
* costs no round and can never escalate a `redraft` into a `block`.
|
|
295
|
-
*
|
|
296
|
-
* Exported for tests.
|
|
205
|
+
* Reject a verdict not covering exactly `expectedCriteria` criteria — before
|
|
206
|
+
* the round ledger is touched, so the mistake costs no round.
|
|
297
207
|
*
|
|
298
208
|
* @param {object} verdict — schema-validated verdict.
|
|
299
209
|
* @param {number|null} expectedCriteria — `null` disables the assertion.
|
|
@@ -310,17 +220,9 @@ export function assertCriteriaCoverage(verdict, expectedCriteria) {
|
|
|
310
220
|
}
|
|
311
221
|
|
|
312
222
|
/**
|
|
313
|
-
*
|
|
314
|
-
*
|
|
315
|
-
*
|
|
316
|
-
* The intended `verify[]` shape is scoped entries **plus** the one credited
|
|
317
|
-
* full-suite run the worker makes before the hand-off push. A full-suite
|
|
318
|
-
* command sitting in `verify[]` is the misshapen case: it either re-pays for
|
|
319
|
-
* the credited run or, worse, gets skipped as "already covered" without
|
|
320
|
-
* anyone saying so. The gate is where every round's evidence passes through,
|
|
321
|
-
* so it is where the shape is called out.
|
|
322
|
-
*
|
|
323
|
-
* Exported for tests.
|
|
223
|
+
* Distinct full-suite commands in the verdict's `verify[]` evidence — a
|
|
224
|
+
* misshapen `verify[]` that re-pays (or silently skips) the one credited
|
|
225
|
+
* full-suite run.
|
|
324
226
|
*
|
|
325
227
|
* @param {object} verdict — schema-validated verdict.
|
|
326
228
|
* @returns {string[]} distinct offending commands, in first-seen order.
|
|
@@ -339,13 +241,6 @@ export function collectFullSuiteVerifyCommands(verdict) {
|
|
|
339
241
|
}
|
|
340
242
|
|
|
341
243
|
/**
|
|
342
|
-
* Surface the misshapen-`verify[]` warning, if there is one.
|
|
343
|
-
*
|
|
344
|
-
* Extracted from `runAcceptanceEvalCli` rather than inlined: the CLI shell is
|
|
345
|
-
* already the file's worst-CRAP method, and a branch added there costs more
|
|
346
|
-
* than the same branch in a small, fully-covered helper. Module-private: it is
|
|
347
|
-
* reached through the CLI shell, which is where the tests drive it.
|
|
348
|
-
*
|
|
349
244
|
* @param {object} verdict — schema-validated verdict.
|
|
350
245
|
* @param {{ warn?: Function }} logger
|
|
351
246
|
* @returns {string[]} the offending commands (empty when the shape is fine).
|
|
@@ -362,20 +257,15 @@ function warnOnFullSuiteVerify(verdict, logger) {
|
|
|
362
257
|
}
|
|
363
258
|
|
|
364
259
|
/**
|
|
365
|
-
*
|
|
366
|
-
*
|
|
367
|
-
* Exported for tests so the decision + signal path can be exercised
|
|
368
|
-
* without spawning the CLI.
|
|
260
|
+
* Decide, emit the signal, and compose the envelope.
|
|
369
261
|
*
|
|
370
262
|
* @param {object} args
|
|
371
263
|
* @param {number} args.storyId
|
|
372
264
|
* @param {object} args.verdict — validated verdict object.
|
|
373
265
|
* @param {object} args.config — resolved `.agentrc.json`.
|
|
374
266
|
* @param {boolean} args.emitSignal
|
|
375
|
-
* @param {number} [args.round] —
|
|
376
|
-
*
|
|
377
|
-
* signals in the Story's `signals.ndjson` (Story #4019); the verdict's
|
|
378
|
-
* self-reported `round` is never load-bearing for the cap.
|
|
267
|
+
* @param {number} [args.round] — override (tests); otherwise derived from the
|
|
268
|
+
* signals ledger, never from the verdict's self-reported round.
|
|
379
269
|
* @param {object} [deps]
|
|
380
270
|
* @param {Function} [deps.appendSignalFn]
|
|
381
271
|
* @param {Function} [deps.resolveRoundFn]
|
|
@@ -393,9 +283,7 @@ export async function runAcceptanceEval(
|
|
|
393
283
|
} = deps;
|
|
394
284
|
const { maxRounds } = getAcceptanceEval(config);
|
|
395
285
|
const verdictFingerprint = fingerprintFn(verdict);
|
|
396
|
-
//
|
|
397
|
-
// reports the round that verdict was scored under and appends nothing, so
|
|
398
|
-
// observation alone can never advance the counter or escalate a redraft.
|
|
286
|
+
// An already-scored verdict replays its round and appends nothing.
|
|
399
287
|
const resolved = resolveRoundFn({
|
|
400
288
|
epicId: null,
|
|
401
289
|
storyId,
|
|
@@ -430,8 +318,7 @@ export async function runAcceptanceEval(
|
|
|
430
318
|
config,
|
|
431
319
|
});
|
|
432
320
|
} catch (err) {
|
|
433
|
-
//
|
|
434
|
-
// take down the gate. The decision still stands.
|
|
321
|
+
// Best-effort: a failed signal write never takes down the gate.
|
|
435
322
|
Logger.warn(
|
|
436
323
|
`acceptance-eval: failed to append signal: ${
|
|
437
324
|
err instanceof Error ? err.message : String(err)
|
|
@@ -459,28 +346,16 @@ export async function runAcceptanceEval(
|
|
|
459
346
|
evidence: c.evidence,
|
|
460
347
|
})),
|
|
461
348
|
signalEmitted,
|
|
462
|
-
// True when this invocation re-read a verdict the ledger had already
|
|
463
|
-
// scored: the round was replayed, not advanced, and nothing was appended.
|
|
464
349
|
replay,
|
|
465
350
|
verdictFingerprint,
|
|
466
351
|
};
|
|
467
352
|
|
|
468
|
-
// `block` is the only non-zero exit: the loop has exhausted its bounded
|
|
469
|
-
// budget with criteria still unmet, and the workflow must escalate to
|
|
470
|
-
// `agent::blocked` rather than proceed to close.
|
|
471
353
|
const exitCode = outcome.decision === 'block' ? 1 : 0;
|
|
472
354
|
return { envelope, exitCode };
|
|
473
355
|
}
|
|
474
356
|
|
|
475
357
|
/**
|
|
476
|
-
*
|
|
477
|
-
* envelope. Extracted from the `main` shell so the whole error table (missing
|
|
478
|
-
* flags, unreadable verdict, non-JSON verdict, storyId mismatch, block) is
|
|
479
|
-
* reachable without spawning the CLI or writing a real verdict file.
|
|
480
|
-
*
|
|
481
|
-
* Every seam on the optional final `deps` parameter defaults to the real
|
|
482
|
-
* implementation (`.agents/rules/test-seams.md` rules 1-2, 4), so `main` and
|
|
483
|
-
* every production invocation are unchanged.
|
|
358
|
+
* CLI core: argv → verdict → validation → coverage → decision → envelope.
|
|
484
359
|
*
|
|
485
360
|
* @param {string[]} [argv]
|
|
486
361
|
* @param {{
|
|
@@ -542,9 +417,6 @@ export async function runAcceptanceEvalCli(
|
|
|
542
417
|
|
|
543
418
|
const verdict = validateVerdictImpl(parsed);
|
|
544
419
|
|
|
545
|
-
// Story #4951 / #5313: the verdict must cover every acceptance[] item, and
|
|
546
|
-
// the count comes from the Story body itself. This runs before the round
|
|
547
|
-
// ledger is touched, so a partial verdict is a free mistake.
|
|
548
420
|
const config = resolveConfigImpl();
|
|
549
421
|
const expected = await resolveExpectedCriteriaCount({
|
|
550
422
|
storyId,
|
|
@@ -555,17 +427,13 @@ export async function runAcceptanceEvalCli(
|
|
|
555
427
|
});
|
|
556
428
|
assertCriteriaCoverage(verdict, expected);
|
|
557
429
|
|
|
558
|
-
// A verdict whose embedded storyId disagrees with the CLI flag is a
|
|
559
|
-
// wiring error worth failing on, not a silent mismatch.
|
|
560
430
|
if (Number.isInteger(verdict.storyId) && verdict.storyId !== storyId) {
|
|
561
431
|
throw new Error(
|
|
562
432
|
`acceptance-eval: verdict storyId (${verdict.storyId}) does not match --story ${storyId}.`,
|
|
563
433
|
);
|
|
564
434
|
}
|
|
565
435
|
|
|
566
|
-
//
|
|
567
|
-
// from the envelope, so it fires for the real decision path and for every
|
|
568
|
-
// caller that injects its own scorer.
|
|
436
|
+
// From the validated verdict, so it fires even with an injected scorer.
|
|
569
437
|
warnOnFullSuiteVerify(verdict, logger);
|
|
570
438
|
|
|
571
439
|
const { envelope, exitCode } = await runAcceptanceEvalImpl({
|