mandrel 2.60.0 → 2.62.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/README.md +10 -10
- package/.agents/agents/story-worker.md +1 -1
- package/.agents/docs/agentrc-reference.json +4 -82
- package/.agents/docs/configuration.md +20 -87
- package/.agents/docs/workflows.md +1 -1
- package/.agents/instructions.md +1 -3
- package/.agents/rules/gherkin-standards.md +4 -0
- package/.agents/schemas/agentrc.schema.json +11 -486
- package/.agents/schemas/story-deliver-terminal.schema.json +10 -0
- package/.agents/schemas/validation-evidence.schema.json +2 -1
- package/.agents/scripts/README.md +14 -14
- package/.agents/scripts/acceptance-eval.js +32 -164
- package/.agents/scripts/agents-bootstrap-github.js +27 -129
- package/.agents/scripts/apply-quality-bootstrap.js +4 -40
- package/.agents/scripts/audit-baselines.js +6 -27
- package/.agents/scripts/audit-labels-bootstrap.js +5 -29
- package/.agents/scripts/audit-to-stories.js +91 -361
- package/.agents/scripts/boot-sweep.js +19 -72
- package/.agents/scripts/bootstrap.js +74 -395
- package/.agents/scripts/ceremony-derive.js +9 -45
- package/.agents/scripts/check-arch-cycles.js +14 -64
- package/.agents/scripts/check-baselines.js +8 -48
- package/.agents/scripts/check-context-budget.js +46 -172
- package/.agents/scripts/check-cyclomatic.js +12 -44
- package/.agents/scripts/check-dead-exports.js +13 -64
- package/.agents/scripts/check-doc-links.js +38 -186
- package/.agents/scripts/check-gherkin-corpus.js +24 -127
- package/.agents/scripts/check-test-temp-hygiene.js +28 -169
- package/.agents/scripts/coverage-capture.js +32 -99
- package/.agents/scripts/deliver-light.js +14 -101
- package/.agents/scripts/deliver-recover.js +6 -42
- package/.agents/scripts/deliver-run.js +36 -133
- package/.agents/scripts/diagnose-friction.js +24 -116
- package/.agents/scripts/drain-pending-cleanup.js +1 -1
- package/.agents/scripts/evidence-gate.js +23 -85
- package/.agents/scripts/file-ci-gap.js +10 -50
- package/.agents/scripts/generate-config-docs.js +30 -170
- package/.agents/scripts/generate-lens-checklists.js +8 -52
- package/.agents/scripts/generate-skills-index.js +14 -112
- package/.agents/scripts/generate-workflows-doc.js +10 -70
- package/.agents/scripts/git-cleanup.js +2 -34
- package/.agents/scripts/lib/Graph.js +24 -81
- package/.agents/scripts/lib/ITicketingProvider.js +47 -143
- package/.agents/scripts/lib/Logger.js +14 -76
- package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
- package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
- package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
- package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
- package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
- package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
- package/.agents/scripts/lib/audit-baselines/read.js +3 -16
- package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
- package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
- package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
- package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
- package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
- package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
- package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
- package/.agents/scripts/lib/audit-suite/findings.js +12 -52
- package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
- package/.agents/scripts/lib/audit-suite/index.js +1 -15
- package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
- package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
- package/.agents/scripts/lib/audit-suite/runner.js +13 -43
- package/.agents/scripts/lib/audit-suite/selector.js +49 -349
- package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
- package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
- package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
- package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
- package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
- package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
- package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
- package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
- package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
- package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
- package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
- package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
- package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
- package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
- package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
- package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
- package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
- package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
- package/.agents/scripts/lib/baseline-loader.js +12 -51
- package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
- package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
- package/.agents/scripts/lib/baselines/components.js +10 -61
- package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
- package/.agents/scripts/lib/baselines/crap-preview-incremental.js +5 -21
- package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
- package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
- package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
- package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
- package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
- package/.agents/scripts/lib/baselines/envelope.js +13 -129
- package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
- package/.agents/scripts/lib/baselines/git-base.js +23 -142
- package/.agents/scripts/lib/baselines/kernel.js +11 -111
- package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
- package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
- package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
- package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
- package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
- package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
- package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
- package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
- package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
- package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
- package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
- package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
- package/.agents/scripts/lib/baselines/path-canon.js +19 -128
- package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
- package/.agents/scripts/lib/baselines/reader.js +14 -107
- package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
- package/.agents/scripts/lib/baselines/scope.js +11 -135
- package/.agents/scripts/lib/baselines/writer.js +16 -149
- package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
- package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
- package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
- package/.agents/scripts/lib/bdd-step-index.js +26 -100
- package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
- package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
- package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
- package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
- package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
- package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
- package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
- package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
- package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
- package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
- package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
- package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
- package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
- package/.agents/scripts/lib/bootstrap/summary.js +1 -8
- package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
- package/.agents/scripts/lib/branch-name-guard.js +4 -23
- package/.agents/scripts/lib/changed-files.js +31 -143
- package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
- package/.agents/scripts/lib/checks/index.js +18 -101
- package/.agents/scripts/lib/checks/loop-health.js +11 -53
- package/.agents/scripts/lib/checks/state.js +16 -91
- package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
- package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
- package/.agents/scripts/lib/child-exec.js +39 -108
- package/.agents/scripts/lib/cli/standard-args.js +9 -116
- package/.agents/scripts/lib/cli-args.js +31 -146
- package/.agents/scripts/lib/cli-usage.js +5 -27
- package/.agents/scripts/lib/cli-utils.js +2 -12
- package/.agents/scripts/lib/close-validation/commands.js +13 -76
- package/.agents/scripts/lib/close-validation/gates.js +92 -331
- package/.agents/scripts/lib/close-validation/process.js +121 -151
- package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
- package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
- package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
- package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
- package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
- package/.agents/scripts/lib/close-validation/runner.js +53 -110
- package/.agents/scripts/lib/command-header.js +6 -28
- package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
- package/.agents/scripts/lib/config/baselines.js +3 -14
- package/.agents/scripts/lib/config/ci.js +8 -38
- package/.agents/scripts/lib/config/commands.js +1 -15
- package/.agents/scripts/lib/config/defaults.js +4 -33
- package/.agents/scripts/lib/config/delivery-routing.js +6 -35
- package/.agents/scripts/lib/config/explain.js +9 -80
- package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
- package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +2 -30
- package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
- package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
- package/.agents/scripts/lib/config/gates/index.js +2 -17
- package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
- package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
- package/.agents/scripts/lib/config/gates/shared.js +4 -64
- package/.agents/scripts/lib/config/github.js +4 -22
- package/.agents/scripts/lib/config/limits.js +4 -57
- package/.agents/scripts/lib/config/paths.js +2 -21
- package/.agents/scripts/lib/config/qa.js +4 -38
- package/.agents/scripts/lib/config/quality.js +76 -432
- package/.agents/scripts/lib/config/runners.js +12 -56
- package/.agents/scripts/lib/config/runtime.js +13 -57
- package/.agents/scripts/lib/config/shared.js +2 -16
- package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
- package/.agents/scripts/lib/config/temp-paths.js +40 -280
- package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
- package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
- package/.agents/scripts/lib/config-resolver.js +10 -52
- package/.agents/scripts/lib/config-schema-shared.js +1 -4
- package/.agents/scripts/lib/config-settings-schema-delivery.js +12 -294
- package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
- package/.agents/scripts/lib/config-settings-schema.js +37 -274
- package/.agents/scripts/lib/coverage-baseline.js +20 -110
- package/.agents/scripts/lib/coverage-capture-fullscope.js +12 -37
- package/.agents/scripts/lib/coverage-capture-incremental.js +12 -43
- package/.agents/scripts/lib/coverage-capture-usage.js +4 -24
- package/.agents/scripts/lib/coverage-capture.js +99 -224
- package/.agents/scripts/lib/coverage-utils.js +14 -79
- package/.agents/scripts/lib/cpu-pool.js +17 -123
- package/.agents/scripts/lib/crap-baseline-join.js +16 -88
- package/.agents/scripts/lib/crap-coordinates.js +6 -25
- package/.agents/scripts/lib/crap-engine.js +40 -153
- package/.agents/scripts/lib/crap-method-identity.js +16 -78
- package/.agents/scripts/lib/crap-utils.js +31 -155
- package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
- package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
- package/.agents/scripts/lib/dead-exports-knip.js +18 -56
- package/.agents/scripts/lib/dead-exports-mode.js +5 -24
- package/.agents/scripts/lib/degraded-mode.js +3 -26
- package/.agents/scripts/lib/dependency-parser.js +8 -40
- package/.agents/scripts/lib/dependency-version.js +13 -35
- package/.agents/scripts/lib/detect-package-manager.js +6 -36
- package/.agents/scripts/lib/doc-tiers.js +22 -126
- package/.agents/scripts/lib/duplicate-search.js +8 -72
- package/.agents/scripts/lib/env-loader.js +5 -27
- package/.agents/scripts/lib/error-redactor.js +6 -31
- package/.agents/scripts/lib/errors/index.js +2 -22
- package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
- package/.agents/scripts/lib/escomplex-kernel.js +21 -123
- package/.agents/scripts/lib/feedback-loop/graduator-core.js +93 -419
- package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
- package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -151
- package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
- package/.agents/scripts/lib/findings/classify-finding.js +14 -69
- package/.agents/scripts/lib/findings/promote-finding.js +14 -112
- package/.agents/scripts/lib/findings/provenance-field.js +11 -52
- package/.agents/scripts/lib/findings/route-finding.js +37 -255
- package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
- package/.agents/scripts/lib/findings/severity.js +18 -104
- package/.agents/scripts/lib/format-generated-json.js +12 -44
- package/.agents/scripts/lib/full-suite-lock.js +160 -429
- package/.agents/scripts/lib/full-suite-queue.js +213 -0
- package/.agents/scripts/lib/gates/baseline-store.js +5 -9
- package/.agents/scripts/lib/gates/friction.js +1 -3
- package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
- package/.agents/scripts/lib/gh-exec.js +31 -259
- package/.agents/scripts/lib/git/cached-fetch.js +9 -52
- package/.agents/scripts/lib/git/sync-from-base.js +15 -107
- package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
- package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
- package/.agents/scripts/lib/git-utils.js +37 -161
- package/.agents/scripts/lib/github/framework-repo.js +8 -71
- package/.agents/scripts/lib/github-url.js +2 -17
- package/.agents/scripts/lib/import-graph.js +11 -38
- package/.agents/scripts/lib/install-cmd-parser.js +4 -13
- package/.agents/scripts/lib/json-utils.js +3 -18
- package/.agents/scripts/lib/label-constants.js +16 -111
- package/.agents/scripts/lib/label-taxonomy.js +4 -30
- package/.agents/scripts/lib/maintainability-engine.js +12 -80
- package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
- package/.agents/scripts/lib/maintainability-utils.js +16 -92
- package/.agents/scripts/lib/mandrel-catalog.js +12 -70
- package/.agents/scripts/lib/notifications/notifier.js +13 -38
- package/.agents/scripts/lib/npm-scripts.js +4 -23
- package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
- package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
- package/.agents/scripts/lib/observability/signal-validator.js +5 -37
- package/.agents/scripts/lib/observability/signals-writer.js +11 -121
- package/.agents/scripts/lib/observability/source-classifier.js +21 -203
- package/.agents/scripts/lib/observability/terse-result.js +14 -47
- package/.agents/scripts/lib/onboard/init-tail.js +13 -74
- package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
- package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
- package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
- package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
- package/.agents/scripts/lib/orchestration/ceremony-routing.js +5 -75
- package/.agents/scripts/lib/orchestration/change-set.js +7 -36
- package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
- package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
- package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
- package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
- package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
- package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
- package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
- package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
- package/.agents/scripts/lib/orchestration/check-state.js +92 -0
- package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
- package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +42 -189
- package/.agents/scripts/lib/orchestration/code-review.js +24 -128
- package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
- package/.agents/scripts/lib/orchestration/complexity-gate.js +42 -214
- package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
- package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
- package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
- package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
- package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
- package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
- package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
- package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
- package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
- package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
- package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
- package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
- package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
- package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
- package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
- package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
- package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
- package/.agents/scripts/lib/orchestration/light-suitability.js +26 -231
- package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
- package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
- package/.agents/scripts/lib/orchestration/merge-queue.js +158 -0
- package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
- package/.agents/scripts/lib/orchestration/plan-context.js +52 -303
- package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
- package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
- package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
- package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
- package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
- package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
- package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +14 -78
- package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
- package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
- package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
- package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
- package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
- package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
- package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +49 -248
- package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +85 -368
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +8 -38
- package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +30 -190
- package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
- package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
- package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
- package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
- package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
- package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
- package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
- package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
- package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
- package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
- package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
- package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
- package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
- package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
- package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
- package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
- package/.agents/scripts/lib/orchestration/review-depth.js +12 -94
- package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
- package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
- package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
- package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
- package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
- package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
- package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
- package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
- package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
- package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
- package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
- package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
- package/.agents/scripts/lib/orchestration/run-epilogue.js +40 -199
- package/.agents/scripts/lib/orchestration/run-scoped-config.js +13 -81
- package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
- package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
- package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
- package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +190 -280
- package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +18 -80
- package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
- package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
- package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +183 -485
- package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
- package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +9 -50
- package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
- package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
- package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
- package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
- package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
- package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +110 -290
- package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
- package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
- package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
- package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
- package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
- package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
- package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
- package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
- package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -201
- package/.agents/scripts/lib/orchestration/story-follow-ups.js +43 -245
- package/.agents/scripts/lib/orchestration/story-init-envelope.js +4 -23
- package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
- package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
- package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -126
- package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
- package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
- package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
- package/.agents/scripts/lib/orchestration/ticket-validator.js +39 -181
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -250
- package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
- package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
- package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
- package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
- package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
- package/.agents/scripts/lib/path-security.js +3 -6
- package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
- package/.agents/scripts/lib/preflight-runner.js +13 -69
- package/.agents/scripts/lib/process-group.js +143 -0
- package/.agents/scripts/lib/project-root.js +2 -8
- package/.agents/scripts/lib/provider-factory.js +2 -25
- package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
- package/.agents/scripts/lib/qa/qa-session.js +15 -69
- package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
- package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
- package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
- package/.agents/scripts/lib/reserved-test-ids.js +9 -47
- package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
- package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
- package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
- package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
- package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
- package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
- package/.agents/scripts/lib/signals/detectors/common.js +12 -38
- package/.agents/scripts/lib/signals/index.js +2 -19
- package/.agents/scripts/lib/signals/schema.js +14 -109
- package/.agents/scripts/lib/signals/write.js +2 -11
- package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
- package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
- package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
- package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
- package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
- package/.agents/scripts/lib/single-story-sweep.js +14 -97
- package/.agents/scripts/lib/skills/parse-skill.js +13 -59
- package/.agents/scripts/lib/skills/skills-index.js +8 -29
- package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
- package/.agents/scripts/lib/source-extensions.js +11 -42
- package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
- package/.agents/scripts/lib/stdio-flush.js +9 -36
- package/.agents/scripts/lib/story-adjacency.js +8 -40
- package/.agents/scripts/lib/story-body/body-format-lints.js +22 -83
- package/.agents/scripts/lib/story-body/footer-block.js +11 -44
- package/.agents/scripts/lib/story-body/story-body.js +83 -358
- package/.agents/scripts/lib/temp-retention.js +42 -143
- package/.agents/scripts/lib/templates/decomposer-prompts.js +11 -65
- package/.agents/scripts/lib/test-env.js +12 -65
- package/.agents/scripts/lib/test-run-credit.js +10 -65
- package/.agents/scripts/lib/test-runner-contract.js +19 -74
- package/.agents/scripts/lib/test-temp.js +38 -184
- package/.agents/scripts/lib/test-tiers.js +12 -96
- package/.agents/scripts/lib/ticket-body-sections.js +21 -96
- package/.agents/scripts/lib/transpile.js +15 -74
- package/.agents/scripts/lib/util/concurrent-map.js +6 -25
- package/.agents/scripts/lib/util/parse-id-list.js +8 -34
- package/.agents/scripts/lib/util/poll-loop.js +8 -28
- package/.agents/scripts/lib/util/with-timeout.js +2 -11
- package/.agents/scripts/lib/validation-evidence.js +21 -96
- package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
- package/.agents/scripts/lib/wave-runner/live-probe.js +53 -221
- package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
- package/.agents/scripts/lib/workers/crap-worker.js +11 -64
- package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
- package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
- package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
- package/.agents/scripts/lib/workflow-closure.js +22 -105
- package/.agents/scripts/lib/workspace-provisioner.js +16 -54
- package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
- package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
- package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
- package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
- package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
- package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
- package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
- package/.agents/scripts/lib/worktree-manager.js +15 -40
- package/.agents/scripts/lint-issue-body.js +12 -68
- package/.agents/scripts/mandrel-update-preflight.js +10 -70
- package/.agents/scripts/merge-baseline.js +30 -104
- package/.agents/scripts/nav-registry-diff.js +22 -108
- package/.agents/scripts/notify.js +12 -69
- package/.agents/scripts/plan-context.js +27 -111
- package/.agents/scripts/plan-critics.js +12 -66
- package/.agents/scripts/plan-persist.js +31 -148
- package/.agents/scripts/plan-run-epilogue.js +11 -37
- package/.agents/scripts/pr-watch-with-update.js +76 -267
- package/.agents/scripts/providers/github/auth.js +3 -8
- package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
- package/.agents/scripts/providers/github/board-add.js +5 -21
- package/.agents/scripts/providers/github/branch-protection.js +11 -43
- package/.agents/scripts/providers/github/cache.js +2 -14
- package/.agents/scripts/providers/github/comments.js +7 -40
- package/.agents/scripts/providers/github/compose.js +3 -19
- package/.agents/scripts/providers/github/errors.js +22 -125
- package/.agents/scripts/providers/github/issues.js +31 -123
- package/.agents/scripts/providers/github/labels.js +24 -124
- package/.agents/scripts/providers/github/mappers.js +5 -27
- package/.agents/scripts/providers/github/merge-methods.js +3 -22
- package/.agents/scripts/providers/github/project-board.js +2 -17
- package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
- package/.agents/scripts/providers/github/request-helpers.js +5 -32
- package/.agents/scripts/providers/github/search-budget.js +9 -39
- package/.agents/scripts/providers/github/search-query.js +5 -26
- package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
- package/.agents/scripts/providers/github/sub-issues.js +7 -36
- package/.agents/scripts/providers/github/tickets.js +32 -134
- package/.agents/scripts/providers/github.js +18 -59
- package/.agents/scripts/prune-plan-run-labels.js +12 -46
- package/.agents/scripts/quality-preview.js +35 -220
- package/.agents/scripts/resolve-doc-tiers.js +3 -26
- package/.agents/scripts/resolve-stories.js +16 -67
- package/.agents/scripts/resync-status-column.js +6 -25
- package/.agents/scripts/run-tests.js +29 -104
- package/.agents/scripts/single-story-close.js +23 -135
- package/.agents/scripts/single-story-confirm-merge.js +32 -139
- package/.agents/scripts/single-story-init.js +47 -209
- package/.agents/scripts/stories-wave-tick.js +102 -472
- package/.agents/scripts/sync-agentrc.js +3 -21
- package/.agents/scripts/sync-claude-agents.js +9 -55
- package/.agents/scripts/sync-claude-commands.js +20 -110
- package/.agents/scripts/test-wrapper.js +6 -43
- package/.agents/scripts/update-coverage-baseline.js +5 -22
- package/.agents/scripts/update-crap-baseline.js +7 -30
- package/.agents/scripts/update-duplication-baseline.js +16 -92
- package/.agents/scripts/update-maintainability-baseline.js +8 -62
- package/.agents/scripts/update-ticket-state.js +1 -7
- package/.agents/scripts/validate-skills.js +6 -26
- package/.agents/templates/agent-protocol.md +2 -2
- package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
- package/.agents/workflows/audit-accessibility.md +4 -7
- package/.agents/workflows/audit-adrs.md +3 -6
- package/.agents/workflows/audit-architecture.md +3 -11
- package/.agents/workflows/audit-baselines.md +6 -9
- package/.agents/workflows/audit-clean-code.md +8 -12
- package/.agents/workflows/audit-data-model.md +3 -7
- package/.agents/workflows/audit-dependencies.md +4 -7
- package/.agents/workflows/audit-devops.md +4 -8
- package/.agents/workflows/audit-documentation.md +1 -4
- package/.agents/workflows/audit-mobile.md +4 -7
- package/.agents/workflows/audit-navigability.md +3 -6
- package/.agents/workflows/audit-performance.md +2 -4
- package/.agents/workflows/audit-privacy.md +4 -7
- package/.agents/workflows/audit-quality.md +4 -7
- package/.agents/workflows/audit-security.md +4 -7
- package/.agents/workflows/audit-seo.md +4 -7
- package/.agents/workflows/audit-sre.md +4 -7
- package/.agents/workflows/audit-to-stories.md +17 -30
- package/.agents/workflows/audit-ux-ui.md +4 -7
- package/.agents/workflows/helpers/audit-lens-core.md +1 -1
- package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
- package/.agents/workflows/helpers/deliver-digest.md +6 -4
- package/.agents/workflows/helpers/deliver-reference.md +114 -188
- package/.agents/workflows/helpers/deliver-story-reference.md +189 -533
- package/.agents/workflows/helpers/plan-reference.md +86 -139
- package/.agents/workflows/helpers/qa-core.md +12 -0
- package/.agents/workflows/memory-consolidate.md +1 -1
- package/.agents/workflows/qa-assist.md +27 -71
- package/.agents/workflows/qa-explore.md +19 -59
- package/.agents/workflows/qa-run.md +11 -33
- package/README.md +1 -1
- package/bin/mandrel.js +5 -46
- package/bin/postinstall.js +18 -107
- package/docs/CHANGELOG.md +32 -0
- package/lib/cli/doctor.js +11 -71
- package/lib/cli/init.js +26 -165
- package/lib/cli/migrate.js +5 -64
- package/lib/cli/registry.js +84 -467
- package/lib/cli/sync-agents.js +4 -64
- package/lib/cli/sync-commands.js +11 -64
- package/lib/cli/sync.js +34 -213
- package/lib/cli/uninstall.js +40 -219
- package/lib/cli/update.js +105 -661
- package/lib/cli/version-check.js +8 -72
- package/lib/cli/version-helpers.js +14 -87
- package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
- package/lib/migrations/index.js +15 -92
- package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
- package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
- package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
- package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
- package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
- package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
- package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
- package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
- package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +2 -21
- package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
- package/package.json +16 -14
- package/.agents/docs/SDLC.md +0 -590
- package/.agents/docs/quality-gates.md +0 -1183
- package/.agents/rules/known-tooling-behavior.md +0 -200
- package/.agents/rules/orchestration-error-handling.md +0 -61
- package/.agents/rules/test-seams.md +0 -59
- package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
- package/.agents/schemas/baselines/lint.schema.json +0 -47
- package/.agents/scripts/check-action-pinning.js +0 -260
- package/.agents/scripts/check-audit-attribution.js +0 -302
- package/.agents/scripts/check-baseline-drift.js +0 -211
- package/.agents/scripts/check-baseline-scope.js +0 -362
- package/.agents/scripts/check-generated-validator.js +0 -202
- package/.agents/scripts/check-knip-entries.js +0 -159
- package/.agents/scripts/check-lifecycle-lint.js +0 -294
- package/.agents/scripts/check-pinned-override-notes.js +0 -102
- package/.agents/scripts/check-schema-references.js +0 -368
- package/.agents/scripts/check-test-portability.js +0 -512
- package/.agents/scripts/check-workflow-citations.js +0 -218
- package/.agents/scripts/check-workflow-cli-lint.js +0 -299
- package/.agents/scripts/check-workflow-timeouts.js +0 -291
- package/.agents/scripts/install-matrix-assert.js +0 -326
- package/.agents/scripts/lib/audit-advisories.js +0 -195
- package/.agents/scripts/lib/audit-attribution.js +0 -134
- package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
- package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
- package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
- package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
- package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
- package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
- package/.agents/scripts/lib/c8-cli-path.js +0 -21
- package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
- package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
- package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
- package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
- package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
- package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
- package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
- package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
- package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
- package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
- package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
- package/.agents/scripts/lib/fs-walk.js +0 -52
- package/.agents/scripts/lib/knip-config-resolver.js +0 -181
- package/.agents/scripts/lib/knip-entry-sync.js +0 -452
- package/.agents/scripts/lib/pinned-override-notes.js +0 -88
- package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
- package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
- package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
- package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
- package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
- package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
- package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
- package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
- package/.agents/scripts/lib/test-isolate/runner.js +0 -483
- package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
- package/.agents/scripts/lib/test-profile/render-report.js +0 -45
- package/.agents/scripts/lint-label-vocabulary.js +0 -214
- package/.agents/scripts/post-structured-comment.js +0 -127
- package/.agents/scripts/provision-git-hooks.js +0 -85
- package/.agents/scripts/prune-baseline-orphans.js +0 -181
- package/.agents/scripts/run-coverage.js +0 -197
- package/.agents/scripts/run-lint.js +0 -133
- package/.agents/scripts/run-test-profile.js +0 -129
- package/.agents/scripts/run-verify.js +0 -125
- package/.agents/scripts/test-isolate.js +0 -55
- package/.agents/scripts/update-dead-exports-baseline.js +0 -321
|
@@ -1,17 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* single-story-close/failed-terminal.js — the `failed`
|
|
3
|
-
* emits when a phase
|
|
4
|
-
*
|
|
5
|
-
* Split out of `single-story-close.js` so the CLI entry stays an entry: it
|
|
6
|
-
* parses args, dispatches the runner, and maps a terminal onto an exit code.
|
|
7
|
-
* The reasoning about which gates had run by the time a phase died belongs
|
|
8
|
-
* with the envelope it feeds, not in the file that owns process lifetime.
|
|
9
|
-
*
|
|
10
|
-
* The runner deliberately throws rather than returning a failure (a red gate
|
|
11
|
-
* must not look like a return value), so without this the most common
|
|
12
|
-
* non-happy ending — a failing close-validation gate — would emit **no
|
|
13
|
-
* envelope at all**, exiting 1 with only a stderr line while the workflow
|
|
14
|
-
* docs promise the agent a `failed` envelope naming the phase.
|
|
2
|
+
* single-story-close/failed-terminal.js — the `failed` envelope a close
|
|
3
|
+
* emits when a phase throws, so a crashed close still reports which phase
|
|
4
|
+
* died and which gates had run.
|
|
15
5
|
*/
|
|
16
6
|
|
|
17
7
|
import { Logger } from '../../Logger.js';
|
|
@@ -21,16 +11,12 @@ import {
|
|
|
21
11
|
} from '../story-deliver-terminal.js';
|
|
22
12
|
|
|
23
13
|
/**
|
|
24
|
-
* The
|
|
25
|
-
*
|
|
14
|
+
* The phase order `setPhase` walks; it MUST track `runPrePushPhases`, since
|
|
15
|
+
* it decides which gates had cleared when a later phase died.
|
|
26
16
|
*/
|
|
27
17
|
const PHASE_ORDER = Object.freeze([
|
|
28
18
|
'init',
|
|
29
19
|
'wrong-tree-guard',
|
|
30
|
-
// Story #5172 — base-sync now precedes close-validation, so the tree the
|
|
31
|
-
// gates validate is the tree the push sends. The order here is not
|
|
32
|
-
// decoration: it is how a failed terminal decides which gates had already
|
|
33
|
-
// cleared, so it MUST track `runPrePushPhases`.
|
|
34
20
|
'base-sync',
|
|
35
21
|
'close-validation',
|
|
36
22
|
'push',
|
|
@@ -42,7 +28,6 @@ const PHASE_ORDER = Object.freeze([
|
|
|
42
28
|
'done',
|
|
43
29
|
]);
|
|
44
30
|
|
|
45
|
-
/** Each reported gate and the pipeline phase that decides it. */
|
|
46
31
|
const GATE_PHASES = Object.freeze([
|
|
47
32
|
['validation', 'close-validation'],
|
|
48
33
|
['baseSync', 'base-sync'],
|
|
@@ -50,18 +35,9 @@ const GATE_PHASES = Object.freeze([
|
|
|
50
35
|
]);
|
|
51
36
|
|
|
52
37
|
/**
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
* `runner.js#baselinesEnvelopeGates`, so the two endings of one run cannot
|
|
57
|
-
* key the same gate differently.
|
|
58
|
-
*
|
|
59
|
-
* Deliberately a local copy rather than an import: several close suites
|
|
60
|
-
* replace that module wholesale via `t.mock.module`, and a named import here
|
|
61
|
-
* would fail to link against a mock that does not re-export the constant —
|
|
62
|
-
* turning an unrelated test's mock into a load error on the CLI's own entry
|
|
63
|
-
* path. `tests/close-validation-gates-enum.test.js` pins the two lists
|
|
64
|
-
* against each other so the copy cannot drift.
|
|
38
|
+
* Mirrors `BASELINES_GATE_NAMES` in `lib/close-validation/gates.js`. A local
|
|
39
|
+
* copy, not an import, because close suites mock that module wholesale and a
|
|
40
|
+
* named import would fail to link; a test pins the two lists equal.
|
|
65
41
|
*/
|
|
66
42
|
const BASELINES_ENTRY_NAMES = Object.freeze([
|
|
67
43
|
'check-baselines',
|
|
@@ -70,21 +46,8 @@ const BASELINES_ENTRY_NAMES = Object.freeze([
|
|
|
70
46
|
]);
|
|
71
47
|
|
|
72
48
|
/**
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
* This used to RECONSTRUCT them: it inferred, from the phase the run died in
|
|
77
|
-
* plus the name of the failing gate, what the two split entries "must have"
|
|
78
|
-
* done — and it did so over a hardcoded pair, so every failed close reported
|
|
79
|
-
* both split names whether or not the run had ever registered them. A repo
|
|
80
|
-
* whose config resolves to the unsplit `check-baselines`, or to only one half
|
|
81
|
-
* of the pair, got envelope keys for gates that did not exist; a run that
|
|
82
|
-
* died at `init` got them too, reported as `skipped`, which reads as "the
|
|
83
|
-
* gate was turned off" rather than "there was no such gate".
|
|
84
|
-
*
|
|
85
|
-
* Reporting instead of reconstructing removes the whole class: an outcome
|
|
86
|
-
* appears only for a gate the run actually observed, and the runner tags
|
|
87
|
-
* exactly that set onto the error (`err.closeGates`).
|
|
49
|
+
* Baselines outcomes the run actually observed (`err.closeGates`) — reported,
|
|
50
|
+
* never reconstructed, so a gate the run never registered cannot appear.
|
|
88
51
|
*
|
|
89
52
|
* @param {Record<string, string>|null|undefined} observedGates
|
|
90
53
|
* @returns {Record<string, 'passed'|'failed'|'skipped'>}
|
|
@@ -98,30 +61,12 @@ function baselinesGatesObserved(observedGates) {
|
|
|
98
61
|
}
|
|
99
62
|
|
|
100
63
|
/**
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
* The schema's contract: "A gate the run skipped … reports `skipped` rather
|
|
104
|
-
* than being omitted, so a missing gate is never mistaken for a passing one."
|
|
105
|
-
* The previous shape named only the gate that died and omitted the rest
|
|
106
|
-
* entirely — exactly the ambiguity the contract forbids.
|
|
107
|
-
*
|
|
108
|
-
* Reconstructed from the phase order, which is sound because the pipeline is
|
|
109
|
-
* strictly sequential: reaching phase N means every gate before it completed.
|
|
110
|
-
* A gate whose phase the run never reached is `skipped`; one the operator
|
|
111
|
-
* turned off via `--skip-validation` / `--skip-sync` is `skipped` too (it did
|
|
112
|
-
* not pass — it never ran).
|
|
113
|
-
*
|
|
114
|
-
* Story #5172 — the reported set also carries the baselines entries under
|
|
115
|
-
* their own names, so a failed close says WHICH half of the baselines gate
|
|
116
|
-
* breached instead of a single generic verdict. Story #5279 — those names
|
|
117
|
-
* are REPORTED from `observedGates`, never reconstructed, so only a gate the
|
|
118
|
-
* run registered can appear.
|
|
64
|
+
* Every gate's outcome, never omitted (a missing gate would read as passing);
|
|
65
|
+
* an unreached or operator-skipped gate is `skipped`.
|
|
119
66
|
*
|
|
120
67
|
* @param {string} phase The phase the run died in.
|
|
121
68
|
* @param {{ skipValidation?: boolean, skipSync?: boolean,
|
|
122
69
|
* observedGates?: Record<string, string>|null }} args
|
|
123
|
-
* Parsed CLI args, plus the per-gate outcomes the runner tagged onto the
|
|
124
|
-
* error.
|
|
125
70
|
* @returns {Record<string, 'passed'|'failed'|'skipped'>}
|
|
126
71
|
*/
|
|
127
72
|
export function gatesForFailedPhase(phase, args = {}) {
|
|
@@ -138,31 +83,13 @@ export function gatesForFailedPhase(phase, args = {}) {
|
|
|
138
83
|
}
|
|
139
84
|
|
|
140
85
|
/**
|
|
141
|
-
*
|
|
142
|
-
*
|
|
143
|
-
*
|
|
144
|
-
*
|
|
145
|
-
* `err.closePhase` is tagged by the runner's phase tracker.
|
|
146
|
-
*
|
|
147
|
-
* **Never throws.** This runs on the path that already has one failure in
|
|
148
|
-
* hand, so a second failure here must not REPLACE the first: an
|
|
149
|
-
* envelope-build error surfacing as the run's cause sends the operator to
|
|
150
|
-
* diagnose the wrong thing entirely — a close whose PR had already merged
|
|
151
|
-
* once reported a schema `ENOENT` as its fatal error, because the worktree
|
|
152
|
-
* holding the script had been reaped mid-run. On failure this returns null
|
|
153
|
-
* and the caller rethrows the original.
|
|
154
|
-
*
|
|
155
|
-
* `err.closeGates` — tagged by the runner — carries the per-gate outcomes the
|
|
156
|
-
* run observed, which is what lets the reported gates name the baselines
|
|
157
|
-
* entries that actually ran (Story #5172 / #5279) instead of a hardcoded pair.
|
|
86
|
+
* Never throws: a build failure here must not replace the original error as
|
|
87
|
+
* the run's reported cause, so it returns null and the caller rethrows.
|
|
88
|
+
* `err.closePhase` and `err.closeGates` are tagged by the runner.
|
|
158
89
|
*
|
|
159
90
|
* @param {unknown} err
|
|
160
91
|
* @param {{ storyId?: string|number, skipValidation?: boolean, skipSync?: boolean }} args
|
|
161
|
-
*
|
|
162
|
-
* flags `gatesForFailedPhase` needs.
|
|
163
|
-
* @returns {object|null} A validated envelope, or null when even the story id
|
|
164
|
-
* is unknown (a usage error — there is nothing to report an envelope about)
|
|
165
|
-
* or the envelope itself could not be assembled.
|
|
92
|
+
* @returns {object|null} null when the story id is unknown or assembly failed.
|
|
166
93
|
*/
|
|
167
94
|
export function failedTerminalFor(err, args = {}) {
|
|
168
95
|
const phase = err?.closePhase ?? 'init';
|
|
@@ -1,59 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* single-story-close/gate-log.js —
|
|
3
|
-
*
|
|
2
|
+
* single-story-close/gate-log.js — captures close gate output to an artifact;
|
|
3
|
+
* success emits a digest line, failure replays the tail inline. Never throws.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* `
|
|
8
|
-
* an injected `log`, and the close phase used to hand it `Logger.info` — whose
|
|
9
|
-
* default sink is `console.log`. A single successful close therefore wrote the
|
|
10
|
-
* whole of `npm test`, the linter, and the baseline checks onto the invoking
|
|
11
|
-
* agent's stdout: ~50KB, over the host's inline tool-result ceiling. The caller
|
|
12
|
-
* got a truncated preview, had to open the persisted file anyway, and re-ran
|
|
13
|
-
* close for a clean envelope — burning the run's most expensive stretch to
|
|
14
|
-
* re-derive output it already had.
|
|
15
|
-
*
|
|
16
|
-
* Story #4708 set the contract this restores compliance with (see
|
|
17
|
-
* `rules/orchestration-error-handling.md` § Output Contract): compact digest
|
|
18
|
-
* plus an on-disk artifact path, ≤ ~2KB on the **default success path**.
|
|
19
|
-
*
|
|
20
|
-
* ## The shape
|
|
21
|
-
*
|
|
22
|
-
* A sink captures every gate line to a log under the gitignored temp tree and
|
|
23
|
-
* emits nothing inline. What happens next depends on the outcome, because the
|
|
24
|
-
* two outcomes want opposite things:
|
|
25
|
-
*
|
|
26
|
-
* - **success** — the caller wants the verdict, not the evidence.
|
|
27
|
-
* {@link GateLogSink#digest} is one line: the pass count and the log path.
|
|
28
|
-
* - **failure** — the evidence IS the point, and making the caller open a
|
|
29
|
-
* file to see why a gate went red just moves the cost.
|
|
30
|
-
* {@link GateLogSink#replay} puts the captured tail back inline.
|
|
31
|
-
*
|
|
32
|
-
* `AGENT_LOG_LEVEL=verbose` opts back into live inline streaming (the
|
|
33
|
-
* "existing log-level control"): the capture still happens, so the artifact is
|
|
34
|
-
* written either way.
|
|
35
|
-
*
|
|
36
|
-
* The sink never throws. A log directory that cannot be written degrades to
|
|
37
|
-
* inline streaming — losing the size bound is strictly better than losing the
|
|
38
|
-
* gate output that says why a close failed.
|
|
39
|
-
*
|
|
40
|
-
* ## Why the artifact is written asynchronously (Story #4766)
|
|
41
|
-
*
|
|
42
|
-
* This sink is the `log` callable that `close-validation/process.js` invokes
|
|
43
|
-
* from inside the gate child's stdout/stderr `'data'` handler — once per line.
|
|
44
|
-
* The first cut wrote each line with `fs.writeSync`, which blocks the event
|
|
45
|
-
* loop while the child keeps writing: the OS pipe buffer fills, the child's
|
|
46
|
-
* write fails with `EAGAIN`, and a child that does not tolerate that dies. On
|
|
47
|
-
* a clean `main` `biome ci .` already emits ~625 lines, and it aborts with
|
|
48
|
-
* exit 101 (a `biome_console` panic, not a lint violation) when it happens —
|
|
49
|
-
* so the first gate of any close could die on plumbing while its verdict was
|
|
50
|
-
* green.
|
|
51
|
-
*
|
|
52
|
-
* So the write path buffers into an async stream instead: per-line work is
|
|
53
|
-
* O(1) and never touches a syscall on the drain path. The cost is that the
|
|
54
|
-
* artifact is not on disk the instant a line is logged, which is why the sink
|
|
55
|
-
* exposes {@link GateLogSink#flush} — callers await it before reading,
|
|
56
|
-
* replaying, or naming the artifact as final.
|
|
5
|
+
* Writes are async, never `fs.writeSync`: this runs in the gate child's
|
|
6
|
+
* `'data'` handler, and a blocking write fills the pipe until the child dies
|
|
7
|
+
* on `EAGAIN`. Await {@link GateLogSink#flush} before reading the artifact.
|
|
57
8
|
*/
|
|
58
9
|
|
|
59
10
|
import nodeFs from 'node:fs';
|
|
@@ -62,46 +13,27 @@ import path from 'node:path';
|
|
|
62
13
|
import { orchestrationLogDir } from '../../config/temp-paths.js';
|
|
63
14
|
import { Logger, resolveLevel } from '../../Logger.js';
|
|
64
15
|
|
|
65
|
-
/**
|
|
66
|
-
* How many trailing captured lines {@link GateLogSink#replay} puts back
|
|
67
|
-
* inline. A failed gate's actionable evidence — the assertion, the stack, the
|
|
68
|
-
* summary counts — sits at the end of its output; the head is startup noise.
|
|
69
|
-
* The full text is always in the artifact regardless.
|
|
70
|
-
*/
|
|
16
|
+
/** Trailing lines replayed on failure; a failed gate's evidence sits at the end. */
|
|
71
17
|
export const REPLAY_TAIL_LINES = 200;
|
|
72
18
|
|
|
73
19
|
/**
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
* READER — `deliver-recover.js` uses this file's freshness to tell a live close
|
|
78
|
-
* from a dead one. Deliberately not shared through an import: this sink needs
|
|
79
|
-
* the basename alone (it honours a `logDir` override the path helper knows
|
|
80
|
-
* nothing about), and calling that helper for it would drag tempRoot
|
|
81
|
-
* resolution — a git spawn and scratch-dir creation — into a filename lookup.
|
|
82
|
-
* The two spellings are pinned equal by test instead.
|
|
20
|
+
* `closeGateLogPath` (temp-paths.js) spells the same name for the reader; it
|
|
21
|
+
* is not imported because that helper resolves tempRoot (a git spawn). The
|
|
22
|
+
* two spellings are pinned equal by test.
|
|
83
23
|
*/
|
|
84
24
|
function logNameFor(storyId) {
|
|
85
25
|
return `close-gates-${storyId ?? 'unknown'}.log`;
|
|
86
26
|
}
|
|
87
27
|
|
|
88
|
-
/**
|
|
89
|
-
* A capturing sink for close-validation gate output.
|
|
90
|
-
*
|
|
91
|
-
* Not exported as a constructor — {@link createGateLogSink} owns the
|
|
92
|
-
* degradation decision, so every instance in the wild has already resolved
|
|
93
|
-
* whether it has a writable artifact.
|
|
94
|
-
*/
|
|
28
|
+
/** Built only by {@link createGateLogSink}, which owns the degradation decision. */
|
|
95
29
|
class GateLogSink {
|
|
96
30
|
/**
|
|
97
31
|
* @param {{ logPath: string|null, streamInline: boolean, write: (line: string) => void, flush?: () => Promise<void>, emit: (line: string) => void }} args
|
|
98
32
|
*/
|
|
99
33
|
constructor({ logPath, streamInline, write, flush, emit }) {
|
|
100
|
-
/**
|
|
34
|
+
/** `null` when capture is unavailable. */
|
|
101
35
|
this.logPath = logPath;
|
|
102
|
-
/** Whether lines are ALSO echoed inline as they arrive. */
|
|
103
36
|
this.streamInline = streamInline;
|
|
104
|
-
/** Number of lines captured so far. */
|
|
105
37
|
this.lineCount = 0;
|
|
106
38
|
this._write = write;
|
|
107
39
|
this._flush = flush ?? (() => Promise.resolve());
|
|
@@ -110,7 +42,6 @@ class GateLogSink {
|
|
|
110
42
|
}
|
|
111
43
|
|
|
112
44
|
/**
|
|
113
|
-
* The `log` callable handed to `runCloseValidation` / `buildDefaultGates`.
|
|
114
45
|
* Bound, because it is passed by reference into the gate machinery.
|
|
115
46
|
*
|
|
116
47
|
* @type {(message: string) => void}
|
|
@@ -127,11 +58,7 @@ class GateLogSink {
|
|
|
127
58
|
}
|
|
128
59
|
|
|
129
60
|
/**
|
|
130
|
-
*
|
|
131
|
-
* the file. Idempotent, never throws, and a no-op on the degraded (no
|
|
132
|
-
* artifact) path. Await it before reading {@link GateLogSink#logPath} or
|
|
133
|
-
* handing the path to anyone — the write path is async precisely so it never
|
|
134
|
-
* stalls a gate child's pipe.
|
|
61
|
+
* Wait for every buffered line to reach disk. Idempotent, never throws.
|
|
135
62
|
*
|
|
136
63
|
* @returns {Promise<void>}
|
|
137
64
|
*/
|
|
@@ -140,9 +67,6 @@ class GateLogSink {
|
|
|
140
67
|
}
|
|
141
68
|
|
|
142
69
|
/**
|
|
143
|
-
* The success-path digest: one line, no gate output. Names the artifact so
|
|
144
|
-
* the caller can open it on demand rather than carrying it all session.
|
|
145
|
-
*
|
|
146
70
|
* @returns {string}
|
|
147
71
|
*/
|
|
148
72
|
digest() {
|
|
@@ -153,9 +77,7 @@ class GateLogSink {
|
|
|
153
77
|
}
|
|
154
78
|
|
|
155
79
|
/**
|
|
156
|
-
*
|
|
157
|
-
* is what the caller came for. A no-op when the lines were already streamed
|
|
158
|
-
* inline (verbose, or degraded capture), so nothing is ever printed twice.
|
|
80
|
+
* Replay the captured tail inline; a no-op when already streamed inline.
|
|
159
81
|
*
|
|
160
82
|
* @returns {number} Lines replayed.
|
|
161
83
|
*/
|
|
@@ -173,13 +95,8 @@ class GateLogSink {
|
|
|
173
95
|
}
|
|
174
96
|
|
|
175
97
|
/**
|
|
176
|
-
*
|
|
177
|
-
*
|
|
178
|
-
* `write` hands the line to a `fs.WriteStream` — O(1), no syscall on the
|
|
179
|
-
* caller's stack — and `flush` ends the stream, resolving once every buffered
|
|
180
|
-
* line has reached disk (or the stream has errored; a half-written artifact is
|
|
181
|
-
* still better than a dead close). Both are best-effort by construction: the
|
|
182
|
-
* stream's `'error'` is absorbed, so nothing here can abort a close.
|
|
98
|
+
* Non-blocking line writer over an open fd. Stream errors are absorbed, so
|
|
99
|
+
* nothing here can abort a close.
|
|
183
100
|
*
|
|
184
101
|
* @param {typeof nodeFs} fs
|
|
185
102
|
* @param {string} logPath
|
|
@@ -217,8 +134,6 @@ function createArtifactWriter(fs, logPath, handle) {
|
|
|
217
134
|
}
|
|
218
135
|
|
|
219
136
|
/**
|
|
220
|
-
* Build the gate-output sink for one close run.
|
|
221
|
-
*
|
|
222
137
|
* @param {{
|
|
223
138
|
* storyId: number|null,
|
|
224
139
|
* logDir?: string,
|
|
@@ -226,11 +141,7 @@ function createArtifactWriter(fs, logPath, handle) {
|
|
|
226
141
|
* logger?: { info: (m: string) => void },
|
|
227
142
|
* level?: string,
|
|
228
143
|
* config?: object,
|
|
229
|
-
* }} [args] `logDir` defaults to
|
|
230
|
-
* (Story #4794 — was a hardcoded `<cwd>/temp/orchestration`, which ignored
|
|
231
|
-
* `project.paths.tempRoot` and hid the artifact from the retention purge);
|
|
232
|
-
* `level` defaults to the live Logger level so `AGENT_LOG_LEVEL=verbose`
|
|
233
|
-
* restores streaming.
|
|
144
|
+
* }} [args] `logDir` defaults to `<tempRoot>/orchestration`.
|
|
234
145
|
* @returns {GateLogSink}
|
|
235
146
|
*/
|
|
236
147
|
export function createGateLogSink({
|
|
@@ -250,12 +161,10 @@ export function createGateLogSink({
|
|
|
250
161
|
try {
|
|
251
162
|
fs.mkdirSync(dir, { recursive: true });
|
|
252
163
|
logPath = path.join(dir, logNameFor(storyId));
|
|
253
|
-
// Truncate
|
|
254
|
-
// hands the reader a file interleaving two runs' gates.
|
|
164
|
+
// Truncate so a re-run never interleaves two runs' gates.
|
|
255
165
|
writer = createArtifactWriter(fs, logPath, fs.openSync(logPath, 'w'));
|
|
256
166
|
} catch {
|
|
257
|
-
// No artifact
|
|
258
|
-
// gate output on the floor.
|
|
167
|
+
// No artifact: stream inline rather than drop the gate output.
|
|
259
168
|
return new GateLogSink({
|
|
260
169
|
logPath: null,
|
|
261
170
|
streamInline: true,
|