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,39 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* 1. `changes[]` repair + ticket validator + file-assumption + DAG
|
|
9
|
-
* 2. Draft reachability (named soft failure, exit 3)
|
|
10
|
-
* 3. Same-wave collision refusal (`assertNoWaveCollisions`) + spec fold
|
|
11
|
-
* 4. Create Story issues (`type::story` + sanitized authored labels —
|
|
12
|
-
* deliberately NOT `agent::ready`), resumably via a plan fingerprint
|
|
13
|
-
* 5. Upsert the `story-plan-state` comment on every created Story — since
|
|
14
|
-
* Story #5343 the one comment persist posts, carrying the plan summary
|
|
15
|
-
* 6. Flip every Story to `agent::ready` — the terminal step, so `ready`
|
|
16
|
-
* always implies "plan comments written"
|
|
17
|
-
* 7. Comment on + close the superseded `--tickets` source issues
|
|
18
|
-
* (Story #4535) — bookkeeping only; never fails the run
|
|
19
|
-
* 8. Temp cleanup at terminal success + a stale-plan-dir reap
|
|
20
|
-
*
|
|
21
|
-
* **Why `agent::ready` moved to the end (Story #4541).** Issues used to be
|
|
22
|
-
* born `agent::ready` in the creating POST while the plan comments were
|
|
23
|
-
* written afterwards. Anything picking a Story up in that window — or after
|
|
24
|
-
* a comment failure aborted the loop — found a ready Story carrying none of
|
|
25
|
-
* the operator's delivery instructions. Creating unlabelled, writing the
|
|
26
|
-
* comments, then flipping closes that race.
|
|
27
|
-
*
|
|
28
|
-
* **No authored risk artifact (Story #4542).** Persist neither requires nor
|
|
29
|
-
* accepts a risk verdict, derives no envelope from one, and computes no
|
|
30
|
-
* review routing. Review depth and the acceptance-critic mode are derived from
|
|
31
|
-
* the diff at close time (`review-depth.js#deriveChangeLevel`); `--force-review`
|
|
32
|
-
* is an explicit operator flag, recorded here as a receipt and never inferred.
|
|
33
|
-
*
|
|
34
|
-
* Hard cutover: no Epic parent, no reconciler, no `deliveryShape`, no
|
|
35
|
-
* `--amend` tree cascades. Those surfaces die with Stages 4–5 for any
|
|
36
|
-
* remaining epic-delivery readers.
|
|
2
|
+
* Flat Story persist. Hard gates refuse; everything else is a warning the
|
|
3
|
+
* dry-run lists. Order: validate → reachability → wave-collision gate →
|
|
4
|
+
* create (without `agent::ready`) → plan comment on every Story → flip to
|
|
5
|
+
* `agent::ready` last, so `ready` implies "plan comments written" → close
|
|
6
|
+
* superseded sources (never fails the run) → temp cleanup.
|
|
37
7
|
*
|
|
38
8
|
* @module lib/orchestration/plan-persist/run-plan-persist
|
|
39
9
|
*/
|
|
@@ -79,31 +49,15 @@ import { buildPlanSummaryCommentBody, buildWaveTable } from './summary.js';
|
|
|
79
49
|
import { closeSupersededTickets } from './supersede-ops.js';
|
|
80
50
|
import { assertNoWaveCollisions } from './wave-collision-gate.js';
|
|
81
51
|
|
|
82
|
-
/**
|
|
52
|
+
/** Marker that makes a re-persist upsert the comment in place. */
|
|
83
53
|
const STORY_PLAN_STATE_TYPE = 'story-plan-state';
|
|
84
54
|
|
|
85
55
|
/**
|
|
86
|
-
*
|
|
87
|
-
* Story (Story #5343).
|
|
88
|
-
*
|
|
89
|
-
* It carries the human plan summary: the created Story set, the delivery order
|
|
90
|
-
* and the exact deliver command. That summary used to be a second
|
|
91
|
-
* `plan-summary` comment on the primary Story only, which meant the operator's
|
|
92
|
-
* instructions lived on a different marker from the rest — and on a different
|
|
93
|
-
* ticket from four Stories out of five.
|
|
94
|
-
*
|
|
95
|
-
* **No machine payload (Story #5367).** The comment used to lead with a fenced
|
|
96
|
-
* JSON checkpoint (a persist receipt: completion time, Story count, the
|
|
97
|
-
* cohort). Nothing ever read it back — the one module that parsed it had no
|
|
98
|
-
* production importer — so the payload and its readers are gone. The
|
|
99
|
-
* `story-plan-state` marker stays: it is what makes a re-persist upsert this
|
|
100
|
-
* comment in place instead of appending a second one.
|
|
56
|
+
* The one comment persist posts per Story, carrying the plan summary.
|
|
101
57
|
*
|
|
102
58
|
* @param {object} provider
|
|
103
59
|
* @param {number} storyId
|
|
104
|
-
* @param {string} summary
|
|
105
|
-
* to carry it, so an empty summary is a caller bug rather than a degenerate
|
|
106
|
-
* comment worth posting.
|
|
60
|
+
* @param {string} summary Must be non-empty.
|
|
107
61
|
* @returns {Promise<void>}
|
|
108
62
|
*/
|
|
109
63
|
export async function writePlanSummaryComment(provider, storyId, summary) {
|
|
@@ -120,20 +74,8 @@ export async function writePlanSummaryComment(provider, storyId, summary) {
|
|
|
120
74
|
}
|
|
121
75
|
|
|
122
76
|
/**
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
* Since Story #5312 the only hard refusal the validator batches into
|
|
126
|
-
* `errors[]` is a `deletes` naming a path absent at base; every other
|
|
127
|
-
* footprint probe — a `creates` / `refactors-existing` mismatch, a goal,
|
|
128
|
-
* acceptance or verify path absent at base — lands on `warnings[]`, which
|
|
129
|
-
* the dry-run prints and the persist proceeds past. The `changes[]` repairs
|
|
130
|
-
* the helper applied are reported alongside so the operator sees what was
|
|
131
|
-
* rewritten.
|
|
132
|
-
*
|
|
133
|
-
* The returned freshness counts feed the posted summary's freshness
|
|
134
|
-
* line: every warning is a reference the base branch disagreed with, so it
|
|
135
|
-
* counts as `stale` there rather than the comment reading "clean" on a run
|
|
136
|
-
* that had something to say.
|
|
77
|
+
* Throw on validator hard errors; return warnings (with applied `changes[]`
|
|
78
|
+
* repairs) and freshness counts for the summary.
|
|
137
79
|
*
|
|
138
80
|
* @returns {{ warnings: string[], freshness: { stale: number, ambiguous: number } }}
|
|
139
81
|
*/
|
|
@@ -156,10 +98,8 @@ function enforceTicketValidation(validated) {
|
|
|
156
98
|
}
|
|
157
99
|
|
|
158
100
|
/**
|
|
159
|
-
*
|
|
160
|
-
*
|
|
161
|
-
* actually read, `ambiguous` when none resolved in this checkout and the
|
|
162
|
-
* probes were skipped, since nothing was verified either way.
|
|
101
|
+
* Every validator warning counts `stale` when a base ref was read, else
|
|
102
|
+
* `ambiguous` (the probes were skipped, nothing was verified).
|
|
163
103
|
*
|
|
164
104
|
* @param {string|null} probeRef
|
|
165
105
|
* @param {string[]} warnings
|
|
@@ -170,18 +110,13 @@ function freshnessCounts(probeRef, warnings) {
|
|
|
170
110
|
return { stale: warnings.length, ambiguous: 0 };
|
|
171
111
|
}
|
|
172
112
|
|
|
173
|
-
/** How each text-hygiene finding kind names itself on the warning list. */
|
|
174
113
|
const TEXT_HYGIENE_LABELS = {
|
|
175
114
|
'open-question': 'open question in body',
|
|
176
115
|
'pinned-identifier': 'pinned identifier in acceptance[]',
|
|
177
116
|
};
|
|
178
117
|
|
|
179
118
|
/**
|
|
180
|
-
*
|
|
181
|
-
* operator-directed question persisted into a Story a non-interactive
|
|
182
|
-
* sub-agent executes, and an acceptance item pinning an internal symbol the
|
|
183
|
-
* advisory `changes[]` may reshape. Warnings the dry-run lists, never
|
|
184
|
-
* refusals.
|
|
119
|
+
* Advisory text-hygiene lints (warnings, never refusals).
|
|
185
120
|
*
|
|
186
121
|
* @param {object[]} rawStories
|
|
187
122
|
* @returns {string[]}
|
|
@@ -196,11 +131,6 @@ function collectTextHygieneWarnings(rawStories) {
|
|
|
196
131
|
}
|
|
197
132
|
|
|
198
133
|
/**
|
|
199
|
-
* Print every warning the run collected under one heading. The dry-run is
|
|
200
|
-
* where an operator reads these; the persist prints the same list so the
|
|
201
|
-
* chained run loses nothing on stderr, as the chain's envelope merge keeps
|
|
202
|
-
* it from losing anything on stdout (Story #5361).
|
|
203
|
-
*
|
|
204
134
|
* @param {string[]} warnings
|
|
205
135
|
* @returns {void}
|
|
206
136
|
*/
|
|
@@ -215,12 +145,8 @@ function logWarnings(warnings) {
|
|
|
215
145
|
}
|
|
216
146
|
|
|
217
147
|
/**
|
|
218
|
-
*
|
|
219
|
-
*
|
|
220
|
-
* `closeSupersededTickets` already swallows per-ticket failures, but this
|
|
221
|
-
* phase runs *after* `createIssue`, so an unexpected throw anywhere in it
|
|
222
|
-
* would leave the run half-done with Stories already live. Degrade to a
|
|
223
|
-
* reported failure instead.
|
|
148
|
+
* Runs after the Stories are live, so an unexpected throw degrades to a
|
|
149
|
+
* reported failure rather than a half-done run.
|
|
224
150
|
*
|
|
225
151
|
* @returns {Promise<import('./supersede-ops.js').SupersedeReport>}
|
|
226
152
|
*/
|
|
@@ -249,28 +175,11 @@ async function runSupersedePhase(args) {
|
|
|
249
175
|
}
|
|
250
176
|
|
|
251
177
|
/**
|
|
252
|
-
*
|
|
253
|
-
*
|
|
254
|
-
*
|
|
255
|
-
*
|
|
256
|
-
*
|
|
257
|
-
* fires once `runPlanPersist` has *resolved* — long after this comment body
|
|
258
|
-
* is composed. A plain `since`-filtered ledger read therefore summarized
|
|
259
|
-
* every run except the one being summarized, and on an otherwise-quiet
|
|
260
|
-
* ledger it rendered "plan-metrics: no invocations recorded" onto the very
|
|
261
|
-
* comment reporting the run. (The stdout envelope was always correct: its
|
|
262
|
-
* `attachPlanMetrics` read runs after the wrapper returns.)
|
|
263
|
-
*
|
|
264
|
-
* **The `finally` stays where it is.** It is what guarantees a persist that
|
|
265
|
-
* throws is still recorded, so moving the append earlier — or moving this
|
|
266
|
-
* read later, past the GitHub writes it feeds — would trade a cosmetic bug
|
|
267
|
-
* for a real one. Instead of racing it, fold in a synthetic record standing
|
|
268
|
-
* for the in-flight invocation. It is the same record the wrapper is about to
|
|
269
|
-
* write, minus a final duration; it cannot double-count, because the real one
|
|
270
|
-
* does not exist yet at this point in the pipeline.
|
|
271
|
-
*
|
|
272
|
-
* `ok: true` is honest here: this line is only ever composed on the success
|
|
273
|
-
* path, after `createStoryIssues` has returned.
|
|
178
|
+
* Plan-metrics line for the posted summary, scoped to this invocation. The
|
|
179
|
+
* run's own ledger record is appended by the wrapper's `finally` (which must
|
|
180
|
+
* stay there so a throwing persist is still recorded) only after this
|
|
181
|
+
* resolves, so fold in a synthetic in-flight record; it cannot double-count.
|
|
182
|
+
* `ok: true` holds because this runs only on the success path.
|
|
274
183
|
*
|
|
275
184
|
* @param {{ config: object, since: string, startedAt: string, mode: string }} args
|
|
276
185
|
* @returns {Promise<string|null>}
|
|
@@ -306,20 +215,13 @@ async function renderRunScopedPlanMetricsLine({
|
|
|
306
215
|
}
|
|
307
216
|
|
|
308
217
|
/**
|
|
309
|
-
* Re-run the
|
|
310
|
-
* (
|
|
311
|
-
*
|
|
312
|
-
*
|
|
313
|
-
* plan-time conflict analysis judged an artifact that is not the one persist
|
|
314
|
-
* writes — and the passes that scan `body.acceptance` / `body.verify` were
|
|
315
|
-
* inert on the canonical top-level authoring shape as a result. Findings the
|
|
316
|
-
* raw pass already reported are dropped so the same collision is not
|
|
317
|
-
* announced twice per run; the rest are returned for the summary
|
|
318
|
-
* comment, which is where these findings stop being a stderr line nobody
|
|
319
|
-
* keeps. Every finding is advisory (Story #5312).
|
|
218
|
+
* Re-run the conflict passes over the assembled bodies — the artifact persist
|
|
219
|
+
* actually writes (the body-scanning passes are inert on the raw payload).
|
|
220
|
+
* Only findings the raw pass did not already report are surfaced; all are
|
|
221
|
+
* advisory.
|
|
320
222
|
*
|
|
321
223
|
* @param {{ stories: object[], rawFindings: object[] }} args
|
|
322
|
-
* @returns {object[]}
|
|
224
|
+
* @returns {object[]}
|
|
323
225
|
*/
|
|
324
226
|
function analyzeAssembledStories({ stories, rawFindings }) {
|
|
325
227
|
const findings = computeAssembledConflictFindings({ stories });
|
|
@@ -336,23 +238,9 @@ function analyzeAssembledStories({ stories, rawFindings }) {
|
|
|
336
238
|
}
|
|
337
239
|
|
|
338
240
|
/**
|
|
339
|
-
* Reap abandoned `plan-*` directories
|
|
340
|
-
*
|
|
341
|
-
*
|
|
342
|
-
* so every plan that failed a gate, was abandoned mid-authoring, or ran
|
|
343
|
-
* `--dry-run` left its directory behind forever. This sweeps the stragglers
|
|
344
|
-
* on each persist.
|
|
345
|
-
*
|
|
346
|
-
* Story #4794 folded the age-floored reap into the shared temp-retention
|
|
347
|
-
* engine — `planDirs` is one of its declared classes, so the plan path and
|
|
348
|
-
* the delivery path now converge on one classifier and one staleness floor
|
|
349
|
-
* (`delivery.tempRetention.staleDays`, still 7 days by default) instead of
|
|
350
|
-
* this module owning a private constant. Behaviour is unchanged: only
|
|
351
|
-
* `plan-*` directories are considered, the age test is the directory's own
|
|
352
|
-
* mtime, and the current run's `planDir` is excluded.
|
|
353
|
-
*
|
|
354
|
-
* Best-effort throughout: this is hygiene, never a reason to fail a run that
|
|
355
|
-
* has already created Stories.
|
|
241
|
+
* Reap abandoned `plan-*` directories (failed, abandoned, or dry-run plans)
|
|
242
|
+
* via the shared temp-retention staleness floor, excluding this run's.
|
|
243
|
+
* Best-effort hygiene.
|
|
356
244
|
*
|
|
357
245
|
* @param {{ config?: object, keepDir?: string|null, now?: number }} args
|
|
358
246
|
* @returns {Promise<{ reaped: string[] }>}
|
|
@@ -373,11 +261,6 @@ export async function reapStalePlanDirs({
|
|
|
373
261
|
}
|
|
374
262
|
|
|
375
263
|
/**
|
|
376
|
-
* Fail closed on a payload that cannot be persisted. Extracted from
|
|
377
|
-
* `runPlanPersist` (Story #4926) so the entry point carries the flow, not the
|
|
378
|
-
* guards. The reviewability budget that used to sit beside this check went
|
|
379
|
-
* with Story #5312 — a plan is as many Stories as the split policy yields.
|
|
380
|
-
*
|
|
381
264
|
* @param {unknown} rawStories
|
|
382
265
|
* @returns {void}
|
|
383
266
|
* @throws {Error} On an empty payload.
|
|
@@ -392,7 +275,7 @@ function assertPersistablePlan(rawStories) {
|
|
|
392
275
|
}
|
|
393
276
|
|
|
394
277
|
/**
|
|
395
|
-
*
|
|
278
|
+
* Orphans throw; a skip is ledgered.
|
|
396
279
|
*
|
|
397
280
|
* @param {{ status: string, reasons: string[], orphans?: object[] }} reachability
|
|
398
281
|
* @param {object} config
|
|
@@ -420,19 +303,9 @@ async function enforceReachability(reachability, config) {
|
|
|
420
303
|
}
|
|
421
304
|
|
|
422
305
|
/**
|
|
423
|
-
*
|
|
424
|
-
*
|
|
425
|
-
*
|
|
426
|
-
* honestly mean "fully persisted" (Story #4541). A dry run performs none of it.
|
|
427
|
-
*
|
|
428
|
-
* **The comments fan out; the phase boundary does not** (Story #4952). The
|
|
429
|
-
* per-Story upserts are independent of one another and run under bounded
|
|
430
|
-
* concurrency, but the `await` on that whole fan-out is what keeps the
|
|
431
|
-
* Story #4541 invariant intact: *every* Story carries its plan comment before
|
|
432
|
-
* the first `agent::ready` flip is issued, so `ready` still means "fully
|
|
433
|
-
* persisted" and the operator's instructions are never missing from a ticket
|
|
434
|
-
* something else may already be picking up. Concurrency inside the phase is
|
|
435
|
-
* safe; overlapping the phases is the race this ordering exists to close.
|
|
306
|
+
* Plan comments fan out concurrently, but the whole fan-out is awaited before
|
|
307
|
+
* the first `agent::ready` flip, so `ready` always means "fully persisted".
|
|
308
|
+
* Never overlap the two phases.
|
|
436
309
|
*
|
|
437
310
|
* @param {object} args
|
|
438
311
|
* @returns {Promise<void>}
|
|
@@ -441,19 +314,12 @@ async function persistStoryArtifacts({ provider, created, summaryBody }) {
|
|
|
441
314
|
await concurrentMap(
|
|
442
315
|
created,
|
|
443
316
|
(story) => writePlanSummaryComment(provider, story.id, summaryBody),
|
|
444
|
-
// The per-Story comment upserts (Story #4952): each targets a
|
|
445
|
-
// different issue and reads nothing another writes, so this loop was
|
|
446
|
-
// serial only by construction — but see {@link persistStoryArtifacts}
|
|
447
|
-
// for the phase ordering that is *not* incidental.
|
|
448
317
|
{ concurrency: FANOUT_CONCURRENCY },
|
|
449
318
|
);
|
|
450
319
|
await markStoriesReady({ provider, created });
|
|
451
320
|
}
|
|
452
321
|
|
|
453
322
|
/**
|
|
454
|
-
* Remove this run's plan directory on terminal success, then sweep the
|
|
455
|
-
* abandoned ones terminal-success cleanup can never reach (Story #4541).
|
|
456
|
-
*
|
|
457
323
|
* @param {{ config: object, planDir: string|null, skipCleanup: boolean }} args
|
|
458
324
|
* @returns {Promise<void>}
|
|
459
325
|
*/
|
|
@@ -469,9 +335,6 @@ async function cleanupPlanDirs({ config, planDir, skipCleanup }) {
|
|
|
469
335
|
}
|
|
470
336
|
|
|
471
337
|
/**
|
|
472
|
-
* Log the operator-facing persist epilogue: adoption, the ready primary, the
|
|
473
|
-
* deliver command, and the cohort grouping label.
|
|
474
|
-
*
|
|
475
338
|
* @param {{
|
|
476
339
|
* created: object[],
|
|
477
340
|
* primary: object,
|
|
@@ -500,11 +363,7 @@ function logPersistEpilogue({
|
|
|
500
363
|
Logger.info(
|
|
501
364
|
`[plan-persist] Deliver with: /mandrel-deliver ${created.map((s2) => s2.id).join(' ')}`,
|
|
502
365
|
);
|
|
503
|
-
//
|
|
504
|
-
// a delivery-resolution input (/mandrel-deliver stays ids-only, Story #4540).
|
|
505
|
-
// Gated on the ensure result: the label ensure degrades non-fatally, and
|
|
506
|
-
// advertising a filter GitHub just refused to create is worse than saying
|
|
507
|
-
// nothing (Story #5201). The derived id survives in the result envelope.
|
|
366
|
+
// Never advertise a filter for a label the ensure failed to create.
|
|
508
367
|
if (planRunLabelApplied) {
|
|
509
368
|
Logger.info(
|
|
510
369
|
`[plan-persist] Cohort grouping label: ${planRunLabel} — filter with ` +
|
|
@@ -514,8 +373,6 @@ function logPersistEpilogue({
|
|
|
514
373
|
}
|
|
515
374
|
|
|
516
375
|
/**
|
|
517
|
-
* Execute the flat Story persist end to end.
|
|
518
|
-
*
|
|
519
376
|
* @param {{
|
|
520
377
|
* provider: object,
|
|
521
378
|
* artifacts: {
|
|
@@ -558,16 +415,11 @@ export async function runPlanPersist({
|
|
|
558
415
|
sourceTicketIds = [],
|
|
559
416
|
sourceTicketOrigin = 'none',
|
|
560
417
|
closeSuperseded = true,
|
|
561
|
-
//
|
|
562
|
-
// ordinary shape: no Epic is created unless `/mandrel-plan` offered one
|
|
563
|
-
// above the threshold and the operator confirmed it.
|
|
418
|
+
// Optional container Epic; only set when the operator confirmed one.
|
|
564
419
|
epic = null,
|
|
565
420
|
} = opts;
|
|
566
421
|
|
|
567
|
-
//
|
|
568
|
-
// appends to the ledger is stamped at or after this instant, so filtering
|
|
569
|
-
// on it scopes the counts to *this* run rather than every plan ever run
|
|
570
|
-
// through the shared standalone ledger (Story #4541).
|
|
422
|
+
// Scopes the plan-metrics summary to this run's ledger entries.
|
|
571
423
|
const runStartedAt = opts.metricsSince ?? new Date().toISOString();
|
|
572
424
|
|
|
573
425
|
assertPersistablePlan(rawStories);
|
|
@@ -591,59 +443,38 @@ export async function runPlanPersist({
|
|
|
591
443
|
});
|
|
592
444
|
await enforceReachability(reachability, config);
|
|
593
445
|
|
|
594
|
-
//
|
|
595
|
-
//
|
|
446
|
+
// Outward references (`--epic <id>`, `#<id>` blockers) resolve before the
|
|
447
|
+
// first create, dry run included.
|
|
596
448
|
const adoptionTarget = await resolveCrossPlanLinks({
|
|
597
449
|
provider,
|
|
598
450
|
stories: rawStories,
|
|
599
451
|
epicId: opts.adoptEpicId ?? null,
|
|
600
452
|
});
|
|
601
453
|
|
|
602
|
-
// Inline Spec fold (Specs stay inline, never under docs/).
|
|
603
454
|
const seedContent = planContextEnvelope?.seed?.content ?? '';
|
|
604
455
|
const { stories: assembled, warnings: supersedeWarnings } =
|
|
605
456
|
assemblePlanStories(rawStories, {
|
|
606
457
|
sharedSpec: techSpecContent,
|
|
607
458
|
sourceTicketIds,
|
|
608
|
-
//
|
|
609
|
-
//
|
|
610
|
-
// assembly copies them into the persisted Story bodies so the next sweep
|
|
611
|
-
// recognises what it already planned (Story #4877). Since Story #5045 this
|
|
612
|
-
// is the **fallback** — it is carried onto every Story that did not
|
|
613
|
-
// attribute its own `provenance`, which keeps an un-attributed plan exactly
|
|
614
|
-
// as recall-safe as it was. Empty for a `--tickets` run, a no-op there.
|
|
459
|
+
// Audit footers carried onto every Story that did not attribute its own
|
|
460
|
+
// `provenance`; empty for a `--tickets` run.
|
|
615
461
|
provenanceSource: seedContent,
|
|
616
462
|
});
|
|
617
463
|
|
|
618
|
-
// Story #5342: the source ids assembly assigned to the primary Story by
|
|
619
|
-
// default. They ride the same list every other dry-run warning does, so a
|
|
620
|
-
// default-assigned supersede is visible in the output the operator already
|
|
621
|
-
// reads rather than only in the tracker afterwards.
|
|
622
464
|
warnings.push(...supersedeWarnings);
|
|
623
465
|
logWarnings(supersedeWarnings);
|
|
624
466
|
|
|
625
|
-
//
|
|
626
|
-
// Story
|
|
627
|
-
// against, and an indexed run answers exact lookups from that pool without
|
|
628
|
-
// ever reaching the provider — so the provenance footers alone leave it
|
|
629
|
-
// invisible (Story #5307). A non-audit seed carries none: a no-op there.
|
|
467
|
+
// The dedup corpus is listed by `audit::*` label; footers alone leave the
|
|
468
|
+
// Story invisible to an indexed sweep.
|
|
630
469
|
const stories = withAuditLabels(assembled, seedContent);
|
|
631
470
|
|
|
632
|
-
// Story #5045: the cross-Story conflict passes re-run over the assembled,
|
|
633
|
-
// footer-stamped bodies — the artifact persist actually writes — before any
|
|
634
|
-
// GitHub call, so a policy upgrade still refuses the plan pre-creation.
|
|
635
471
|
const assembledConflicts = analyzeAssembledStories({
|
|
636
472
|
stories,
|
|
637
473
|
rawFindings: validated.findings,
|
|
638
474
|
});
|
|
639
475
|
|
|
640
|
-
//
|
|
641
|
-
//
|
|
642
|
-
// assembled bodies, so both can run before anything is written; they used
|
|
643
|
-
// to sit *after* creation, which is why the collision table could only ever
|
|
644
|
-
// be a receipt for a plan already live. The same computed value is handed
|
|
645
|
-
// to the summary rendering below rather than recomputed, so the refusal and
|
|
646
|
-
// the receipt can never disagree.
|
|
476
|
+
// The split gate runs before the first create; the same values feed the
|
|
477
|
+
// summary so the refusal and the receipt cannot disagree.
|
|
647
478
|
const waveTable = buildWaveTable(
|
|
648
479
|
stories.map((s) => ({
|
|
649
480
|
slug: s.slug,
|
|
@@ -652,12 +483,8 @@ export async function runPlanPersist({
|
|
|
652
483
|
})),
|
|
653
484
|
);
|
|
654
485
|
|
|
655
|
-
//
|
|
656
|
-
//
|
|
657
|
-
// the assembled bodies — the exact artifact the tick will read back off
|
|
658
|
-
// GitHub — so an N>1 draft it would serialize is refused here, and the
|
|
659
|
-
// summary comment names the serialisation instead of promising parallelism
|
|
660
|
-
// the next tick refuses. One enumeration feeds both.
|
|
486
|
+
// The dispatcher's own predicate over the assembled bodies, so a draft it
|
|
487
|
+
// would serialize is refused here rather than promised as parallel.
|
|
661
488
|
const waveCollisions = assertNoWaveCollisions(waveTable, stories, {
|
|
662
489
|
tempRoot: getPaths(config).tempRoot,
|
|
663
490
|
});
|
|
@@ -669,20 +496,10 @@ export async function runPlanPersist({
|
|
|
669
496
|
opts: { dryRun },
|
|
670
497
|
});
|
|
671
498
|
|
|
672
|
-
// What this run filed, recorded where the next audit sweep reads it
|
|
673
|
-
// (Story #5307). A dry run created nothing, and the call knows it.
|
|
674
499
|
recordAuditFilings({ stories, created, tickets: rawStories, dryRun });
|
|
675
500
|
|
|
676
501
|
const primary = created[0];
|
|
677
502
|
|
|
678
|
-
// Story #4541: `readPlanMetrics` is declared `(epicId, config)` but was
|
|
679
|
-
// called with `config` first, so the ledger path resolver received the
|
|
680
|
-
// config object as an `epicId` and threw its guard on every single run —
|
|
681
|
-
// a throw this try/catch then swallowed into a silently absent summary.
|
|
682
|
-
// v2 persist is always Epic-less, hence the explicit `null`. The `since`
|
|
683
|
-
// filter keeps the counts about this invocation, and the in-flight record
|
|
684
|
-
// is folded in because the wrapper has not written it yet — see
|
|
685
|
-
// `renderRunScopedPlanMetricsLine`.
|
|
686
503
|
const planMetricsLine = await renderRunScopedPlanMetricsLine({
|
|
687
504
|
config,
|
|
688
505
|
since: runStartedAt,
|
|
@@ -700,9 +517,6 @@ export async function runPlanPersist({
|
|
|
700
517
|
mode: 'stories',
|
|
701
518
|
planMetricsLine,
|
|
702
519
|
stories: created,
|
|
703
|
-
// Story #5045: the wave table promises what can run in parallel; the
|
|
704
|
-
// collisions the conflict passes found belong on the same surface, or the
|
|
705
|
-
// promise is the only half anyone reads.
|
|
706
520
|
conflictFindings: assembledConflicts,
|
|
707
521
|
waveCollisions,
|
|
708
522
|
});
|
|
@@ -711,11 +525,8 @@ export async function runPlanPersist({
|
|
|
711
525
|
await persistStoryArtifacts({ provider, created, summaryBody });
|
|
712
526
|
}
|
|
713
527
|
|
|
714
|
-
//
|
|
715
|
-
//
|
|
716
|
-
// database ids, neither of which exists until the Stories are live. It is
|
|
717
|
-
// never load-bearing, so a failure here degrades to "no container" and the
|
|
718
|
-
// Stories still deliver by id.
|
|
528
|
+
// Last among the writes: the Epic needs the children's numbers and database
|
|
529
|
+
// ids. Never load-bearing — a failure degrades to "no container".
|
|
719
530
|
const containerEpic = await resolveContainerEpic({
|
|
720
531
|
provider,
|
|
721
532
|
adoptionTarget,
|
|
@@ -729,16 +540,12 @@ export async function runPlanPersist({
|
|
|
729
540
|
stories,
|
|
730
541
|
created,
|
|
731
542
|
sourceTicketIds,
|
|
732
|
-
//
|
|
733
|
-
// phase re-derives the container above it. It needs the config the rollup
|
|
734
|
-
// reads its board and operator handle from.
|
|
543
|
+
// Closing a source ticket re-derives its container Epic's rollup.
|
|
735
544
|
config,
|
|
736
545
|
dryRun,
|
|
737
546
|
closeSuperseded,
|
|
738
547
|
});
|
|
739
|
-
//
|
|
740
|
-
// says *why* (`none` = neither the envelope nor --source-tickets carried
|
|
741
|
-
// any) rather than reading as a clean no-op — Story #4554.
|
|
548
|
+
// Lets a run that superseded nothing say why.
|
|
742
549
|
supersede.sourceTicketOrigin = sourceTicketOrigin;
|
|
743
550
|
|
|
744
551
|
await cleanupPlanDirs({ config, planDir, skipCleanup });
|
|
@@ -756,15 +563,9 @@ export async function runPlanPersist({
|
|
|
756
563
|
forceReview,
|
|
757
564
|
reachability,
|
|
758
565
|
freshness,
|
|
759
|
-
// Story #5312: what the run rewrote and what it noticed. The dry-run is
|
|
760
|
-
// the review surface now that the footprint probes warn instead of
|
|
761
|
-
// refusing, so the list rides the result envelope, not just stderr.
|
|
762
566
|
warnings,
|
|
763
567
|
repairs: validated.repairs ?? [],
|
|
764
568
|
waveTable,
|
|
765
|
-
// Story #5265 AC-2/AC-4: both halves of what persist concluded but used
|
|
766
|
-
// to keep to itself — the `refactors-existing` declarations it rewrote,
|
|
767
|
-
// and the same-order pairs the dispatcher will serialize.
|
|
768
569
|
assumptionNormalizations: validated.normalizations ?? [],
|
|
769
570
|
waveCollisions,
|
|
770
571
|
supersede,
|
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Soft-finding reporting for plan-persist.
|
|
3
3
|
*
|
|
4
|
-
* Story #5312 retired the fan-out gate that shared this file: the delete
|
|
5
|
-
* blast-radius probe never refused a real plan, and its `--allow-large-fan-out`
|
|
6
|
-
* override was a flag nobody typed. What remains is the one surface that
|
|
7
|
-
* announces every advisory finding the validator produced, each under its
|
|
8
|
-
* own kind, so the operator reads a conflict as a conflict and a nudge as a
|
|
9
|
-
* nudge (Story #4907).
|
|
10
|
-
*
|
|
11
4
|
* @module lib/orchestration/plan-persist/soft-findings
|
|
12
5
|
*/
|
|
13
6
|
|
|
@@ -18,11 +11,8 @@ import {
|
|
|
18
11
|
} from '../ticket-validator-conflicts.js';
|
|
19
12
|
|
|
20
13
|
/**
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* Only the {@link CONFLICT_KINDS} are cross-Story conflicts. Any other soft
|
|
24
|
-
* kind is a single-Story nudge, and announcing it as a conflict overstated it
|
|
25
|
-
* and taught readers to discount the whole channel.
|
|
14
|
+
* Only {@link CONFLICT_KINDS} are reported as conflicts; other soft kinds are
|
|
15
|
+
* single-Story advisories, so the channel is not overstated.
|
|
26
16
|
*
|
|
27
17
|
* @param {object[]} findings
|
|
28
18
|
* @param {string} [tag]
|