mandrel 2.59.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 +21 -19
- package/.agents/agents/acceptance-critic.md +24 -43
- package/.agents/agents/story-worker.md +20 -21
- package/.agents/docs/agentrc-reference.json +5 -84
- package/.agents/docs/configuration.md +48 -132
- package/.agents/docs/workflows.md +2 -2
- package/.agents/instructions.md +5 -8
- package/.agents/rules/ci-remediation.md +41 -8
- package/.agents/rules/gherkin-standards.md +4 -0
- package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
- package/.agents/schemas/agentrc.schema.json +16 -496
- package/.agents/schemas/story-deliver-terminal.schema.json +13 -3
- package/.agents/schemas/validation-evidence.schema.json +2 -1
- package/.agents/scripts/README.md +23 -13
- package/.agents/scripts/acceptance-eval.js +35 -169
- 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 +10 -41
- package/.agents/scripts/check-arch-cycles.js +14 -64
- package/.agents/scripts/check-baselines.js +8 -48
- package/.agents/scripts/check-context-budget.js +105 -311
- 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 +34 -98
- package/.agents/scripts/deliver-light.js +25 -171
- package/.agents/scripts/deliver-recover.js +6 -42
- package/.agents/scripts/deliver-run.js +534 -0
- 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 +57 -49
- 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 +7 -19
- 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 +39 -121
- 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 -34
- package/.agents/scripts/lib/config/explain.js +10 -83
- package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
- package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +3 -31
- 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 +11 -52
- package/.agents/scripts/lib/config-schema-shared.js +1 -4
- package/.agents/scripts/lib/config-settings-schema-delivery.js +16 -291
- 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 +18 -35
- package/.agents/scripts/lib/coverage-capture-incremental.js +15 -45
- package/.agents/scripts/lib/coverage-capture-usage.js +8 -25
- 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 -124
- 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 +94 -419
- package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
- package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -149
- 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 +123 -191
- 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 +22 -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 +28 -156
- 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 +121 -157
- 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 +118 -462
- 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 +37 -307
- 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 +55 -318
- 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 +16 -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 +71 -289
- package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +96 -362
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +9 -39
- package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +60 -186
- 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 -91
- 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 +245 -326
- package/.agents/scripts/lib/orchestration/run-scoped-config.js +55 -159
- 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 +20 -82
- 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 +96 -0
- 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 +180 -273
- 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 -200
- package/.agents/scripts/lib/orchestration/story-follow-ups.js +167 -252
- package/.agents/scripts/lib/orchestration/story-init-envelope.js +52 -0
- 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 -135
- 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 +63 -344
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -261
- 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 +51 -66
- package/.agents/scripts/lib/story-body/footer-block.js +11 -44
- package/.agents/scripts/lib/story-body/story-body.js +123 -344
- package/.agents/scripts/lib/temp-retention.js +42 -143
- package/.agents/scripts/lib/templates/decomposer-prompts.js +18 -80
- 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 +67 -209
- 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 -105
- package/.agents/scripts/nav-registry-diff.js +22 -108
- package/.agents/scripts/notify.js +12 -69
- package/.agents/scripts/plan-context.js +97 -92
- package/.agents/scripts/plan-critics.js +12 -66
- package/.agents/scripts/plan-persist.js +71 -137
- package/.agents/scripts/plan-run-epilogue.js +20 -43
- package/.agents/scripts/pr-watch-with-update.js +79 -263
- 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 -259
- package/.agents/scripts/stories-wave-tick.js +179 -415
- 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/skills/core/gates-and-baselines/reference.md +0 -1
- package/.agents/skills/skills.index.json +2 -2
- package/.agents/skills/stack/qa/playwright/SKILL.md +26 -0
- 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/acceptance-self-eval.md +84 -157
- package/.agents/workflows/helpers/audit-lens-core.md +1 -1
- package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
- package/.agents/workflows/helpers/code-review.md +4 -2
- package/.agents/workflows/helpers/deliver-digest.md +37 -28
- package/.agents/workflows/helpers/deliver-light.md +92 -101
- package/.agents/workflows/helpers/deliver-reference.md +162 -220
- package/.agents/workflows/helpers/deliver-story-reference.md +197 -607
- package/.agents/workflows/helpers/deliver-story.md +17 -18
- package/.agents/workflows/helpers/plan-reference.md +125 -167
- package/.agents/workflows/helpers/qa-core.md +12 -0
- package/.agents/workflows/mandrel-deliver.md +47 -31
- package/.agents/workflows/mandrel-plan.md +22 -21
- package/.agents/workflows/mandrel-update.md +36 -21
- 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 +60 -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 +326 -523
- 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 +17 -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 +21 -0
- package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
- package/package.json +17 -14
- package/.agents/docs/SDLC.md +0 -590
- package/.agents/docs/quality-gates.md +0 -1179
- package/.agents/rules/known-tooling-behavior.md +0 -150
- 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/schemas/model-attribution.schema.json +0 -53
- 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 -366
- package/.agents/scripts/check-test-portability.js +0 -512
- package/.agents/scripts/check-workflow-citations.js +0 -332
- 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/orchestration/model-attribution.js +0 -418
- package/.agents/scripts/lib/orchestration/story-plan-state.js +0 -33
- package/.agents/scripts/lib/orchestration/structured-comment-parser.js +0 -67
- 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 -118
- package/.agents/scripts/test-isolate.js +0 -55
- package/.agents/scripts/update-dead-exports-baseline.js +0 -321
|
@@ -1,60 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* plan-persist.js —
|
|
5
|
-
* (
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* Tech Spec), this CLI validates and creates Story issue(s) directly:
|
|
9
|
-
*
|
|
10
|
-
* changes[] repair → ticket validator / DAG → reachability →
|
|
11
|
-
* split-policy partition → fold Spec into each Story body →
|
|
12
|
-
* createIssue(s) with type::story, resumably by plan fingerprint (NOT
|
|
13
|
-
* agent::ready) → story-plan-state on every Story;
|
|
14
|
-
* plan-summary on the primary → flip every Story to agent::ready →
|
|
15
|
-
* comment + close superseded source tickets → temp cleanup + stale reap.
|
|
16
|
-
*
|
|
17
|
-
* Story #4542 retired the authored risk verdict: persist neither requires nor
|
|
18
|
-
* accepts one, and no plan-time step produces one. Review depth and the
|
|
19
|
-
* acceptance-critic mode are derived from the diff at close time
|
|
20
|
-
* (`review-depth.js#deriveChangeLevel`). `--force-review` is the only review
|
|
21
|
-
* gate the planner still carries, and it is an explicit operator flag.
|
|
22
|
-
*
|
|
23
|
-
* CLI:
|
|
24
|
-
* --stories <file> Required Story ticket array (default length 1)
|
|
25
|
-
* --tech-spec <file> Optional shared Tech Spec folded into each Story
|
|
26
|
-
* --plan-dir <dir> Optional temp dir deleted at terminal success.
|
|
27
|
-
* Also where the `plan-context.json` envelope is
|
|
28
|
-
* auto-discovered from (see --plan-context)
|
|
29
|
-
* --plan-context <file> Optional explicit path to the `plan-context.js`
|
|
30
|
-
* envelope. Its `sourceTickets[]` is what makes
|
|
31
|
-
* `--tickets` superseding work without a flag
|
|
32
|
-
* --source-tickets <ids> Explicit OVERRIDE of the envelope-derived source
|
|
33
|
-
* ids, for hand-driven runs. Each id must be
|
|
34
|
-
* claimed by exactly one Story's `supersedes[]`;
|
|
35
|
-
* they are commented on and closed as superseded
|
|
36
|
-
* --no-close-superseded Keep the source tickets open (no comment, no
|
|
37
|
-
* close) — for a genuinely partial supersede
|
|
38
|
-
* --dry-run Assemble + validate without GitHub writes
|
|
39
|
-
* --chain-on-clean Fast path (Story #4741; any plan since Story
|
|
40
|
-
* #5312): run the write-free dry-run first, and
|
|
41
|
-
* when it passes clean chain straight into the
|
|
42
|
-
* real persist in the SAME invocation, collapsing
|
|
43
|
-
* the two operator round-trips into one. A
|
|
44
|
-
* dry-run failure stops before any createIssue.
|
|
45
|
-
* Ignored when `--dry-run` is also set
|
|
46
|
-
* --force-review Operator-forced review stop before persist lands
|
|
47
|
-
*
|
|
48
|
-
* Run `--dry-run` first. It exercises every gate — the changes[] repair, the
|
|
49
|
-
* validator, DAG, reachability, split/supersede partition, Spec fold —
|
|
50
|
-
* write-free, and lists every warning (a footprint probe that disagrees with
|
|
51
|
-
* the base branch, an open question in a body) so an authoring mistake
|
|
52
|
-
* surfaces before a single issue exists.
|
|
53
|
-
*
|
|
54
|
-
* stdout is reserved for the JSON result (Story #2278 discipline, extended to
|
|
55
|
-
* this CLI by Story #4541): `routeAllOutputToStderr()` runs before any
|
|
56
|
-
* pipeline code so a headless driver can `JSON.parse` stdout unconditionally.
|
|
57
|
-
* Human-readable log lines go to stderr, matching the sibling `plan-context`.
|
|
4
|
+
* plan-persist.js — validate authored plan artifacts and create the Story
|
|
5
|
+
* issue(s). Without `--dry-run` it runs the write-free dry-run first and
|
|
6
|
+
* persists in the same invocation only if every gate passes. stdout carries
|
|
7
|
+
* only the JSON result; logs go to stderr.
|
|
58
8
|
*
|
|
59
9
|
* Exit codes: 0 success; 1 fatal; 3 reachability orphans (nothing mutated).
|
|
60
10
|
*/
|
|
@@ -82,12 +32,11 @@ import {
|
|
|
82
32
|
} from './lib/orchestration/plan-persist/plan-context-source.js';
|
|
83
33
|
import {
|
|
84
34
|
runPlanPersist,
|
|
85
|
-
|
|
35
|
+
writePlanSummaryComment,
|
|
86
36
|
} from './lib/orchestration/plan-persist/run-plan-persist.js';
|
|
87
37
|
import {
|
|
88
38
|
buildPlanSummaryCommentBody,
|
|
89
39
|
buildWaveTable,
|
|
90
|
-
PLAN_SUMMARY_COMMENT_TYPE,
|
|
91
40
|
} from './lib/orchestration/plan-persist/summary.js';
|
|
92
41
|
import { resolveSourceTicketIds } from './lib/orchestration/plan-persist/supersede-ops.js';
|
|
93
42
|
import { createProvider } from './lib/provider-factory.js';
|
|
@@ -95,9 +44,8 @@ import { createProvider } from './lib/provider-factory.js';
|
|
|
95
44
|
export {
|
|
96
45
|
buildPlanSummaryCommentBody,
|
|
97
46
|
buildWaveTable,
|
|
98
|
-
PLAN_SUMMARY_COMMENT_TYPE,
|
|
99
47
|
runPlanPersist,
|
|
100
|
-
|
|
48
|
+
writePlanSummaryComment,
|
|
101
49
|
};
|
|
102
50
|
|
|
103
51
|
const CLI_OPTIONS = {
|
|
@@ -109,7 +57,6 @@ const CLI_OPTIONS = {
|
|
|
109
57
|
'close-superseded': { type: 'boolean', default: true },
|
|
110
58
|
'no-close-superseded': { type: 'boolean', default: false },
|
|
111
59
|
'dry-run': { type: 'boolean', default: false },
|
|
112
|
-
'chain-on-clean': { type: 'boolean', default: false },
|
|
113
60
|
'force-review': { type: 'boolean', default: false },
|
|
114
61
|
'epic-title': { type: 'string' },
|
|
115
62
|
'epic-goal': { type: 'string' },
|
|
@@ -120,7 +67,7 @@ const USAGE =
|
|
|
120
67
|
'Usage: plan-persist.js --stories <file> ' +
|
|
121
68
|
'[--tech-spec <file>] [--plan-dir <dir>] [--plan-context <file>] ' +
|
|
122
69
|
'[--source-tickets <ids>] [--no-close-superseded] ' +
|
|
123
|
-
'[--dry-run] [--
|
|
70
|
+
'[--dry-run] [--force-review] ' +
|
|
124
71
|
'[--epic-title <text> --epic-goal <text> | --epic <id>]';
|
|
125
72
|
|
|
126
73
|
async function readOptional(filePath, { required }) {
|
|
@@ -144,9 +91,6 @@ async function readJsonFile(filePath, label) {
|
|
|
144
91
|
}
|
|
145
92
|
|
|
146
93
|
/**
|
|
147
|
-
* Resolve every input path the CLI accepts, including where the
|
|
148
|
-
* `plan-context.js` envelope is discovered from. Exported for tests.
|
|
149
|
-
*
|
|
150
94
|
* @param {object} values Parsed `parseArgs` values.
|
|
151
95
|
*/
|
|
152
96
|
export function resolveInputPaths(values) {
|
|
@@ -178,16 +122,11 @@ async function loadArtifacts(paths) {
|
|
|
178
122
|
}
|
|
179
123
|
|
|
180
124
|
/**
|
|
181
|
-
*
|
|
182
|
-
*
|
|
183
|
-
* Both halves are required together: an Epic with a title and no goal is a
|
|
184
|
-
* container with nothing explaining the grouping, and a goal with no title
|
|
185
|
-
* cannot be opened at all. Supplying exactly one is a **usage error**, not a
|
|
186
|
-
* silent no-Epic run — the operator asked for a container and would otherwise
|
|
187
|
-
* never learn they did not get one.
|
|
125
|
+
* Title and goal are required together; exactly one is a usage error rather
|
|
126
|
+
* than a silent no-Epic run.
|
|
188
127
|
*
|
|
189
|
-
* @param {object} values
|
|
190
|
-
* @returns {{ title: string, goal: string }|null}
|
|
128
|
+
* @param {object} values
|
|
129
|
+
* @returns {{ title: string, goal: string }|null}
|
|
191
130
|
*/
|
|
192
131
|
export function resolveEpicRequest(values) {
|
|
193
132
|
const title = (values['epic-title'] ?? '').trim();
|
|
@@ -204,15 +143,11 @@ export function resolveEpicRequest(values) {
|
|
|
204
143
|
}
|
|
205
144
|
|
|
206
145
|
/**
|
|
207
|
-
*
|
|
208
|
-
*
|
|
209
|
-
* A run either joins a container or opens one; asking for both names no
|
|
210
|
-
* coherent outcome, so it is a usage error rather than a silent precedence
|
|
211
|
-
* rule the operator would have to know.
|
|
146
|
+
* A run joins an Epic or opens one, never both.
|
|
212
147
|
*
|
|
213
|
-
* @param {object} values
|
|
148
|
+
* @param {object} values
|
|
214
149
|
* @returns {void}
|
|
215
|
-
* @throws {Error}
|
|
150
|
+
* @throws {Error}
|
|
216
151
|
*/
|
|
217
152
|
export function assertEpicFlagsExclusive(values) {
|
|
218
153
|
const adopts = (values.epic ?? '').trim() !== '';
|
|
@@ -229,14 +164,11 @@ export function assertEpicFlagsExclusive(values) {
|
|
|
229
164
|
}
|
|
230
165
|
|
|
231
166
|
/**
|
|
232
|
-
*
|
|
233
|
-
*
|
|
234
|
-
* Story #5155. Parsed here rather than deep in the engine so a typo costs a
|
|
235
|
-
* usage error before any provider call — the id itself is verified against
|
|
236
|
-
* live state later, before the first create.
|
|
167
|
+
* `--epic <id>` shape check before any provider call; existence is verified
|
|
168
|
+
* later against live state.
|
|
237
169
|
*
|
|
238
|
-
* @param {object} values
|
|
239
|
-
* @returns {number|null}
|
|
170
|
+
* @param {object} values
|
|
171
|
+
* @returns {number|null}
|
|
240
172
|
*/
|
|
241
173
|
export function resolveEpicAdoptionId(values) {
|
|
242
174
|
const raw = (values.epic ?? '').trim();
|
|
@@ -251,16 +183,13 @@ export function resolveEpicAdoptionId(values) {
|
|
|
251
183
|
}
|
|
252
184
|
|
|
253
185
|
/**
|
|
254
|
-
*
|
|
255
|
-
*
|
|
256
|
-
* Exported for tests: this is the join where the envelope-derived source ids
|
|
257
|
-
* meet the persist engine, so a regression here silently un-wires
|
|
258
|
-
* `/mandrel-plan --tickets` superseding (Story #4554).
|
|
186
|
+
* Where envelope-derived source ids meet the engine; a break here silently
|
|
187
|
+
* un-wires `--tickets` superseding.
|
|
259
188
|
*
|
|
260
|
-
* @param {object} values
|
|
189
|
+
* @param {object} values
|
|
261
190
|
* @param {ReturnType<typeof resolveInputPaths>} paths
|
|
262
191
|
* @param {object|null} planContextEnvelope
|
|
263
|
-
* @returns {object}
|
|
192
|
+
* @returns {object}
|
|
264
193
|
*/
|
|
265
194
|
export function buildPersistOptions(values, paths, planContextEnvelope) {
|
|
266
195
|
const source = resolveSourceTicketIds({
|
|
@@ -277,8 +206,7 @@ export function buildPersistOptions(values, paths, planContextEnvelope) {
|
|
|
277
206
|
sourceTicketOrigin: source.origin,
|
|
278
207
|
epic: resolveEpicRequest(values),
|
|
279
208
|
adoptEpicId: resolveEpicAdoptionId(values),
|
|
280
|
-
//
|
|
281
|
-
// wins over the (default `true`) `--close-superseded`.
|
|
209
|
+
// `--no-close-superseded` always wins.
|
|
282
210
|
closeSuperseded:
|
|
283
211
|
values['no-close-superseded'] === true
|
|
284
212
|
? false
|
|
@@ -320,23 +248,10 @@ async function runPersistInvocation({
|
|
|
320
248
|
}
|
|
321
249
|
|
|
322
250
|
/**
|
|
323
|
-
*
|
|
324
|
-
*
|
|
325
|
-
*
|
|
326
|
-
*
|
|
327
|
-
*
|
|
328
|
-
* 1. A write-free dry-run. Every gate runs before any `createIssue` can
|
|
329
|
-
* happen, so a validation failure — which throws or returns reachability
|
|
330
|
-
* orphans — stops here, before a single issue exists (AC-3).
|
|
331
|
-
* 2. The real write, run when the dry-run passed clean. Because it replays
|
|
332
|
-
* the identical artifacts, the persisted output is byte-identical to
|
|
333
|
-
* what the dry-run validated (AC-1). The lite-route condition that used
|
|
334
|
-
* to gate this step went with the plan-side lite claim: a clean dry-run
|
|
335
|
-
* is the review the chain exists to fold.
|
|
336
|
-
*
|
|
337
|
-
* Exported for tests — this is where the round-trip collapse lives, so a
|
|
338
|
-
* regression here silently re-opens the second operator round-trip (or
|
|
339
|
-
* worse, persists a plan the dry-run never gated).
|
|
251
|
+
* Dry-run then persist over the SAME artifacts: a gate failure throws before
|
|
252
|
+
* any issue exists, and the write replays exactly what was validated. The
|
|
253
|
+
* repair pass mutates tickets in place, so pass 2 sees no repairs — carry pass
|
|
254
|
+
* 1's evidence onto the returned envelope.
|
|
340
255
|
*
|
|
341
256
|
* @param {{ values: object, config: object, provider: object,
|
|
342
257
|
* artifacts: object, metricsSince: string }} args
|
|
@@ -366,6 +281,14 @@ export async function runPersistChain({
|
|
|
366
281
|
metricsSince,
|
|
367
282
|
dryRun: false,
|
|
368
283
|
});
|
|
284
|
+
persistResult.repairs = mergeEvidence(
|
|
285
|
+
dryResult.repairs,
|
|
286
|
+
persistResult.repairs,
|
|
287
|
+
);
|
|
288
|
+
persistResult.warnings = mergeEvidence(
|
|
289
|
+
dryResult.warnings,
|
|
290
|
+
persistResult.warnings,
|
|
291
|
+
);
|
|
369
292
|
persistResult.chain = {
|
|
370
293
|
attempted: true,
|
|
371
294
|
persisted: true,
|
|
@@ -375,18 +298,38 @@ export async function runPersistChain({
|
|
|
375
298
|
}
|
|
376
299
|
|
|
377
300
|
/**
|
|
378
|
-
*
|
|
379
|
-
*
|
|
380
|
-
* Two Story #4541 fixes meet here. `readPlanMetrics` is declared
|
|
381
|
-
* `(epicId, config)` but was called with `config` first, so it threw its
|
|
382
|
-
* `epicId` guard on every run and the catch below turned that into a
|
|
383
|
-
* silently missing summary — v2 persist is always Epic-less, hence the
|
|
384
|
-
* explicit `null`. And the Epic-less ledger is shared across every plan the
|
|
385
|
-
* repo has ever run, so `since` scopes the counts to the current invocation
|
|
386
|
-
* instead of reporting lifetime totals under an invocation-shaped line.
|
|
301
|
+
* Ordered union, deduped by serialized content.
|
|
387
302
|
*
|
|
388
|
-
*
|
|
389
|
-
*
|
|
303
|
+
* @param {unknown} first
|
|
304
|
+
* @param {unknown} second
|
|
305
|
+
* @returns {unknown[]}
|
|
306
|
+
*/
|
|
307
|
+
function mergeEvidence(first, second) {
|
|
308
|
+
const merged = [];
|
|
309
|
+
const seen = new Set();
|
|
310
|
+
for (const entry of [
|
|
311
|
+
...(Array.isArray(first) ? first : []),
|
|
312
|
+
...(Array.isArray(second) ? second : []),
|
|
313
|
+
]) {
|
|
314
|
+
const key = JSON.stringify(entry);
|
|
315
|
+
if (seen.has(key)) continue;
|
|
316
|
+
seen.add(key);
|
|
317
|
+
merged.push(entry);
|
|
318
|
+
}
|
|
319
|
+
return merged;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* @param {object} values
|
|
324
|
+
* @returns {boolean} `true` to run the gates and then persist.
|
|
325
|
+
*/
|
|
326
|
+
export function shouldChainPersist(values) {
|
|
327
|
+
return values?.['dry-run'] !== true;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* Attach the plan-metrics roll-up for this invocation. The Epic-less (`null`)
|
|
332
|
+
* ledger is shared by every plan run, so `since` scopes it to this one.
|
|
390
333
|
*
|
|
391
334
|
* @param {object} result Mutated in place with `planMetrics`.
|
|
392
335
|
* @param {object} config
|
|
@@ -413,14 +356,10 @@ async function main() {
|
|
|
413
356
|
throw new Error(USAGE);
|
|
414
357
|
}
|
|
415
358
|
|
|
416
|
-
// stdout is reserved for the JSON result
|
|
417
|
-
// land on stdout to stderr BEFORE any pipeline code runs (Story #2278
|
|
418
|
-
// discipline, extended here by Story #4541 — this CLI interleaved Logger
|
|
419
|
-
// lines with its own JSON, so a headless driver could not parse stdout).
|
|
359
|
+
// stdout is reserved for the JSON result.
|
|
420
360
|
routeAllOutputToStderr();
|
|
421
361
|
|
|
422
|
-
//
|
|
423
|
-
// ledger-writing work so every record this run appends falls inside it.
|
|
362
|
+
// Stamped before any ledger write so this run's records fall inside it.
|
|
424
363
|
const metricsSince = new Date().toISOString();
|
|
425
364
|
|
|
426
365
|
let config;
|
|
@@ -430,8 +369,7 @@ async function main() {
|
|
|
430
369
|
} catch (err) {
|
|
431
370
|
throw new Error(`Config schema validation failed:\n${err.message}`);
|
|
432
371
|
}
|
|
433
|
-
// Argument-shape refusals fire before any I/O
|
|
434
|
-
// the operator can see without waiting on artifact reads or a provider.
|
|
372
|
+
// Argument-shape refusals fire before any I/O.
|
|
435
373
|
assertEpicFlagsExclusive(values);
|
|
436
374
|
resolveEpicRequest(values);
|
|
437
375
|
resolveEpicAdoptionId(values);
|
|
@@ -440,10 +378,7 @@ async function main() {
|
|
|
440
378
|
const paths = resolveInputPaths(values);
|
|
441
379
|
const artifacts = await loadArtifacts(paths);
|
|
442
380
|
|
|
443
|
-
|
|
444
|
-
// (Story #4741). `--dry-run` always wins — an explicit dry-run never writes.
|
|
445
|
-
const useChain =
|
|
446
|
-
values['chain-on-clean'] === true && values['dry-run'] !== true;
|
|
381
|
+
const useChain = shouldChainPersist(values);
|
|
447
382
|
|
|
448
383
|
let result;
|
|
449
384
|
try {
|
|
@@ -482,7 +417,7 @@ runAsCli(import.meta.url, main, {
|
|
|
482
417
|
invocation:
|
|
483
418
|
'node .agents/scripts/plan-persist.js --stories <file> [--tech-spec <file>] [--dry-run] [options]',
|
|
484
419
|
summary:
|
|
485
|
-
'Validate an authored plan and persist it as GitHub Stories. Prints the result envelope as JSON on stdout.',
|
|
420
|
+
'Validate an authored plan and persist it as GitHub Stories in one invocation (pass --dry-run to validate only). Prints the result envelope as JSON on stdout.',
|
|
486
421
|
flags: [
|
|
487
422
|
['--stories <file>', 'Authored stories.json (required).'],
|
|
488
423
|
['--tech-spec <file>', 'Optional companion techspec.md.'],
|
|
@@ -493,7 +428,6 @@ runAsCli(import.meta.url, main, {
|
|
|
493
428
|
],
|
|
494
429
|
['--source-tickets <ids>', 'Ticket ids this plan supersedes.'],
|
|
495
430
|
['--dry-run', 'Validate and report; create nothing.'],
|
|
496
|
-
['--chain-on-clean', 'Persist immediately when the dry run is clean.'],
|
|
497
431
|
['--no-close-superseded', 'Leave superseded source tickets open.'],
|
|
498
432
|
[
|
|
499
433
|
'--force-review',
|
|
@@ -7,9 +7,7 @@
|
|
|
7
7
|
* node .agents/scripts/plan-run-epilogue.js --stories 1,2,3
|
|
8
8
|
* node .agents/scripts/plan-run-epilogue.js --stories 101-104 # inclusive range
|
|
9
9
|
*
|
|
10
|
-
* Keyed on the delivered id set
|
|
11
|
-
* synthesized from `--stories`. Story #4540 retired the `--run <planRunId>`
|
|
12
|
-
* label-resolution branch along with the `plan-run::<id>` label itself.
|
|
10
|
+
* Keyed on the delivered id set via a synthesized `adhoc-<sorted-ids>` run id.
|
|
13
11
|
*/
|
|
14
12
|
|
|
15
13
|
import './lib/runtime-deps/ensure-installed.js';
|
|
@@ -25,6 +23,8 @@ import { expandIdList } from './lib/util/parse-id-list.js';
|
|
|
25
23
|
const CLI_OPTIONS = {
|
|
26
24
|
stories: { type: 'string' },
|
|
27
25
|
cwd: { type: 'string' },
|
|
26
|
+
/** Opt-in; see `run-epilogue.js` RUN_EPILOGUE_STEP_KINDS. */
|
|
27
|
+
'audit-roster': { type: 'boolean', default: false },
|
|
28
28
|
};
|
|
29
29
|
|
|
30
30
|
/**
|
|
@@ -34,9 +34,7 @@ const CLI_OPTIONS = {
|
|
|
34
34
|
* createProviderImpl?: typeof createProvider,
|
|
35
35
|
* runPlanRunEpilogueImpl?: typeof runPlanRunEpilogue,
|
|
36
36
|
* logger?: { info: Function, warn: Function },
|
|
37
|
-
* }} [deps]
|
|
38
|
-
* implementation (`.agents/rules/test-seams.md` rules 1-2), so the CLI path
|
|
39
|
-
* and every production caller are unchanged.
|
|
37
|
+
* }} [deps]
|
|
40
38
|
* @returns {Promise<object>}
|
|
41
39
|
*/
|
|
42
40
|
export async function main(argv = process.argv.slice(2), deps = {}) {
|
|
@@ -51,26 +49,15 @@ export async function main(argv = process.argv.slice(2), deps = {}) {
|
|
|
51
49
|
options: CLI_OPTIONS,
|
|
52
50
|
strict: false,
|
|
53
51
|
});
|
|
54
|
-
|
|
55
|
-
typeof values.stories === 'string' && values.stories.trim().length > 0;
|
|
56
|
-
if (!hasStoriesFlag) {
|
|
52
|
+
if (typeof values.stories !== 'string' || !values.stories.trim()) {
|
|
57
53
|
throw new Error('Usage: node plan-run-epilogue.js --stories 1,2,3');
|
|
58
54
|
}
|
|
59
|
-
const cwd =
|
|
60
|
-
typeof values.cwd === 'string' && values.cwd.trim()
|
|
61
|
-
? values.cwd.trim()
|
|
62
|
-
: process.cwd();
|
|
55
|
+
const cwd = values.cwd?.trim() || process.cwd();
|
|
63
56
|
const config = resolveConfigImpl({ cwd });
|
|
64
57
|
const provider = createProviderImpl(config);
|
|
65
58
|
|
|
66
|
-
//
|
|
67
|
-
//
|
|
68
|
-
// set, and the synthesized `adhoc-<ids>` id it already used for positional
|
|
69
|
-
// runs is now the only id it needs.
|
|
70
|
-
// Range tokens expand here too (`--stories 101-104`): /mandrel-deliver blesses the
|
|
71
|
-
// dash range at the operator surface, so the id set the epilogue is keyed on
|
|
72
|
-
// must read the same shape. Rejecting a bad token is deliberate — the old
|
|
73
|
-
// silent filter turned a typo into an empty, wrongly-keyed rollup.
|
|
59
|
+
// Ranges expand as at the operator surface; a bad token throws rather than
|
|
60
|
+
// silently producing an empty, wrongly-keyed rollup.
|
|
74
61
|
const { ids: stories, error: storiesError } = expandIdList(values.stories, {
|
|
75
62
|
flag: '--stories',
|
|
76
63
|
prefix: '[plan-run-epilogue] ',
|
|
@@ -87,6 +74,7 @@ export async function main(argv = process.argv.slice(2), deps = {}) {
|
|
|
87
74
|
provider,
|
|
88
75
|
config,
|
|
89
76
|
cwd,
|
|
77
|
+
auditRoster: values['audit-roster'] === true,
|
|
90
78
|
});
|
|
91
79
|
warnOnUnresolvedBase(result, logger);
|
|
92
80
|
warnOnEmptyRollup(result, logger);
|
|
@@ -98,13 +86,9 @@ export async function main(argv = process.argv.slice(2), deps = {}) {
|
|
|
98
86
|
}
|
|
99
87
|
|
|
100
88
|
/**
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
* against; a silent absence would read as "nothing changed" and the lens walk
|
|
105
|
-
* would look complete while covering nothing. Not fatal — with no diff the
|
|
106
|
-
* selector degrades to keyword-only lens selection, so the rest of the
|
|
107
|
-
* roster is still useful.
|
|
89
|
+
* Warn (not fatal) when the combined landed diff is unresolvable under
|
|
90
|
+
* `--audit-roster`: silence would read as "nothing changed" and the lens walk
|
|
91
|
+
* would look complete while covering nothing.
|
|
108
92
|
*
|
|
109
93
|
* @param {object} result - `runPlanRunEpilogue` envelope.
|
|
110
94
|
* @param {{ warn: Function }} [logger]
|
|
@@ -125,20 +109,9 @@ function warnOnUnresolvedBase(result, logger = Logger) {
|
|
|
125
109
|
}
|
|
126
110
|
|
|
127
111
|
/**
|
|
128
|
-
*
|
|
129
|
-
*
|
|
130
|
-
*
|
|
131
|
-
* The failure this exists to prevent is a *reassuring* one. The roll-up read
|
|
132
|
-
* "No friction signals — nothing to follow up" for a 7-Story run that
|
|
133
|
-
* contained a mid-run git outage, a parked worker needing an operator
|
|
134
|
-
* resume, and an acceptance critic that needed four rounds. Nothing was
|
|
135
|
-
* broken in the roll-up — the stream really was empty — but the report was
|
|
136
|
-
* indistinguishable from a clean run, so the retro loop that exists to learn
|
|
137
|
-
* from a run was silently blind to that run's pain.
|
|
138
|
-
*
|
|
139
|
-
* Not fatal: a genuinely friction-free multi-Story run is possible, and this
|
|
140
|
-
* cannot tell the two apart — which is precisely why it asks the operator
|
|
141
|
-
* rather than asserting either reading.
|
|
112
|
+
* Warn on a zero-signal roll-up over a multi-Story run: it is
|
|
113
|
+
* indistinguishable from a run whose friction went unrecorded, so the
|
|
114
|
+
* operator decides which it was.
|
|
142
115
|
*
|
|
143
116
|
* @param {object} result - `runPlanRunEpilogue` envelope.
|
|
144
117
|
* @param {{ warn: Function }} [logger]
|
|
@@ -167,7 +140,7 @@ function warnOnEmptyRollup(result, logger = Logger) {
|
|
|
167
140
|
await runAsCli(import.meta.url, main, {
|
|
168
141
|
usage: {
|
|
169
142
|
invocation:
|
|
170
|
-
'node .agents/scripts/plan-run-epilogue.js --stories <id,id,...> [--cwd <path>]',
|
|
143
|
+
'node .agents/scripts/plan-run-epilogue.js --stories <id,id,...> [--cwd <path>] [--audit-roster]',
|
|
171
144
|
summary:
|
|
172
145
|
'Close out a delivery run: roll up the delivered Stories’ signals and report the run’s loop health.',
|
|
173
146
|
flags: [
|
|
@@ -176,6 +149,10 @@ await runAsCli(import.meta.url, main, {
|
|
|
176
149
|
'Comma-separated delivered Story ids, singles or A-B ranges (required).',
|
|
177
150
|
],
|
|
178
151
|
['--cwd <path>', 'Repository root (default: process cwd).'],
|
|
152
|
+
[
|
|
153
|
+
'--audit-roster',
|
|
154
|
+
'Also select the cross-Story audit lens roster and post plan-run-audit-roster (off by default; the host then walks every listed lens).',
|
|
155
|
+
],
|
|
179
156
|
],
|
|
180
157
|
},
|
|
181
158
|
});
|