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,27 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* Story #2554 / Epic #2547. Tech Spec #2550 specifies that the fetcher MUST
|
|
6
|
-
* return open issues carrying the `meta::framework-gap` and
|
|
7
|
-
* `meta::consumer-improvement` labels, dedupe by issue number across the two
|
|
8
|
-
* arrays, and tolerate every error path (missing `gh` binary, unreachable
|
|
9
|
-
* repo, non-zero exit) by appending to a structured `errors[]` list — the
|
|
10
|
-
* function never throws.
|
|
11
|
-
*
|
|
12
|
-
* Tests inject a `spawnImpl` (or shape-compatible `execImpl`) to exercise
|
|
13
|
-
* the gh-exec surface deterministically; production code defaults to
|
|
14
|
-
* `child_process.spawn`.
|
|
15
|
-
*
|
|
16
|
-
* Story #4135 (Epic #4131, F11) — the envelope additionally carries a
|
|
17
|
-
* `recurringDefectClasses[]` array derived from the `friction::<class>`
|
|
18
|
-
* labels the retro routed-proposals composer stamps onto the meta issues it
|
|
19
|
-
* proposes. That closes the retro→planner loop: a recurring defect class
|
|
20
|
-
* caught by review/mandrel-deliver is filed as a `meta::*` + `friction::<class>`
|
|
21
|
-
* issue, and the next `/mandrel-plan` Phase 0 surfaces the class (with a recurrence
|
|
22
|
-
* count across the open feedback issues) to the decompose-author guidance so
|
|
23
|
-
* the planning floor ratchets up. The derivation is no-op-safe: issues with
|
|
24
|
-
* no `friction::*` label contribute nothing and the array is empty.
|
|
2
|
+
* Fetches open `meta::*` feedback issues for `/mandrel-plan` Phase 0, plus
|
|
3
|
+
* the recurring `friction::<class>` counts that close the retro→planner
|
|
4
|
+
* loop. Never throws; failures land in `errors[]`.
|
|
25
5
|
*/
|
|
26
6
|
|
|
27
7
|
import { META_LABELS } from '../label-constants.js';
|
|
@@ -30,25 +10,10 @@ import { runChild } from './graduator-core.js';
|
|
|
30
10
|
|
|
31
11
|
const DEFAULT_LIMIT = 50;
|
|
32
12
|
|
|
33
|
-
/** Prefix stamped on routed-proposal issue labels by the retro composer. */
|
|
34
13
|
const FRICTION_LABEL_PREFIX = 'friction::';
|
|
35
14
|
|
|
36
15
|
/**
|
|
37
|
-
*
|
|
38
|
-
* issues by counting `friction::<class>` labels across them (Story #4135).
|
|
39
|
-
*
|
|
40
|
-
* Each fetched meta issue may carry one `friction::<class>` label (stamped by
|
|
41
|
-
* the retro routed-proposals composer when it proposed the issue). A class
|
|
42
|
-
* that appears across **multiple** open feedback issues is recurring across
|
|
43
|
-
* Epics — exactly the signal F11 surfaces to the planner. The count is the
|
|
44
|
-
* number of distinct open issues carrying the class; the `issues[]` array
|
|
45
|
-
* lists their numbers so the planner can cross-reference.
|
|
46
|
-
*
|
|
47
|
-
* Determinism: classes are sorted by descending recurrence count, ties
|
|
48
|
-
* broken by class name ASC, so a given input always yields a stable order.
|
|
49
|
-
*
|
|
50
|
-
* No-op-safe: issues without a `friction::*` label contribute nothing; an
|
|
51
|
-
* empty / non-array input yields `[]`.
|
|
16
|
+
* `count` is distinct open issues per class; sorted count desc, then name.
|
|
52
17
|
*
|
|
53
18
|
* @param {Array<{ number: number, labels?: string[] }>} issues
|
|
54
19
|
* @returns {Array<{ class: string, count: number, issues: number[] }>}
|
|
@@ -91,19 +56,10 @@ function extractRecurringDefectClasses(issues) {
|
|
|
91
56
|
}
|
|
92
57
|
|
|
93
58
|
/**
|
|
94
|
-
* Spawn the given gh CLI with the supplied args and resolve to
|
|
95
|
-
* `{ code, stdout, stderr, spawnError }`. Delegates to the shared
|
|
96
|
-
* `runChild` helper in `graduator-core.js` (Story #3845 folded the three
|
|
97
|
-
* feedback-loop spawn copies into one) — the fetcher only needs JSON-mode
|
|
98
|
-
* reads and structured error capture, which `runChild` provides.
|
|
99
|
-
*
|
|
100
|
-
* Never throws: spawn-time errors are captured as `spawnError` so the caller
|
|
101
|
-
* can classify and surface them through the `errors[]` envelope.
|
|
102
|
-
*
|
|
103
59
|
* @param {object} opts
|
|
104
|
-
* @param {string} opts.ghPath
|
|
105
|
-
* @param {string[]} opts.args
|
|
106
|
-
* @param {Function} [opts.spawnImpl]
|
|
60
|
+
* @param {string} opts.ghPath
|
|
61
|
+
* @param {string[]} opts.args
|
|
62
|
+
* @param {Function} [opts.spawnImpl]
|
|
107
63
|
* @returns {Promise<{ code: number|null, stdout: string, stderr: string, spawnError: Error|null }>}
|
|
108
64
|
*/
|
|
109
65
|
function runGh({ ghPath, args, spawnImpl }) {
|
|
@@ -111,9 +67,7 @@ function runGh({ ghPath, args, spawnImpl }) {
|
|
|
111
67
|
}
|
|
112
68
|
|
|
113
69
|
/**
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
* @param {string} label — the meta label being fetched
|
|
70
|
+
* @param {string} label
|
|
117
71
|
* @param {{ code: number|null, stderr: string, spawnError: Error|null }} result
|
|
118
72
|
* @returns {string}
|
|
119
73
|
*/
|
|
@@ -131,17 +85,8 @@ function formatGhError(label, { code, stderr, spawnError }) {
|
|
|
131
85
|
}
|
|
132
86
|
|
|
133
87
|
/**
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
* already-budgeted envelope, and trimming early avoids any ambient assumption
|
|
137
|
-
* that downstream consumers can rely on extra fields.
|
|
138
|
-
*
|
|
139
|
-
* `intake` is the one field derived rather than copied: an issue whose body
|
|
140
|
-
* carries the CI-gap intake marker is a filing awaiting graduation, not a
|
|
141
|
-
* finished report, and `/mandrel-plan` offers those a `/mandrel-plan <id>`
|
|
142
|
-
* rewrite. The body itself is NOT carried onto the envelope — the marker
|
|
143
|
-
* check is the whole reason it was fetched, and a planner payload does not
|
|
144
|
-
* need every intake issue's full text.
|
|
88
|
+
* Deliberately narrow: the planner envelope is budgeted. The body is fetched
|
|
89
|
+
* only to derive `intake` (CI-gap intake marker) and is not carried.
|
|
145
90
|
*
|
|
146
91
|
* @param {object} raw
|
|
147
92
|
* @returns {{ number: number, title: string, url: string, labels: string[], intake: boolean }|null}
|
|
@@ -158,8 +103,7 @@ function normalizeIssue(raw) {
|
|
|
158
103
|
}
|
|
159
104
|
|
|
160
105
|
/**
|
|
161
|
-
*
|
|
162
|
-
* objects; a hand-built fixture may return strings. Pure.
|
|
106
|
+
* Accepts `gh` label objects or plain strings.
|
|
163
107
|
*
|
|
164
108
|
* @param {unknown} raw
|
|
165
109
|
* @returns {string[]}
|
|
@@ -172,9 +116,6 @@ function normalizeLabels(raw) {
|
|
|
172
116
|
}
|
|
173
117
|
|
|
174
118
|
/**
|
|
175
|
-
* Fetch open issues for a single meta label via `gh issue list`. Errors are
|
|
176
|
-
* captured rather than thrown.
|
|
177
|
-
*
|
|
178
119
|
* @param {object} opts
|
|
179
120
|
* @param {string} opts.owner
|
|
180
121
|
* @param {string} opts.repo
|
|
@@ -228,11 +169,8 @@ async function fetchByLabel({ owner, repo, label, ghPath, limit, spawnImpl }) {
|
|
|
228
169
|
}
|
|
229
170
|
|
|
230
171
|
/**
|
|
231
|
-
*
|
|
232
|
-
*
|
|
233
|
-
* An issue carrying more than one meta label must reach the planner exactly
|
|
234
|
-
* once, so the `seen` set spans all three buckets and the first bucket to
|
|
235
|
-
* claim a number keeps it. Mutates both arguments — one walk, three buckets.
|
|
172
|
+
* `seen` spans all buckets so a multi-labelled issue lands once, in the
|
|
173
|
+
* first bucket to claim it.
|
|
236
174
|
*
|
|
237
175
|
* @param {object[]} bucket
|
|
238
176
|
* @param {object[]} issues
|
|
@@ -248,23 +186,15 @@ function dedupeInto(bucket, issues, seen) {
|
|
|
248
186
|
}
|
|
249
187
|
|
|
250
188
|
/**
|
|
251
|
-
*
|
|
252
|
-
*
|
|
253
|
-
* three arrays — one per ownership bucket in `github/framework-repo.js`, so
|
|
254
|
-
* a filing's bucket survives all the way to the planner. An issue carrying
|
|
255
|
-
* more than one label appears once, in that precedence order; dedupe-by-number
|
|
256
|
-
* runs across all three arrays so the planner sees each issue exactly once.
|
|
257
|
-
*
|
|
258
|
-
* The returned envelope is best-effort: every failure mode (gh missing, repo
|
|
259
|
-
* not found, non-zero exit, malformed JSON) is captured as a string in
|
|
260
|
-
* `errors[]`. The function never throws.
|
|
189
|
+
* One array per ownership bucket (framework, consumer, platform); an issue
|
|
190
|
+
* with several meta labels appears once, in that precedence order.
|
|
261
191
|
*
|
|
262
192
|
* @param {object} opts
|
|
263
|
-
* @param {string} opts.owner
|
|
264
|
-
* @param {string} opts.repo
|
|
265
|
-
* @param {string} [opts.ghPath="gh"]
|
|
266
|
-
* @param {number} [opts.limit=50] — per
|
|
267
|
-
* @param {Function} [opts.spawnImpl]
|
|
193
|
+
* @param {string} opts.owner
|
|
194
|
+
* @param {string} opts.repo
|
|
195
|
+
* @param {string} [opts.ghPath="gh"]
|
|
196
|
+
* @param {number} [opts.limit=50] — per label.
|
|
197
|
+
* @param {Function} [opts.spawnImpl]
|
|
268
198
|
* @returns {Promise<{
|
|
269
199
|
* frameworkGaps: object[],
|
|
270
200
|
* consumerImprovements: object[],
|
|
@@ -332,19 +262,11 @@ export async function fetchPriorFeedback({
|
|
|
332
262
|
if (error) errors.push(error);
|
|
333
263
|
}
|
|
334
264
|
|
|
335
|
-
// Dedupe by issue number across both arrays. Issues that carry both labels
|
|
336
|
-
// land in frameworkGaps first (deterministic) and are filtered out of
|
|
337
|
-
// consumerImprovements.
|
|
338
265
|
const seen = new Set();
|
|
339
266
|
dedupeInto(envelope.frameworkGaps, gapsResult.issues, seen);
|
|
340
267
|
dedupeInto(envelope.consumerImprovements, improvementsResult.issues, seen);
|
|
341
268
|
dedupeInto(envelope.platformGaps, platformResult.issues, seen);
|
|
342
269
|
|
|
343
|
-
// Story #4135 (Epic #4131, F11) — close the retro→planner loop: derive the
|
|
344
|
-
// recurring defect classes from the `friction::<class>` labels carried by
|
|
345
|
-
// the deduped feedback issues, so the next /mandrel-plan Phase 0 surfaces them to
|
|
346
|
-
// the decompose-author guidance. No-op-safe when no issue carries a
|
|
347
|
-
// `friction::*` label (empty array, no behavioural change).
|
|
348
270
|
envelope.recurringDefectClasses = extractRecurringDefectClasses([
|
|
349
271
|
...envelope.frameworkGaps,
|
|
350
272
|
...envelope.consumerImprovements,
|
|
@@ -1,36 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* (`retro-proposals.js`) already split the Epic's source-tagged friction
|
|
7
|
-
* into `framework` / `consumer` actionable items, each carrying a
|
|
8
|
-
* pre-drafted `gh issue create` command stanza. Historically an operator
|
|
9
|
-
* had to copy-paste those stanzas by hand, so `/mandrel-plan` Phase 0's
|
|
10
|
-
* `recurringDefectClasses` stayed empty unless someone remembered to run
|
|
11
|
-
* the commands. This module files them mechanically instead — the retro
|
|
12
|
-
* body then lists the real filed issue numbers rather than paste-ready
|
|
13
|
-
* commands.
|
|
14
|
-
*
|
|
15
|
-
* Built on the graduator-core **pre-parsed-findings seam** (Story #4415):
|
|
16
|
-
* the routed proposals are handed to `graduate()` as a pre-parsed
|
|
17
|
-
* `findings` array, so there is no structured-comment parsing. The
|
|
18
|
-
* proposals are not file-scoped, so each finding is **path-less** — the
|
|
19
|
-
* seam skips the `git cat-file` path-exists gate rather than misclassifying
|
|
20
|
-
* the finding `file-removed`.
|
|
21
|
-
*
|
|
22
|
-
* Routing correctness: a routed item already knows its source
|
|
23
|
-
* (`framework` / `consumer`), so we file each source bucket with its own
|
|
24
|
-
* constant classifier and thread the graduator's per-run filing cap across
|
|
25
|
-
* the two buckets. Which repository a source routes to is decided once, in
|
|
26
|
-
* `github/framework-repo.js` — the silent consumer-repo fallback that used
|
|
27
|
-
* to live here (and mis-filed framework work into the consumer's tracker)
|
|
28
|
-
* is gone from the whole path, not just from this module. The `meta::<framework-gap|consumer-improvement>` +
|
|
29
|
-
* `friction::<category>` labels are lifted verbatim from the routed item.
|
|
30
|
-
*
|
|
31
|
-
* Behind the `delivery.feedbackLoop.retroProposals` toggle (default OFF
|
|
32
|
-
* since Story #5341, per `graduator-core.js#makeIsAutoFileEnabled`). NEVER
|
|
33
|
-
* throws — every failure path is captured in `errors[]`.
|
|
2
|
+
* Files the retro's routed `framework`/`consumer` proposals as follow-up
|
|
3
|
+
* issues via `graduate()`, as path-less pre-parsed findings, so the retro
|
|
4
|
+
* body can list real issue numbers instead of paste-ready commands. Opt-in
|
|
5
|
+
* via `delivery.feedbackLoop.retroProposals`; never throws.
|
|
34
6
|
*/
|
|
35
7
|
|
|
36
8
|
import {
|
|
@@ -46,26 +18,17 @@ import {
|
|
|
46
18
|
} from './graduator-core.js';
|
|
47
19
|
|
|
48
20
|
/**
|
|
49
|
-
* Resolve the toggle from the resolved agentrc config. Defaults to `false`
|
|
50
|
-
* — the feature is opt-in (Story #5341). It is now the only such toggle: the
|
|
51
|
-
* audit-results sibling was removed by Story #5366, its graduator having been
|
|
52
|
-
* deleted two releases earlier.
|
|
53
|
-
*
|
|
54
21
|
* @param {object|undefined|null} config
|
|
55
22
|
* @returns {boolean}
|
|
56
23
|
*/
|
|
57
24
|
export const isAutoFileEnabled = makeIsAutoFileEnabled('retroProposals');
|
|
58
25
|
|
|
59
26
|
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
* Fingerprinted on the CATEGORY only — never the rendered title. The title
|
|
63
|
-
* embeds the mutable recurrence count ("… recurred <N> times in …"), so
|
|
64
|
-
* hashing it made a retro re-run after the count changed mint a fresh
|
|
65
|
-
* fingerprint and re-file a duplicate issue for the same category.
|
|
27
|
+
* Category only: the title embeds a mutable recurrence count, so hashing it
|
|
28
|
+
* would re-file a duplicate whenever the count changed.
|
|
66
29
|
*
|
|
67
30
|
* @param {{ category?: string }} finding
|
|
68
|
-
* @returns {string}
|
|
31
|
+
* @returns {string}
|
|
69
32
|
*/
|
|
70
33
|
function proposalFingerprint(finding) {
|
|
71
34
|
return contentFingerprint({
|
|
@@ -76,29 +39,10 @@ function proposalFingerprint(finding) {
|
|
|
76
39
|
}
|
|
77
40
|
|
|
78
41
|
/**
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
* into the visible body; the idempotency probe strips the comment delimiters
|
|
82
|
-
* before querying `gh search` (the raw `<!-- … -->` form never matches the
|
|
83
|
-
* index — Story #4657).
|
|
84
|
-
*
|
|
85
|
-
* **Anchor-free by construction (Story #4837).** The marker used to read
|
|
86
|
-
* `epic-<anchorId>-<fp>`. The fingerprint half was stable, but the anchor
|
|
87
|
-
* half was the run's FIRST STORY for a run-scoped roll-up
|
|
88
|
-
* (`run-epilogue.js` passes `anchorId: Number(stories[0])`), so it changed
|
|
89
|
-
* every run and the key could never match a prior filing. Measured: closed
|
|
90
|
-
* issues #4833 and #4834 are one `story-blocked` finding under two anchors —
|
|
91
|
-
* `epic-101-e59976671e0b848b` and `epic-777-e59976671e0b848b` — identical
|
|
92
|
-
* fingerprint, different anchor. Dedup did not malfunction; its key was too
|
|
93
|
-
* narrow. The identity of a recurring friction category is the category,
|
|
94
|
-
* full stop: the anchor is evidence about one occurrence and belongs in the
|
|
95
|
-
* body, never in the key.
|
|
42
|
+
* Anchor-free: a run anchor changes every run, so a marker carrying it could
|
|
43
|
+
* never match a prior filing. The category alone is the identity.
|
|
96
44
|
*
|
|
97
|
-
*
|
|
98
|
-
* convention for every graduator's `buildContentMarker`; this one
|
|
99
|
-
* deliberately does not consult it.
|
|
100
|
-
*
|
|
101
|
-
* @param {number} _epicId — unused; see above.
|
|
45
|
+
* @param {number} _epicId — unused; `graduate()` owns the signature.
|
|
102
46
|
* @param {{ category?: string }} finding
|
|
103
47
|
* @returns {string}
|
|
104
48
|
*/
|
|
@@ -107,20 +51,8 @@ export function buildContentMarker(_epicId, finding) {
|
|
|
107
51
|
}
|
|
108
52
|
|
|
109
53
|
/**
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
* Two shapes, because the marker format changed under a live backlog:
|
|
114
|
-
*
|
|
115
|
-
* 1. The current anchor-free marker.
|
|
116
|
-
* 2. `-<fp> -->` — the tail every pre-cutover anchored marker ends with
|
|
117
|
-
* (`<!-- retro-proposal-followup: epic-4828-d185e7279a48d03d -->`),
|
|
118
|
-
* whatever anchor it carried. Without it the cutover would re-file the
|
|
119
|
-
* whole already-filed backlog exactly once, which is the failure this
|
|
120
|
-
* Story exists to stop rather than to perform one last time.
|
|
121
|
-
*
|
|
122
|
-
* Module-local: it reaches `graduate()` on the spec bundle, so the walk is
|
|
123
|
-
* the seam and a second exported symbol would only be one nothing imports.
|
|
54
|
+
* The current marker plus `-<fp> -->`, the tail of every older anchored
|
|
55
|
+
* marker (`…: epic-<anchor>-<fp> -->`), so those filings still dedup.
|
|
124
56
|
*
|
|
125
57
|
* @param {{ finding: { category?: string }, contentMarker: string }} args
|
|
126
58
|
* @returns {string[]}
|
|
@@ -130,8 +62,6 @@ function buildMatchTokens({ finding, contentMarker }) {
|
|
|
130
62
|
}
|
|
131
63
|
|
|
132
64
|
/**
|
|
133
|
-
* Map a routed source to its `meta::*` routing label.
|
|
134
|
-
*
|
|
135
65
|
* @param {string} source
|
|
136
66
|
* @returns {string}
|
|
137
67
|
*/
|
|
@@ -142,18 +72,6 @@ function metaSourceLabel(source) {
|
|
|
142
72
|
}
|
|
143
73
|
|
|
144
74
|
/**
|
|
145
|
-
* The per-graduator behaviour bundle for the retro-proposals walk. Bound to
|
|
146
|
-
* a single source so the constant classifier routes every finding in the
|
|
147
|
-
* bucket to the correct repo (and the label reflects that source).
|
|
148
|
-
*
|
|
149
|
-
* The bundle carries **only** builders. It used to declare a
|
|
150
|
-
* `commentMarker` / `noCommentReason` / `parseFindings` trio purely to satisfy
|
|
151
|
-
* the shared walk's shape — this graduator supplies its findings pre-parsed,
|
|
152
|
-
* so the walk never consulted any of the three. Story #5003 deleted that limb
|
|
153
|
-
* from `graduate()` along with the Epic-era graduator that was its only real
|
|
154
|
-
* consumer, and the placeholder fields went with it: a declared-but-unread
|
|
155
|
-
* field is a standing invitation to write a parser nothing will call.
|
|
156
|
-
*
|
|
157
75
|
* @param {'framework'|'consumer'} source
|
|
158
76
|
* @returns {object}
|
|
159
77
|
*/
|
|
@@ -187,9 +105,6 @@ function makeSpec(source) {
|
|
|
187
105
|
}
|
|
188
106
|
|
|
189
107
|
/**
|
|
190
|
-
* Convert a routed-proposal item into a pre-parsed, path-less finding for
|
|
191
|
-
* the shared `graduate()` walk.
|
|
192
|
-
*
|
|
193
108
|
* @param {object} item — a `RoutedItem` from `composeRoutedProposals`.
|
|
194
109
|
* @param {'framework'|'consumer'} source
|
|
195
110
|
* @param {number} index
|
|
@@ -198,8 +113,6 @@ function makeSpec(source) {
|
|
|
198
113
|
function toFinding(item, source, index) {
|
|
199
114
|
return {
|
|
200
115
|
index,
|
|
201
|
-
// Path-less — the retro proposals are not file-scoped, so the seam
|
|
202
|
-
// skips the path-exists gate rather than probing an empty path.
|
|
203
116
|
path: '',
|
|
204
117
|
severity: 'friction',
|
|
205
118
|
category: typeof item?.category === 'string' ? item.category : '',
|
|
@@ -213,23 +126,15 @@ function toFinding(item, source, index) {
|
|
|
213
126
|
}
|
|
214
127
|
|
|
215
128
|
/**
|
|
216
|
-
*
|
|
217
|
-
* via the graduator pre-parsed-findings seam. Files the `framework` and
|
|
218
|
-
* `consumer` buckets, threading the per-run filing cap across both so the
|
|
219
|
-
* overall cap is respected. Never throws.
|
|
129
|
+
* The per-run filing cap is threaded across both buckets. Never throws.
|
|
220
130
|
*
|
|
221
131
|
* @param {object} opts
|
|
222
132
|
* @param {number} opts.epicId
|
|
223
|
-
* @param {object} opts.provider
|
|
224
|
-
*
|
|
225
|
-
* @param {
|
|
226
|
-
* @param {{owner: string, repo: string}} opts.
|
|
227
|
-
*
|
|
228
|
-
* anchor.
|
|
229
|
-
* @param {{owner: string, repo: string}} [opts.platformRepo] — the shared
|
|
230
|
-
* platform/infra bucket, forwarded to the walk's routing SSOT.
|
|
231
|
-
* @param {{owner: string, repo: string}} [opts.frameworkRepo] — where
|
|
232
|
-
* framework-tagged proposals route.
|
|
133
|
+
* @param {object} opts.provider
|
|
134
|
+
* @param {object} [opts.config]
|
|
135
|
+
* @param {{owner: string, repo: string}} opts.currentRepo
|
|
136
|
+
* @param {{owner: string, repo: string}} [opts.platformRepo]
|
|
137
|
+
* @param {{owner: string, repo: string}} [opts.frameworkRepo]
|
|
233
138
|
* @param {{ framework?: object[], consumer?: object[] }} [opts.routedProposals]
|
|
234
139
|
* @param {string} [opts.ghPath='gh']
|
|
235
140
|
* @param {Function} [opts.spawnImpl]
|
|
@@ -283,16 +188,10 @@ export async function graduateRetroProposals({
|
|
|
283
188
|
{ source: 'consumer', items: consumer },
|
|
284
189
|
];
|
|
285
190
|
|
|
286
|
-
//
|
|
287
|
-
//
|
|
288
|
-
// (Story #4657), so without it the framework and consumer buckets could each
|
|
289
|
-
// file the same category. The shared set makes the second bucket short-
|
|
290
|
-
// circuit the repeat with no spawn.
|
|
191
|
+
// Shared across buckets: both mint the same marker for a category, so the
|
|
192
|
+
// second bucket short-circuits the repeat without a spawn.
|
|
291
193
|
const filedMarkers = new Set();
|
|
292
194
|
|
|
293
|
-
// One live-label-set read per routed repo across both buckets (Story #4828):
|
|
294
|
-
// the two buckets file into at most two repos, and every finding in a bucket
|
|
295
|
-
// wants the same `meta::*` name.
|
|
296
195
|
const labelCache = new Map();
|
|
297
196
|
|
|
298
197
|
let remaining = maxFilingsPerRun;
|
|
@@ -306,8 +205,6 @@ export async function graduateRetroProposals({
|
|
|
306
205
|
currentRepo,
|
|
307
206
|
frameworkRepo,
|
|
308
207
|
platformRepo,
|
|
309
|
-
// Each bucket's source is known — a constant classifier routes the
|
|
310
|
-
// whole bucket to the correct repo and stamps the correct label.
|
|
311
208
|
classifier: () => source,
|
|
312
209
|
ghPath,
|
|
313
210
|
spawnImpl,
|
|
@@ -330,10 +227,6 @@ export async function graduateRetroProposals({
|
|
|
330
227
|
}
|
|
331
228
|
|
|
332
229
|
/**
|
|
333
|
-
* Pure: extract the trailing issue number from a `gh issue create` URL
|
|
334
|
-
* (`https://github.com/o/r/issues/123` → 123). Returns `null` when no
|
|
335
|
-
* trailing number is present.
|
|
336
|
-
*
|
|
337
230
|
* @param {string|null|undefined} url
|
|
338
231
|
* @returns {number|null}
|
|
339
232
|
*/
|
|
@@ -344,11 +237,8 @@ export function issueNumberFromUrl(url) {
|
|
|
344
237
|
}
|
|
345
238
|
|
|
346
239
|
/**
|
|
347
|
-
*
|
|
348
|
-
*
|
|
349
|
-
* an issue for that item's `source` + `category`. Items with no matching
|
|
350
|
-
* filing are copied unchanged (the body renderer then falls back to the
|
|
351
|
-
* command stanza). The `discarded` bucket is passed through untouched.
|
|
240
|
+
* Attach `filedIssue: { url, number }` to items matched by
|
|
241
|
+
* `source:category`; unmatched items render their command stanza.
|
|
352
242
|
*
|
|
353
243
|
* @param {{ framework?: object[], consumer?: object[], discarded?: object[] } | null | undefined} routedProposals
|
|
354
244
|
* @param {Array<{ source?: string, category?: string, url?: string|null }>} filed
|
|
@@ -393,27 +283,22 @@ export function enrichRoutedProposalsWithFilings(routedProposals, filed) {
|
|
|
393
283
|
}
|
|
394
284
|
|
|
395
285
|
/**
|
|
396
|
-
*
|
|
397
|
-
*
|
|
398
|
-
* enriched with the filed issue references so the body composer renders real
|
|
399
|
-
* issue numbers instead of command stanzas. Never throws — a filing failure
|
|
400
|
-
* degrades to the unenriched proposals (the composer falls back to command
|
|
401
|
-
* stanzas) and the error is surfaced in `errors[]`.
|
|
286
|
+
* File, then enrich the proposals with the filed issues. Never throws: a
|
|
287
|
+
* failure degrades to the unenriched proposals plus an `errors[]` entry.
|
|
402
288
|
*
|
|
403
289
|
* @param {object} opts
|
|
404
290
|
* @param {number} opts.epicId
|
|
405
291
|
* @param {object} opts.provider
|
|
406
292
|
* @param {object} [opts.config]
|
|
407
293
|
* @param {string} [opts.frameworkRepo] — `"<owner>/<repo>"` slug.
|
|
408
|
-
* @param {string} [opts.consumerRepo] — `"<owner>/<repo>"` slug
|
|
294
|
+
* @param {string} [opts.consumerRepo] — `"<owner>/<repo>"` slug.
|
|
409
295
|
* @param {{ framework?: object[], consumer?: object[], discarded?: object[] }} [opts.routedProposals]
|
|
410
296
|
* @param {string} [opts.ghPath]
|
|
411
297
|
* @param {Function} [opts.spawnImpl]
|
|
412
298
|
* @param {string} [opts.cwd]
|
|
413
299
|
* @param {number} [opts.maxFilingsPerRun]
|
|
414
300
|
* @param {{info?: Function, warn?: Function}} [opts.logger]
|
|
415
|
-
* @param {Function} [opts.graduateFn]
|
|
416
|
-
* {@link graduateRetroProposals}.
|
|
301
|
+
* @param {Function} [opts.graduateFn]
|
|
417
302
|
* @returns {Promise<{ routedProposals: object|null, summary: { filed: object[], skipped: object[], errors: string[] } }>}
|
|
418
303
|
*/
|
|
419
304
|
export async function fileRetroProposals({
|
|
@@ -435,25 +320,16 @@ export async function fileRetroProposals({
|
|
|
435
320
|
summary: { filed: [], skipped: reason ? [{ reason }] : [], errors: [] },
|
|
436
321
|
});
|
|
437
322
|
|
|
438
|
-
// Toggle OFF → leave proposals unenriched; the composer renders the
|
|
439
|
-
// paste-ready command stanzas.
|
|
440
323
|
if (!isAutoFileEnabled(config)) return passthrough('toggle-disabled');
|
|
441
324
|
|
|
442
325
|
const currentRepo = parseRepoSlug(consumerRepo);
|
|
443
326
|
if (!currentRepo) {
|
|
444
|
-
// No resolvable consumer repo — the retro already disables the consumer
|
|
445
|
-
// pane loudly; skip filing and fall back to command stanzas.
|
|
446
327
|
logger?.warn?.(
|
|
447
328
|
'[retro-proposals-graduator] No resolvable consumer repo — skipping auto-file (falling back to command stanzas).',
|
|
448
329
|
);
|
|
449
330
|
return passthrough('no-current-repo');
|
|
450
331
|
}
|
|
451
|
-
//
|
|
452
|
-
// constant, NEVER to the consumer's own repo: the retired consumer-repo
|
|
453
|
-
// fallback silently auto-filed framework-tagged proposals into the
|
|
454
|
-
// consumer's tracker while the retro body rendered them under "framework
|
|
455
|
-
// repo" (masked in this repo only because consumer === framework here).
|
|
456
|
-
// `github/framework-repo.js` is the SSOT for that rule now.
|
|
332
|
+
// Fall back to the Mandrel constant, never the consumer's own repo.
|
|
457
333
|
const frameworkRepoObj =
|
|
458
334
|
parseRepoSlug(frameworkRepo) ?? parseRepoSlug(DEFAULT_FRAMEWORK_REPO);
|
|
459
335
|
|