mandrel 2.60.0 → 2.61.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/README.md +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/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 +83 -239
- 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 +136 -486
- package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
- package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +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 +25 -0
- package/lib/cli/doctor.js +11 -71
- package/lib/cli/init.js +26 -165
- package/lib/cli/migrate.js +5 -64
- package/lib/cli/registry.js +84 -467
- package/lib/cli/sync-agents.js +4 -64
- package/lib/cli/sync-commands.js +11 -64
- package/lib/cli/sync.js +34 -213
- package/lib/cli/uninstall.js +40 -219
- package/lib/cli/update.js +105 -661
- package/lib/cli/version-check.js +8 -72
- package/lib/cli/version-helpers.js +14 -87
- package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
- package/lib/migrations/index.js +15 -92
- package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
- package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
- package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
- package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
- package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
- package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
- package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
- package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
- package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +2 -21
- package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
- package/package.json +16 -14
- package/.agents/docs/SDLC.md +0 -590
- package/.agents/docs/quality-gates.md +0 -1183
- package/.agents/rules/known-tooling-behavior.md +0 -200
- package/.agents/rules/orchestration-error-handling.md +0 -61
- package/.agents/rules/test-seams.md +0 -59
- package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
- package/.agents/schemas/baselines/lint.schema.json +0 -47
- package/.agents/scripts/check-action-pinning.js +0 -260
- package/.agents/scripts/check-audit-attribution.js +0 -302
- package/.agents/scripts/check-baseline-drift.js +0 -211
- package/.agents/scripts/check-baseline-scope.js +0 -362
- package/.agents/scripts/check-generated-validator.js +0 -202
- package/.agents/scripts/check-knip-entries.js +0 -159
- package/.agents/scripts/check-lifecycle-lint.js +0 -294
- package/.agents/scripts/check-pinned-override-notes.js +0 -102
- package/.agents/scripts/check-schema-references.js +0 -368
- package/.agents/scripts/check-test-portability.js +0 -512
- package/.agents/scripts/check-workflow-citations.js +0 -218
- package/.agents/scripts/check-workflow-cli-lint.js +0 -299
- package/.agents/scripts/check-workflow-timeouts.js +0 -291
- package/.agents/scripts/install-matrix-assert.js +0 -326
- package/.agents/scripts/lib/audit-advisories.js +0 -195
- package/.agents/scripts/lib/audit-attribution.js +0 -134
- package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
- package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
- package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
- package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
- package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
- package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
- package/.agents/scripts/lib/c8-cli-path.js +0 -21
- package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
- package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
- package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
- package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
- package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
- package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
- package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
- package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
- package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
- package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
- package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
- package/.agents/scripts/lib/fs-walk.js +0 -52
- package/.agents/scripts/lib/knip-config-resolver.js +0 -181
- package/.agents/scripts/lib/knip-entry-sync.js +0 -452
- package/.agents/scripts/lib/pinned-override-notes.js +0 -88
- package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
- package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
- package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
- package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
- package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
- package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
- package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
- package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
- package/.agents/scripts/lib/test-isolate/runner.js +0 -483
- package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
- package/.agents/scripts/lib/test-profile/render-report.js +0 -45
- package/.agents/scripts/lint-label-vocabulary.js +0 -214
- package/.agents/scripts/post-structured-comment.js +0 -127
- package/.agents/scripts/provision-git-hooks.js +0 -85
- package/.agents/scripts/prune-baseline-orphans.js +0 -181
- package/.agents/scripts/run-coverage.js +0 -197
- package/.agents/scripts/run-lint.js +0 -133
- package/.agents/scripts/run-test-profile.js +0 -129
- package/.agents/scripts/run-verify.js +0 -125
- package/.agents/scripts/test-isolate.js +0 -55
- package/.agents/scripts/update-dead-exports-baseline.js +0 -321
|
@@ -1,94 +1,23 @@
|
|
|
1
1
|
// .agents/scripts/lib/orchestration/merge-block-class.js
|
|
2
2
|
/**
|
|
3
|
-
* merge-block-class.js —
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* terminal step and `deliver-recover`, so a headless delivery run that
|
|
7
|
-
* finishes its work without a confirmed merge is attributable to exactly one
|
|
8
|
-
* class from ONE decision logic, instead of each caller inventing its own ad
|
|
9
|
-
* hoc diagnosis. (It was written to serve an epic-path terminal too; the v2
|
|
10
|
-
* cutover left `single-story-close` as the only delivery path.)
|
|
11
|
-
*
|
|
12
|
-
* Block classes (Epic #4425 Goal; `predicate-refused` added by #4472):
|
|
13
|
-
* - `checks-pending-timeout` The watch/poll budget was
|
|
14
|
-
* exhausted while required checks
|
|
15
|
-
* were still pending/running — not
|
|
16
|
-
* a hard block, the run simply ran
|
|
17
|
-
* out of time.
|
|
18
|
-
* - `checks-failed` A required check went RED — red
|
|
19
|
-
* checks that branch protection does
|
|
20
|
-
* not require are NOT this class
|
|
21
|
-
* (see `failingChecksBlockMerge`). A
|
|
22
|
-
* definitive terminal the merge wait
|
|
23
|
-
* must fail fast on (Story #4543):
|
|
24
|
-
* before this class the in-close poll
|
|
25
|
-
* read only `state`/`mergedAt`, so a
|
|
26
|
-
* check that failed at minute one
|
|
27
|
-
* burned the entire budget and then
|
|
28
|
-
* classified as
|
|
29
|
-
* `branch-protection-human-required`
|
|
30
|
-
* (the exhaustion probe sees
|
|
31
|
-
* `mergeStateStatus: BLOCKED` with
|
|
32
|
-
* checks settled) — sending the
|
|
33
|
-
* operator to diagnose branch
|
|
34
|
-
* protection instead of the red check
|
|
35
|
-
* that is actually in their way.
|
|
36
|
-
* - `branch-protection-human-required` GitHub reports the PR needs a
|
|
37
|
-
* human action: a required review
|
|
38
|
-
* that hasn't been granted, or a
|
|
39
|
-
* branch-protection rule the
|
|
40
|
-
* automation cannot satisfy on its
|
|
41
|
-
* own.
|
|
42
|
-
* - `arm-failure` The arm call itself (`gh pr merge
|
|
43
|
-
* --auto` or equivalent) failed for
|
|
44
|
-
* a reason that is NOT branch
|
|
45
|
-
* protection — auth, rate limit, an
|
|
46
|
-
* already-merged race, a network
|
|
47
|
-
* error.
|
|
48
|
-
* - `api-race-other` Fallback for anything that does
|
|
49
|
-
* not cleanly fit the above three —
|
|
50
|
-
* a transient GraphQL/API error, an
|
|
51
|
-
* ambiguous probe result, or a
|
|
52
|
-
* genuinely novel condition.
|
|
53
|
-
* - `predicate-refused` The AutomergePredicate refused to
|
|
54
|
-
* arm merge BEFORE any arm attempt —
|
|
55
|
-
* a red/pending required check, an
|
|
56
|
-
* unreadable check probe, a dirty
|
|
57
|
-
* structured-signal verdict, or a
|
|
58
|
-
* (retired `requireChecks` policy
|
|
59
|
-
* block on a checks-less repo (#4472).
|
|
60
|
-
* The must-land contract previously
|
|
61
|
-
* only covered post-arm poll
|
|
62
|
-
* exhaustion, so a predicate refusal
|
|
63
|
-
* in headless mode silently parked;
|
|
64
|
-
* this class makes it attributable.
|
|
65
|
-
*
|
|
66
|
-
* Pure function, no I/O: callers pass in the already-observed
|
|
67
|
-
* arm-result / PR-probe / budget signals (from the close path's merge wait,
|
|
68
|
-
* a raw `gh pr view` read, or the standalone
|
|
69
|
-
* `single-story-confirm-merge.js` poll) and get back a
|
|
70
|
-
* `{ blockClass, reason }` verdict ready to hand to `emitMergeUnlanded`
|
|
71
|
-
* (`emit-merge-unlanded.js`).
|
|
3
|
+
* merge-block-class.js — the one pure classifier attributing an unlanded
|
|
4
|
+
* delivery run to exactly one block class, from observed arm / probe /
|
|
5
|
+
* budget signals, for `emitMergeUnlanded`.
|
|
72
6
|
*/
|
|
73
7
|
|
|
74
8
|
import {
|
|
75
9
|
ADVISORY_GATE_INCONCLUSIVE_CLASS,
|
|
76
10
|
ADVISORY_GATE_RED_CLASS,
|
|
11
|
+
CHECKS_FAILED_CLASS,
|
|
12
|
+
formatChecksFailedReason,
|
|
77
13
|
requiredCheckFailedBlocksMerge,
|
|
78
14
|
} from './merge-poll.js';
|
|
79
15
|
|
|
80
16
|
/**
|
|
81
|
-
* Every class `classifyMergeBlock` can return
|
|
82
|
-
* priority documented on `classifyMergeBlock` below, NOT an arbitrary
|
|
83
|
-
* listing — earlier entries are checked first when a real input happens to
|
|
84
|
-
* satisfy more than one heuristic.
|
|
85
|
-
*
|
|
86
|
-
* Started as the four classes named in the Epic #4425 Goal; Story #4543
|
|
87
|
-
* added `checks-failed` so a red required check is attributable as itself
|
|
88
|
-
* rather than being absorbed by the timeout or branch-protection verdicts.
|
|
17
|
+
* Every class `classifyMergeBlock` can return, in its evaluation priority.
|
|
89
18
|
*/
|
|
90
19
|
export const BLOCK_CLASSES = Object.freeze([
|
|
91
|
-
|
|
20
|
+
CHECKS_FAILED_CLASS,
|
|
92
21
|
'checks-pending-timeout',
|
|
93
22
|
'branch-protection-human-required',
|
|
94
23
|
'arm-failure',
|
|
@@ -96,38 +25,13 @@ export const BLOCK_CLASSES = Object.freeze([
|
|
|
96
25
|
]);
|
|
97
26
|
|
|
98
27
|
/**
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
* emitted DIRECTLY for a headless refusal that never reached the
|
|
102
|
-
* poll-exhaustion classifier — so it is a valid attribution value even though
|
|
103
|
-
* `classifyMergeBlock` never produces it. Story #5096 added
|
|
104
|
-
* `advisory-gate-red` on the same footing: a genuinely red NON-required check
|
|
105
|
-
* observed while GitHub reports the PR mergeable anyway
|
|
106
|
-
* (`mergeStateStatus: UNSTABLE`), which native auto-merge would land straight
|
|
107
|
-
* past. It is emitted directly by the arm and merge-wait phases — the
|
|
108
|
-
* classifier cannot produce it, because by construction GitHub is NOT blocking
|
|
109
|
-
* the merge, which is the entire problem it names. Story #5266 added
|
|
110
|
-
* `advisory-gate-inconclusive` beside it, emitted directly by the same two
|
|
111
|
-
* phases and under the same discipline: the SAME observation (a red advisory
|
|
112
|
-
* run on an `UNSTABLE` PR) whose run never FINISHED — a scan or navigation
|
|
113
|
-
* timeout reporting no violation. It blocks exactly as `advisory-gate-red`
|
|
114
|
-
* does; it exists because the two authorise different remedies, and reporting
|
|
115
|
-
* a timed-out scan as a found violation pushes the operator toward a permanent
|
|
116
|
-
* allowlist exemption for a transient failure. It is deliberately NOT in
|
|
117
|
-
* `BLOCK_CLASSES`, whose reachability invariant covers only what
|
|
118
|
-
* `classifyMergeBlock` returns. (The Epic-era listeners that used to
|
|
119
|
-
* emit it, AutomergePredicate and AutomergeArmer, are gone; the value stays
|
|
120
|
-
* because archived `merge.unlanded` records carry it and the schema enum
|
|
121
|
-
* must keep validating them.) `isValidBlockClass` (and the `merge.unlanded` schema enum)
|
|
122
|
-
* validate against this broader set; the classifier's own reachability
|
|
123
|
-
* invariant stays scoped to `BLOCK_CLASSES`.
|
|
28
|
+
* Plus classes emitted directly, never by the classifier: `predicate-refused`
|
|
29
|
+
* (kept so archived records validate) and the advisory-gate pair.
|
|
124
30
|
*/
|
|
125
31
|
export const MERGE_UNLANDED_BLOCK_CLASSES = Object.freeze([
|
|
126
32
|
...BLOCK_CLASSES,
|
|
127
33
|
'predicate-refused',
|
|
128
|
-
// Sourced from the constants the
|
|
129
|
-
// (Story #5266), so the attribution vocabulary cannot drift from the
|
|
130
|
-
// verdict that emits it.
|
|
34
|
+
// Sourced from the gate's own constants so the vocabulary cannot drift.
|
|
131
35
|
ADVISORY_GATE_RED_CLASS,
|
|
132
36
|
ADVISORY_GATE_INCONCLUSIVE_CLASS,
|
|
133
37
|
]);
|
|
@@ -137,18 +41,13 @@ const BLOCK_CLASS_SET = new Set(MERGE_UNLANDED_BLOCK_CLASSES);
|
|
|
137
41
|
/**
|
|
138
42
|
* @param {string} value
|
|
139
43
|
* @returns {boolean} `true` iff `value` is a valid `merge.unlanded`
|
|
140
|
-
* block-class attribution
|
|
141
|
-
* emitted `predicate-refused`).
|
|
44
|
+
* block-class attribution.
|
|
142
45
|
*/
|
|
143
46
|
export function isValidBlockClass(value) {
|
|
144
47
|
return BLOCK_CLASS_SET.has(value);
|
|
145
48
|
}
|
|
146
49
|
|
|
147
|
-
/**
|
|
148
|
-
* Substrings that identify a branch-protection / human-review rejection
|
|
149
|
-
* surfaced through an arm call's stderr or reason text. Matched
|
|
150
|
-
* case-insensitively against the whole string.
|
|
151
|
-
*/
|
|
50
|
+
/** Case-insensitive markers of a protection/review rejection in arm text. */
|
|
152
51
|
const BRANCH_PROTECTION_MARKERS = Object.freeze([
|
|
153
52
|
'review',
|
|
154
53
|
'required_status_checks',
|
|
@@ -162,18 +61,13 @@ function textIncludesAny(text, markers) {
|
|
|
162
61
|
return markers.some((marker) => lower.includes(marker));
|
|
163
62
|
}
|
|
164
63
|
|
|
165
|
-
/**
|
|
166
|
-
* Build the `api-race-other` fallback reason from whatever signal is
|
|
167
|
-
* available, so the emitted event still carries a specific-as-possible
|
|
168
|
-
* explanation rather than a bare "unknown".
|
|
169
|
-
*/
|
|
64
|
+
/** The most specific `api-race-other` reason the signals allow. */
|
|
170
65
|
function describeApiRaceFallback(prProbe, budget) {
|
|
171
66
|
if (prProbe?.error) {
|
|
172
67
|
return `PR probe error: ${prProbe.error}`;
|
|
173
68
|
}
|
|
174
|
-
// Red
|
|
175
|
-
//
|
|
176
|
-
// because auto-merge was free to land this PR and did not.
|
|
69
|
+
// Red but non-gating checks: don't send the operator to fix them — auto-merge
|
|
70
|
+
// was free to land this PR and did not.
|
|
177
71
|
if (prProbe?.checksStatus === 'failure') {
|
|
178
72
|
return `PR did not land although its failing checks are not required (mergeStateStatus=${prProbe?.mergeStateStatus ?? 'n/a'}); the red checks are not the block — check that auto-merge is still armed`;
|
|
179
73
|
}
|
|
@@ -184,74 +78,32 @@ function describeApiRaceFallback(prProbe, budget) {
|
|
|
184
78
|
}
|
|
185
79
|
|
|
186
80
|
/**
|
|
187
|
-
* Classify why a delivery run finished without a confirmed merge.
|
|
188
|
-
*
|
|
189
|
-
*
|
|
190
|
-
*
|
|
191
|
-
* means there is no "armed but stuck" PR left to probe, so this is
|
|
192
|
-
* checked before any PR-probe or budget signal. A branch-protection
|
|
193
|
-
* rejection surfaced AT arm time still routes to
|
|
194
|
-
* `branch-protection-human-required` rather than the generic
|
|
195
|
-
* `arm-failure`.
|
|
196
|
-
* 1b. A genuinely red required check — `checks-failed` (Story #4543,
|
|
197
|
-
* head-anchored by Story #4695). Evaluated before every budget and
|
|
198
|
-
* probe signal because it is *definitive*: no amount of remaining
|
|
199
|
-
* budget turns a failed check green, and on a protected branch it also
|
|
200
|
-
* presents as `mergeStateStatus: 'BLOCKED'`, so leaving it to step 3
|
|
201
|
-
* would attribute the operator's red test run to branch protection.
|
|
202
|
-
* Gated on `requiredCheckFailedBlocksMerge`: a run must have concluded
|
|
203
|
-
* failure with none in flight — a red rollup while a required run is
|
|
204
|
-
* merely queued is the protected-branch pending state, not this class.
|
|
205
|
-
* The predicate also declines the verdict when the probe reports
|
|
206
|
-
* `reviewDecision: 'REVIEW_REQUIRED'` (Story #4710): the rollup cannot
|
|
207
|
-
* prove the red run is required, and a missing required review already
|
|
208
|
-
* explains the BLOCKED merge state, so classification falls through to
|
|
209
|
-
* the step-3 human-required verdict instead of misdirecting the
|
|
210
|
-
* operator at a possibly-optional red check.
|
|
211
|
-
* 2. Budget exhaustion while checks were still in flight —
|
|
212
|
-
* `checks-pending-timeout`. Evaluated BEFORE the human-required
|
|
213
|
-
* probe signals because on a protected branch GitHub reports
|
|
214
|
-
* `mergeStateStatus: 'BLOCKED'` for the entire time required checks
|
|
215
|
-
* are still running — a slow-CI timeout would otherwise always
|
|
216
|
-
* misclassify as `branch-protection-human-required` and the
|
|
217
|
-
* headless once-only budget extension could never engage.
|
|
218
|
-
* 3. PR-probe human-required signals — `reviewDecision` reporting a
|
|
219
|
-
* required review, or `mergeStateStatus: 'BLOCKED'` with checks NOT
|
|
220
|
-
* in flight (green/failed checks + BLOCKED = a genuinely human
|
|
221
|
-
* gate, e.g. a missing approval).
|
|
222
|
-
* 4. Fallback — `api-race-other`.
|
|
81
|
+
* Classify why a delivery run finished without a confirmed merge. First match
|
|
82
|
+
* wins: (1) arm failure (a protection rejection at arm time still routes to
|
|
83
|
+
* human-required); (1b) a red required check; (2) budget exhausted with
|
|
84
|
+
* checks in flight; (3) human-required probe signals; (4) `api-race-other`.
|
|
223
85
|
*
|
|
224
86
|
* @param {object} input
|
|
225
87
|
* @param {object} [input.armResult] Outcome of the arm call.
|
|
226
88
|
* @param {boolean} [input.armResult.armed] `false` when the arm call
|
|
227
|
-
*
|
|
228
|
-
*
|
|
229
|
-
* @param {string} [input.armResult.
|
|
230
|
-
* `gh` stderr) — inspected for branch-protection markers.
|
|
231
|
-
* @param {string} [input.armResult.error] Alternate free-form failure
|
|
232
|
-
* detail field, checked when `reason` is absent.
|
|
89
|
+
* failed or was refused up-front.
|
|
90
|
+
* @param {string} [input.armResult.reason] Failure detail (e.g. `gh` stderr).
|
|
91
|
+
* @param {string} [input.armResult.error]
|
|
233
92
|
* @param {object} [input.prProbe] Latest `gh pr view` read.
|
|
234
|
-
* @param {string} [input.prProbe.reviewDecision]
|
|
235
|
-
*
|
|
236
|
-
* @param {string} [input.prProbe.
|
|
237
|
-
*
|
|
238
|
-
* @param {string} [input.prProbe.
|
|
239
|
-
* checks observed on the last probe (`success` | `pending` |
|
|
240
|
-
* `still-running` | `failure` | `unknown`) — required-ness is decided by
|
|
241
|
-
* `mergeStateStatus`, not by this field.
|
|
242
|
-
* @param {string} [input.prProbe.error] Set when the probe call itself
|
|
243
|
-
* errored (network / API failure reading the PR).
|
|
93
|
+
* @param {string} [input.prProbe.reviewDecision]
|
|
94
|
+
* @param {string} [input.prProbe.mergeStateStatus]
|
|
95
|
+
* @param {string} [input.prProbe.checksStatus] Aggregate over ALL checks;
|
|
96
|
+
* required-ness comes from `mergeStateStatus`.
|
|
97
|
+
* @param {string} [input.prProbe.error] Set when the probe itself errored.
|
|
244
98
|
* @param {object} [input.budget] Poll-budget accounting.
|
|
245
|
-
* @param {boolean} [input.budget.exhausted]
|
|
246
|
-
*
|
|
247
|
-
* @param {number} [input.budget.elapsedSeconds] Elapsed watch time in
|
|
248
|
-
* seconds, folded into the `reason` text.
|
|
99
|
+
* @param {boolean} [input.budget.exhausted]
|
|
100
|
+
* @param {number} [input.budget.elapsedSeconds]
|
|
249
101
|
* @returns {{ blockClass: string, reason: string }}
|
|
250
102
|
*/
|
|
251
103
|
export function classifyMergeBlock(input) {
|
|
252
104
|
const { armResult, prProbe, budget } = input ?? {};
|
|
253
105
|
|
|
254
|
-
// 1. Arm
|
|
106
|
+
// 1. Arm failed: no armed PR is left to probe.
|
|
255
107
|
if (armResult && armResult.armed === false) {
|
|
256
108
|
const detail = armResult.reason ?? armResult.error ?? '';
|
|
257
109
|
if (textIncludesAny(detail, BRANCH_PROTECTION_MARKERS)) {
|
|
@@ -268,49 +120,25 @@ export function classifyMergeBlock(input) {
|
|
|
268
120
|
};
|
|
269
121
|
}
|
|
270
122
|
|
|
271
|
-
// Positive
|
|
272
|
-
//
|
|
273
|
-
// or a probe race) routes to the api-race re-arm below, and
|
|
274
|
-
// `undefined` (no probe at all) keeps its budget-timeout mapping in
|
|
275
|
-
// step 2 without suppressing the step-3 human-required verdict.
|
|
123
|
+
// Positive evidence only: `unknown` routes to the fallback; `undefined`
|
|
124
|
+
// (no probe) keeps the step-2 mapping.
|
|
276
125
|
const checksStatus = prProbe?.checksStatus;
|
|
277
|
-
// A required run still queued/in-progress on the head is the
|
|
278
|
-
// protected-branch pending steady state (Story #4695), so it counts as
|
|
279
|
-
// in-flight evidence exactly like a `pending`/`still-running` aggregate —
|
|
280
|
-
// keeping a red-rollup-but-required-run-in-flight probe out of the
|
|
281
|
-
// human-required verdict below and into the timeout branch on budget expiry.
|
|
282
126
|
const checksPendingEvidence =
|
|
283
127
|
checksStatus === 'pending' ||
|
|
284
128
|
checksStatus === 'still-running' ||
|
|
285
129
|
prProbe?.requiredRunEvidence?.requiredRunInFlight === true;
|
|
286
130
|
|
|
287
|
-
// 1b.
|
|
288
|
-
//
|
|
289
|
-
// BLOCKED-merge-state heuristic, which would otherwise attribute the red
|
|
290
|
-
// check to branch protection on any protected base.
|
|
291
|
-
//
|
|
292
|
-
// Gated on `requiredCheckFailedBlocksMerge` (Story #4695), not the raw
|
|
293
|
-
// rollup status: `checksStatus: 'failure'` covers optional checks AND the
|
|
294
|
-
// protected-branch pending state where a required run is merely queued (the
|
|
295
|
-
// rollup counts a cancelled superseded run as failure). Naming either as THE
|
|
296
|
-
// block sends the operator to fix a check that was never gating the merge —
|
|
297
|
-
// on a PR that merges on its own. Only head-anchored evidence of a genuinely
|
|
298
|
-
// red required run with none in flight classifies here; anything short of
|
|
299
|
-
// that falls through, keeps polling, and — on budget expiry with checks in
|
|
300
|
-
// flight — classifies `checks-pending-timeout` as before.
|
|
131
|
+
// 1b. Definitive, and before step 3 since it also presents as BLOCKED.
|
|
132
|
+
// Head-anchored evidence, not the raw rollup (optional/superseded runs).
|
|
301
133
|
if (requiredCheckFailedBlocksMerge(prProbe)) {
|
|
302
|
-
const evidencePath = prProbe?.evidencePath;
|
|
303
134
|
return {
|
|
304
|
-
blockClass:
|
|
305
|
-
reason:
|
|
135
|
+
blockClass: CHECKS_FAILED_CLASS,
|
|
136
|
+
reason: formatChecksFailedReason(prProbe, prProbe?.evidencePath),
|
|
306
137
|
};
|
|
307
138
|
}
|
|
308
139
|
|
|
309
|
-
// 2.
|
|
310
|
-
//
|
|
311
|
-
// 'BLOCKED'` is the steady state on a protected branch while required
|
|
312
|
-
// checks run, so a slow-CI timeout must not read as human-required —
|
|
313
|
-
// it must consume the headless once-only budget extension instead.
|
|
140
|
+
// 2. BLOCKED is the steady state while checks run; a slow-CI timeout must
|
|
141
|
+
// not read as human-required.
|
|
314
142
|
if (
|
|
315
143
|
budget &&
|
|
316
144
|
budget.exhausted === true &&
|
|
@@ -322,11 +150,7 @@ export function classifyMergeBlock(input) {
|
|
|
322
150
|
};
|
|
323
151
|
}
|
|
324
152
|
|
|
325
|
-
// 3.
|
|
326
|
-
// only without positive checks-in-flight evidence —
|
|
327
|
-
// BLOCKED-with-settled-checks is a genuinely human gate (e.g. a
|
|
328
|
-
// missing required approval), whereas BLOCKED-while-checks-run is the
|
|
329
|
-
// protected-branch steady state.
|
|
153
|
+
// 3. BLOCKED counts only with checks settled — a genuinely human gate.
|
|
330
154
|
if (prProbe) {
|
|
331
155
|
if (
|
|
332
156
|
prProbe.reviewDecision === 'REVIEW_REQUIRED' ||
|
|
@@ -339,7 +163,6 @@ export function classifyMergeBlock(input) {
|
|
|
339
163
|
}
|
|
340
164
|
}
|
|
341
165
|
|
|
342
|
-
// 4. Fallback.
|
|
343
166
|
return {
|
|
344
167
|
blockClass: 'api-race-other',
|
|
345
168
|
reason: describeApiRaceFallback(prProbe, budget),
|