mandrel 2.59.0 → 2.61.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/README.md +21 -19
- package/.agents/agents/acceptance-critic.md +24 -43
- package/.agents/agents/story-worker.md +20 -21
- package/.agents/docs/agentrc-reference.json +5 -84
- package/.agents/docs/configuration.md +48 -132
- package/.agents/docs/workflows.md +2 -2
- package/.agents/instructions.md +5 -8
- package/.agents/rules/ci-remediation.md +41 -8
- package/.agents/rules/gherkin-standards.md +4 -0
- package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
- package/.agents/schemas/agentrc.schema.json +16 -496
- package/.agents/schemas/story-deliver-terminal.schema.json +13 -3
- package/.agents/schemas/validation-evidence.schema.json +2 -1
- package/.agents/scripts/README.md +23 -13
- package/.agents/scripts/acceptance-eval.js +35 -169
- package/.agents/scripts/agents-bootstrap-github.js +27 -129
- package/.agents/scripts/apply-quality-bootstrap.js +4 -40
- package/.agents/scripts/audit-baselines.js +6 -27
- package/.agents/scripts/audit-labels-bootstrap.js +5 -29
- package/.agents/scripts/audit-to-stories.js +91 -361
- package/.agents/scripts/boot-sweep.js +19 -72
- package/.agents/scripts/bootstrap.js +74 -395
- package/.agents/scripts/ceremony-derive.js +10 -41
- package/.agents/scripts/check-arch-cycles.js +14 -64
- package/.agents/scripts/check-baselines.js +8 -48
- package/.agents/scripts/check-context-budget.js +105 -311
- package/.agents/scripts/check-cyclomatic.js +12 -44
- package/.agents/scripts/check-dead-exports.js +13 -64
- package/.agents/scripts/check-doc-links.js +38 -186
- package/.agents/scripts/check-gherkin-corpus.js +24 -127
- package/.agents/scripts/check-test-temp-hygiene.js +28 -169
- package/.agents/scripts/coverage-capture.js +34 -98
- package/.agents/scripts/deliver-light.js +25 -171
- package/.agents/scripts/deliver-recover.js +6 -42
- package/.agents/scripts/deliver-run.js +534 -0
- package/.agents/scripts/diagnose-friction.js +24 -116
- package/.agents/scripts/drain-pending-cleanup.js +1 -1
- package/.agents/scripts/evidence-gate.js +23 -85
- package/.agents/scripts/file-ci-gap.js +57 -49
- package/.agents/scripts/generate-config-docs.js +30 -170
- package/.agents/scripts/generate-lens-checklists.js +8 -52
- package/.agents/scripts/generate-skills-index.js +14 -112
- package/.agents/scripts/generate-workflows-doc.js +10 -70
- package/.agents/scripts/git-cleanup.js +2 -34
- package/.agents/scripts/lib/Graph.js +24 -81
- package/.agents/scripts/lib/ITicketingProvider.js +47 -143
- package/.agents/scripts/lib/Logger.js +14 -76
- package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
- package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
- package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
- package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
- package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
- package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
- package/.agents/scripts/lib/audit-baselines/read.js +3 -16
- package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
- package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
- package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
- package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
- package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
- package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
- package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
- package/.agents/scripts/lib/audit-suite/findings.js +12 -52
- package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
- package/.agents/scripts/lib/audit-suite/index.js +1 -15
- package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
- package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
- package/.agents/scripts/lib/audit-suite/runner.js +13 -43
- package/.agents/scripts/lib/audit-suite/selector.js +49 -349
- package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
- package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
- package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
- package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
- package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
- package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
- package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
- package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
- package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
- package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
- package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
- package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
- package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
- package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
- package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
- package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
- package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
- package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
- package/.agents/scripts/lib/baseline-loader.js +12 -51
- package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
- package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
- package/.agents/scripts/lib/baselines/components.js +10 -61
- package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
- package/.agents/scripts/lib/baselines/crap-preview-incremental.js +7 -19
- package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
- package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
- package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
- package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
- package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
- package/.agents/scripts/lib/baselines/envelope.js +13 -129
- package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
- package/.agents/scripts/lib/baselines/git-base.js +23 -142
- package/.agents/scripts/lib/baselines/kernel.js +11 -111
- package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
- package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
- package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
- package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
- package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
- package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
- package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
- package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
- package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
- package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
- package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
- package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
- package/.agents/scripts/lib/baselines/path-canon.js +19 -128
- package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
- package/.agents/scripts/lib/baselines/reader.js +14 -107
- package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
- package/.agents/scripts/lib/baselines/scope.js +11 -135
- package/.agents/scripts/lib/baselines/writer.js +16 -149
- package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
- package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
- package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
- package/.agents/scripts/lib/bdd-step-index.js +26 -100
- package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
- package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
- package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
- package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
- package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
- package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
- package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
- package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
- package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
- package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
- package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
- package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
- package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
- package/.agents/scripts/lib/bootstrap/summary.js +1 -8
- package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
- package/.agents/scripts/lib/branch-name-guard.js +4 -23
- package/.agents/scripts/lib/changed-files.js +39 -121
- package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
- package/.agents/scripts/lib/checks/index.js +18 -101
- package/.agents/scripts/lib/checks/loop-health.js +11 -53
- package/.agents/scripts/lib/checks/state.js +16 -91
- package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
- package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
- package/.agents/scripts/lib/child-exec.js +39 -108
- package/.agents/scripts/lib/cli/standard-args.js +9 -116
- package/.agents/scripts/lib/cli-args.js +31 -146
- package/.agents/scripts/lib/cli-usage.js +5 -27
- package/.agents/scripts/lib/cli-utils.js +2 -12
- package/.agents/scripts/lib/close-validation/commands.js +13 -76
- package/.agents/scripts/lib/close-validation/gates.js +92 -331
- package/.agents/scripts/lib/close-validation/process.js +121 -151
- package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
- package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
- package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
- package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
- package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
- package/.agents/scripts/lib/close-validation/runner.js +53 -110
- package/.agents/scripts/lib/command-header.js +6 -28
- package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
- package/.agents/scripts/lib/config/baselines.js +3 -14
- package/.agents/scripts/lib/config/ci.js +8 -38
- package/.agents/scripts/lib/config/commands.js +1 -15
- package/.agents/scripts/lib/config/defaults.js +4 -33
- package/.agents/scripts/lib/config/delivery-routing.js +6 -34
- package/.agents/scripts/lib/config/explain.js +10 -83
- package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
- package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +3 -31
- package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
- package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
- package/.agents/scripts/lib/config/gates/index.js +2 -17
- package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
- package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
- package/.agents/scripts/lib/config/gates/shared.js +4 -64
- package/.agents/scripts/lib/config/github.js +4 -22
- package/.agents/scripts/lib/config/limits.js +4 -57
- package/.agents/scripts/lib/config/paths.js +2 -21
- package/.agents/scripts/lib/config/qa.js +4 -38
- package/.agents/scripts/lib/config/quality.js +76 -432
- package/.agents/scripts/lib/config/runners.js +12 -56
- package/.agents/scripts/lib/config/runtime.js +13 -57
- package/.agents/scripts/lib/config/shared.js +2 -16
- package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
- package/.agents/scripts/lib/config/temp-paths.js +40 -280
- package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
- package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
- package/.agents/scripts/lib/config-resolver.js +11 -52
- package/.agents/scripts/lib/config-schema-shared.js +1 -4
- package/.agents/scripts/lib/config-settings-schema-delivery.js +16 -291
- package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
- package/.agents/scripts/lib/config-settings-schema.js +37 -274
- package/.agents/scripts/lib/coverage-baseline.js +20 -110
- package/.agents/scripts/lib/coverage-capture-fullscope.js +18 -35
- package/.agents/scripts/lib/coverage-capture-incremental.js +15 -45
- package/.agents/scripts/lib/coverage-capture-usage.js +8 -25
- package/.agents/scripts/lib/coverage-capture.js +99 -224
- package/.agents/scripts/lib/coverage-utils.js +14 -79
- package/.agents/scripts/lib/cpu-pool.js +17 -123
- package/.agents/scripts/lib/crap-baseline-join.js +16 -88
- package/.agents/scripts/lib/crap-coordinates.js +6 -25
- package/.agents/scripts/lib/crap-engine.js +40 -153
- package/.agents/scripts/lib/crap-method-identity.js +16 -78
- package/.agents/scripts/lib/crap-utils.js +31 -155
- package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
- package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
- package/.agents/scripts/lib/dead-exports-knip.js +18 -56
- package/.agents/scripts/lib/dead-exports-mode.js +5 -24
- package/.agents/scripts/lib/degraded-mode.js +3 -26
- package/.agents/scripts/lib/dependency-parser.js +8 -40
- package/.agents/scripts/lib/dependency-version.js +13 -35
- package/.agents/scripts/lib/detect-package-manager.js +6 -36
- package/.agents/scripts/lib/doc-tiers.js +22 -124
- package/.agents/scripts/lib/duplicate-search.js +8 -72
- package/.agents/scripts/lib/env-loader.js +5 -27
- package/.agents/scripts/lib/error-redactor.js +6 -31
- package/.agents/scripts/lib/errors/index.js +2 -22
- package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
- package/.agents/scripts/lib/escomplex-kernel.js +21 -123
- package/.agents/scripts/lib/feedback-loop/graduator-core.js +94 -419
- package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
- package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -149
- package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
- package/.agents/scripts/lib/findings/classify-finding.js +14 -69
- package/.agents/scripts/lib/findings/promote-finding.js +14 -112
- package/.agents/scripts/lib/findings/provenance-field.js +11 -52
- package/.agents/scripts/lib/findings/route-finding.js +37 -255
- package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
- package/.agents/scripts/lib/findings/severity.js +18 -104
- package/.agents/scripts/lib/format-generated-json.js +12 -44
- package/.agents/scripts/lib/full-suite-lock.js +160 -429
- package/.agents/scripts/lib/full-suite-queue.js +213 -0
- package/.agents/scripts/lib/gates/baseline-store.js +5 -9
- package/.agents/scripts/lib/gates/friction.js +1 -3
- package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
- package/.agents/scripts/lib/gh-exec.js +123 -191
- package/.agents/scripts/lib/git/cached-fetch.js +9 -52
- package/.agents/scripts/lib/git/sync-from-base.js +15 -107
- package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
- package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
- package/.agents/scripts/lib/git-utils.js +37 -161
- package/.agents/scripts/lib/github/framework-repo.js +8 -71
- package/.agents/scripts/lib/github-url.js +2 -17
- package/.agents/scripts/lib/import-graph.js +11 -38
- package/.agents/scripts/lib/install-cmd-parser.js +4 -13
- package/.agents/scripts/lib/json-utils.js +3 -18
- package/.agents/scripts/lib/label-constants.js +16 -111
- package/.agents/scripts/lib/label-taxonomy.js +4 -30
- package/.agents/scripts/lib/maintainability-engine.js +12 -80
- package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
- package/.agents/scripts/lib/maintainability-utils.js +16 -92
- package/.agents/scripts/lib/mandrel-catalog.js +12 -70
- package/.agents/scripts/lib/notifications/notifier.js +13 -38
- package/.agents/scripts/lib/npm-scripts.js +4 -23
- package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
- package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
- package/.agents/scripts/lib/observability/signal-validator.js +5 -37
- package/.agents/scripts/lib/observability/signals-writer.js +11 -121
- package/.agents/scripts/lib/observability/source-classifier.js +22 -203
- package/.agents/scripts/lib/observability/terse-result.js +14 -47
- package/.agents/scripts/lib/onboard/init-tail.js +13 -74
- package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
- package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
- package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
- package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
- package/.agents/scripts/lib/orchestration/ceremony-routing.js +28 -156
- package/.agents/scripts/lib/orchestration/change-set.js +7 -36
- package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
- package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
- package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
- package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
- package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
- package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
- package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
- package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
- package/.agents/scripts/lib/orchestration/check-state.js +92 -0
- package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
- package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +121 -157
- package/.agents/scripts/lib/orchestration/code-review.js +24 -128
- package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
- package/.agents/scripts/lib/orchestration/complexity-gate.js +118 -462
- package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
- package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
- package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
- package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
- package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
- package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
- package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
- package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
- package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
- package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
- package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
- package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
- package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
- package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
- package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
- package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
- package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
- package/.agents/scripts/lib/orchestration/light-suitability.js +37 -307
- package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
- package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
- package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
- package/.agents/scripts/lib/orchestration/plan-context.js +55 -318
- package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
- package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
- package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
- package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
- package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
- package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
- package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +16 -78
- package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
- package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
- package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
- package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
- package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
- package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
- package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +71 -289
- package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +96 -362
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +9 -39
- package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +60 -186
- package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
- package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
- package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
- package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
- package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
- package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
- package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
- package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
- package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
- package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
- package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
- package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
- package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
- package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
- package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
- package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
- package/.agents/scripts/lib/orchestration/review-depth.js +12 -91
- package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
- package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
- package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
- package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
- package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
- package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
- package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
- package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
- package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
- package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
- package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
- package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
- package/.agents/scripts/lib/orchestration/run-epilogue.js +245 -326
- package/.agents/scripts/lib/orchestration/run-scoped-config.js +55 -159
- package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
- package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
- package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
- package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
- package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +20 -82
- package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
- package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
- package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
- package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
- package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +96 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
- package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
- package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
- package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
- package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
- package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +180 -273
- package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
- package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
- package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
- package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
- package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
- package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
- package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
- package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
- package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -200
- package/.agents/scripts/lib/orchestration/story-follow-ups.js +167 -252
- package/.agents/scripts/lib/orchestration/story-init-envelope.js +52 -0
- package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
- package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
- package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -135
- package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
- package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
- package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
- package/.agents/scripts/lib/orchestration/ticket-validator.js +63 -344
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -261
- package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
- package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
- package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
- package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
- package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
- package/.agents/scripts/lib/path-security.js +3 -6
- package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
- package/.agents/scripts/lib/preflight-runner.js +13 -69
- package/.agents/scripts/lib/process-group.js +143 -0
- package/.agents/scripts/lib/project-root.js +2 -8
- package/.agents/scripts/lib/provider-factory.js +2 -25
- package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
- package/.agents/scripts/lib/qa/qa-session.js +15 -69
- package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
- package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
- package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
- package/.agents/scripts/lib/reserved-test-ids.js +9 -47
- package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
- package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
- package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
- package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
- package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
- package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
- package/.agents/scripts/lib/signals/detectors/common.js +12 -38
- package/.agents/scripts/lib/signals/index.js +2 -19
- package/.agents/scripts/lib/signals/schema.js +14 -109
- package/.agents/scripts/lib/signals/write.js +2 -11
- package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
- package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
- package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
- package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
- package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
- package/.agents/scripts/lib/single-story-sweep.js +14 -97
- package/.agents/scripts/lib/skills/parse-skill.js +13 -59
- package/.agents/scripts/lib/skills/skills-index.js +8 -29
- package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
- package/.agents/scripts/lib/source-extensions.js +11 -42
- package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
- package/.agents/scripts/lib/stdio-flush.js +9 -36
- package/.agents/scripts/lib/story-adjacency.js +8 -40
- package/.agents/scripts/lib/story-body/body-format-lints.js +51 -66
- package/.agents/scripts/lib/story-body/footer-block.js +11 -44
- package/.agents/scripts/lib/story-body/story-body.js +123 -344
- package/.agents/scripts/lib/temp-retention.js +42 -143
- package/.agents/scripts/lib/templates/decomposer-prompts.js +18 -80
- package/.agents/scripts/lib/test-env.js +12 -65
- package/.agents/scripts/lib/test-run-credit.js +10 -65
- package/.agents/scripts/lib/test-runner-contract.js +19 -74
- package/.agents/scripts/lib/test-temp.js +38 -184
- package/.agents/scripts/lib/test-tiers.js +12 -96
- package/.agents/scripts/lib/ticket-body-sections.js +21 -96
- package/.agents/scripts/lib/transpile.js +15 -74
- package/.agents/scripts/lib/util/concurrent-map.js +6 -25
- package/.agents/scripts/lib/util/parse-id-list.js +8 -34
- package/.agents/scripts/lib/util/poll-loop.js +8 -28
- package/.agents/scripts/lib/util/with-timeout.js +2 -11
- package/.agents/scripts/lib/validation-evidence.js +21 -96
- package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
- package/.agents/scripts/lib/wave-runner/live-probe.js +67 -209
- package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
- package/.agents/scripts/lib/workers/crap-worker.js +11 -64
- package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
- package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
- package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
- package/.agents/scripts/lib/workflow-closure.js +22 -105
- package/.agents/scripts/lib/workspace-provisioner.js +16 -54
- package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
- package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
- package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
- package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
- package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
- package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
- package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
- package/.agents/scripts/lib/worktree-manager.js +15 -40
- package/.agents/scripts/lint-issue-body.js +12 -68
- package/.agents/scripts/mandrel-update-preflight.js +10 -70
- package/.agents/scripts/merge-baseline.js +30 -105
- package/.agents/scripts/nav-registry-diff.js +22 -108
- package/.agents/scripts/notify.js +12 -69
- package/.agents/scripts/plan-context.js +97 -92
- package/.agents/scripts/plan-critics.js +12 -66
- package/.agents/scripts/plan-persist.js +71 -137
- package/.agents/scripts/plan-run-epilogue.js +20 -43
- package/.agents/scripts/pr-watch-with-update.js +79 -263
- package/.agents/scripts/providers/github/auth.js +3 -8
- package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
- package/.agents/scripts/providers/github/board-add.js +5 -21
- package/.agents/scripts/providers/github/branch-protection.js +11 -43
- package/.agents/scripts/providers/github/cache.js +2 -14
- package/.agents/scripts/providers/github/comments.js +7 -40
- package/.agents/scripts/providers/github/compose.js +3 -19
- package/.agents/scripts/providers/github/errors.js +22 -125
- package/.agents/scripts/providers/github/issues.js +31 -123
- package/.agents/scripts/providers/github/labels.js +24 -124
- package/.agents/scripts/providers/github/mappers.js +5 -27
- package/.agents/scripts/providers/github/merge-methods.js +3 -22
- package/.agents/scripts/providers/github/project-board.js +2 -17
- package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
- package/.agents/scripts/providers/github/request-helpers.js +5 -32
- package/.agents/scripts/providers/github/search-budget.js +9 -39
- package/.agents/scripts/providers/github/search-query.js +5 -26
- package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
- package/.agents/scripts/providers/github/sub-issues.js +7 -36
- package/.agents/scripts/providers/github/tickets.js +32 -134
- package/.agents/scripts/providers/github.js +18 -59
- package/.agents/scripts/prune-plan-run-labels.js +12 -46
- package/.agents/scripts/quality-preview.js +35 -220
- package/.agents/scripts/resolve-doc-tiers.js +3 -26
- package/.agents/scripts/resolve-stories.js +16 -67
- package/.agents/scripts/resync-status-column.js +6 -25
- package/.agents/scripts/run-tests.js +29 -104
- package/.agents/scripts/single-story-close.js +23 -135
- package/.agents/scripts/single-story-confirm-merge.js +32 -139
- package/.agents/scripts/single-story-init.js +47 -259
- package/.agents/scripts/stories-wave-tick.js +179 -415
- package/.agents/scripts/sync-agentrc.js +3 -21
- package/.agents/scripts/sync-claude-agents.js +9 -55
- package/.agents/scripts/sync-claude-commands.js +20 -110
- package/.agents/scripts/test-wrapper.js +6 -43
- package/.agents/scripts/update-coverage-baseline.js +5 -22
- package/.agents/scripts/update-crap-baseline.js +7 -30
- package/.agents/scripts/update-duplication-baseline.js +16 -92
- package/.agents/scripts/update-maintainability-baseline.js +8 -62
- package/.agents/scripts/update-ticket-state.js +1 -7
- package/.agents/scripts/validate-skills.js +6 -26
- package/.agents/skills/core/gates-and-baselines/reference.md +0 -1
- package/.agents/skills/skills.index.json +2 -2
- package/.agents/skills/stack/qa/playwright/SKILL.md +26 -0
- package/.agents/templates/agent-protocol.md +2 -2
- package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
- package/.agents/workflows/audit-accessibility.md +4 -7
- package/.agents/workflows/audit-adrs.md +3 -6
- package/.agents/workflows/audit-architecture.md +3 -11
- package/.agents/workflows/audit-baselines.md +6 -9
- package/.agents/workflows/audit-clean-code.md +8 -12
- package/.agents/workflows/audit-data-model.md +3 -7
- package/.agents/workflows/audit-dependencies.md +4 -7
- package/.agents/workflows/audit-devops.md +4 -8
- package/.agents/workflows/audit-documentation.md +1 -4
- package/.agents/workflows/audit-mobile.md +4 -7
- package/.agents/workflows/audit-navigability.md +3 -6
- package/.agents/workflows/audit-performance.md +2 -4
- package/.agents/workflows/audit-privacy.md +4 -7
- package/.agents/workflows/audit-quality.md +4 -7
- package/.agents/workflows/audit-security.md +4 -7
- package/.agents/workflows/audit-seo.md +4 -7
- package/.agents/workflows/audit-sre.md +4 -7
- package/.agents/workflows/audit-to-stories.md +17 -30
- package/.agents/workflows/audit-ux-ui.md +4 -7
- package/.agents/workflows/helpers/acceptance-self-eval.md +84 -157
- package/.agents/workflows/helpers/audit-lens-core.md +1 -1
- package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
- package/.agents/workflows/helpers/code-review.md +4 -2
- package/.agents/workflows/helpers/deliver-digest.md +37 -28
- package/.agents/workflows/helpers/deliver-light.md +92 -101
- package/.agents/workflows/helpers/deliver-reference.md +162 -220
- package/.agents/workflows/helpers/deliver-story-reference.md +197 -607
- package/.agents/workflows/helpers/deliver-story.md +17 -18
- package/.agents/workflows/helpers/plan-reference.md +125 -167
- package/.agents/workflows/helpers/qa-core.md +12 -0
- package/.agents/workflows/mandrel-deliver.md +47 -31
- package/.agents/workflows/mandrel-plan.md +22 -21
- package/.agents/workflows/mandrel-update.md +36 -21
- package/.agents/workflows/memory-consolidate.md +1 -1
- package/.agents/workflows/qa-assist.md +27 -71
- package/.agents/workflows/qa-explore.md +19 -59
- package/.agents/workflows/qa-run.md +11 -33
- package/README.md +1 -1
- package/bin/mandrel.js +5 -46
- package/bin/postinstall.js +18 -107
- package/docs/CHANGELOG.md +60 -0
- package/lib/cli/doctor.js +11 -71
- package/lib/cli/init.js +26 -165
- package/lib/cli/migrate.js +5 -64
- package/lib/cli/registry.js +84 -467
- package/lib/cli/sync-agents.js +4 -64
- package/lib/cli/sync-commands.js +11 -64
- package/lib/cli/sync.js +34 -213
- package/lib/cli/uninstall.js +40 -219
- package/lib/cli/update.js +326 -523
- package/lib/cli/version-check.js +8 -72
- package/lib/cli/version-helpers.js +14 -87
- package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
- package/lib/migrations/index.js +17 -92
- package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
- package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
- package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
- package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
- package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
- package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
- package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
- package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
- package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +21 -0
- package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
- package/package.json +17 -14
- package/.agents/docs/SDLC.md +0 -590
- package/.agents/docs/quality-gates.md +0 -1179
- package/.agents/rules/known-tooling-behavior.md +0 -150
- package/.agents/rules/orchestration-error-handling.md +0 -61
- package/.agents/rules/test-seams.md +0 -59
- package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
- package/.agents/schemas/baselines/lint.schema.json +0 -47
- package/.agents/schemas/model-attribution.schema.json +0 -53
- package/.agents/scripts/check-action-pinning.js +0 -260
- package/.agents/scripts/check-audit-attribution.js +0 -302
- package/.agents/scripts/check-baseline-drift.js +0 -211
- package/.agents/scripts/check-baseline-scope.js +0 -362
- package/.agents/scripts/check-generated-validator.js +0 -202
- package/.agents/scripts/check-knip-entries.js +0 -159
- package/.agents/scripts/check-lifecycle-lint.js +0 -294
- package/.agents/scripts/check-pinned-override-notes.js +0 -102
- package/.agents/scripts/check-schema-references.js +0 -366
- package/.agents/scripts/check-test-portability.js +0 -512
- package/.agents/scripts/check-workflow-citations.js +0 -332
- package/.agents/scripts/check-workflow-cli-lint.js +0 -299
- package/.agents/scripts/check-workflow-timeouts.js +0 -291
- package/.agents/scripts/install-matrix-assert.js +0 -326
- package/.agents/scripts/lib/audit-advisories.js +0 -195
- package/.agents/scripts/lib/audit-attribution.js +0 -134
- package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
- package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
- package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
- package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
- package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
- package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
- package/.agents/scripts/lib/c8-cli-path.js +0 -21
- package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
- package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
- package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
- package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
- package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
- package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
- package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
- package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
- package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
- package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
- package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
- package/.agents/scripts/lib/fs-walk.js +0 -52
- package/.agents/scripts/lib/knip-config-resolver.js +0 -181
- package/.agents/scripts/lib/knip-entry-sync.js +0 -452
- package/.agents/scripts/lib/orchestration/model-attribution.js +0 -418
- package/.agents/scripts/lib/orchestration/story-plan-state.js +0 -33
- package/.agents/scripts/lib/orchestration/structured-comment-parser.js +0 -67
- package/.agents/scripts/lib/pinned-override-notes.js +0 -88
- package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
- package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
- package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
- package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
- package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
- package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
- package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
- package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
- package/.agents/scripts/lib/test-isolate/runner.js +0 -483
- package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
- package/.agents/scripts/lib/test-profile/render-report.js +0 -45
- package/.agents/scripts/lint-label-vocabulary.js +0 -214
- package/.agents/scripts/post-structured-comment.js +0 -127
- package/.agents/scripts/provision-git-hooks.js +0 -85
- package/.agents/scripts/prune-baseline-orphans.js +0 -181
- package/.agents/scripts/run-coverage.js +0 -197
- package/.agents/scripts/run-lint.js +0 -133
- package/.agents/scripts/run-test-profile.js +0 -129
- package/.agents/scripts/run-verify.js +0 -118
- package/.agents/scripts/test-isolate.js +0 -55
- package/.agents/scripts/update-dead-exports-baseline.js +0 -321
|
@@ -1,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 ON,
|
|
32
|
-
* per `graduator-core.js#makeIsAutoFileEnabled`). NEVER throws — every
|
|
33
|
-
* 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,24 +18,17 @@ import {
|
|
|
46
18
|
} from './graduator-core.js';
|
|
47
19
|
|
|
48
20
|
/**
|
|
49
|
-
* Resolve the toggle from the resolved agentrc config. Defaults to `true`
|
|
50
|
-
* — the feature is opt-out (mirrors auditResultsAutoFile).
|
|
51
|
-
*
|
|
52
21
|
* @param {object|undefined|null} config
|
|
53
22
|
* @returns {boolean}
|
|
54
23
|
*/
|
|
55
24
|
export const isAutoFileEnabled = makeIsAutoFileEnabled('retroProposals');
|
|
56
25
|
|
|
57
26
|
/**
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
* Fingerprinted on the CATEGORY only — never the rendered title. The title
|
|
61
|
-
* embeds the mutable recurrence count ("… recurred <N> times in …"), so
|
|
62
|
-
* hashing it made a retro re-run after the count changed mint a fresh
|
|
63
|
-
* 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.
|
|
64
29
|
*
|
|
65
30
|
* @param {{ category?: string }} finding
|
|
66
|
-
* @returns {string}
|
|
31
|
+
* @returns {string}
|
|
67
32
|
*/
|
|
68
33
|
function proposalFingerprint(finding) {
|
|
69
34
|
return contentFingerprint({
|
|
@@ -74,29 +39,10 @@ function proposalFingerprint(finding) {
|
|
|
74
39
|
}
|
|
75
40
|
|
|
76
41
|
/**
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
* into the visible body; the idempotency probe strips the comment delimiters
|
|
80
|
-
* before querying `gh search` (the raw `<!-- … -->` form never matches the
|
|
81
|
-
* index — Story #4657).
|
|
82
|
-
*
|
|
83
|
-
* **Anchor-free by construction (Story #4837).** The marker used to read
|
|
84
|
-
* `epic-<anchorId>-<fp>`. The fingerprint half was stable, but the anchor
|
|
85
|
-
* half was the run's FIRST STORY for a run-scoped roll-up
|
|
86
|
-
* (`run-epilogue.js` passes `anchorId: Number(stories[0])`), so it changed
|
|
87
|
-
* every run and the key could never match a prior filing. Measured: closed
|
|
88
|
-
* issues #4833 and #4834 are one `story-blocked` finding under two anchors —
|
|
89
|
-
* `epic-101-e59976671e0b848b` and `epic-777-e59976671e0b848b` — identical
|
|
90
|
-
* fingerprint, different anchor. Dedup did not malfunction; its key was too
|
|
91
|
-
* narrow. The identity of a recurring friction category is the category,
|
|
92
|
-
* full stop: the anchor is evidence about one occurrence and belongs in the
|
|
93
|
-
* 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.
|
|
94
44
|
*
|
|
95
|
-
*
|
|
96
|
-
* convention for every graduator's `buildContentMarker`; this one
|
|
97
|
-
* deliberately does not consult it.
|
|
98
|
-
*
|
|
99
|
-
* @param {number} _epicId — unused; see above.
|
|
45
|
+
* @param {number} _epicId — unused; `graduate()` owns the signature.
|
|
100
46
|
* @param {{ category?: string }} finding
|
|
101
47
|
* @returns {string}
|
|
102
48
|
*/
|
|
@@ -105,20 +51,8 @@ export function buildContentMarker(_epicId, finding) {
|
|
|
105
51
|
}
|
|
106
52
|
|
|
107
53
|
/**
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
* Two shapes, because the marker format changed under a live backlog:
|
|
112
|
-
*
|
|
113
|
-
* 1. The current anchor-free marker.
|
|
114
|
-
* 2. `-<fp> -->` — the tail every pre-cutover anchored marker ends with
|
|
115
|
-
* (`<!-- retro-proposal-followup: epic-4828-d185e7279a48d03d -->`),
|
|
116
|
-
* whatever anchor it carried. Without it the cutover would re-file the
|
|
117
|
-
* whole already-filed backlog exactly once, which is the failure this
|
|
118
|
-
* Story exists to stop rather than to perform one last time.
|
|
119
|
-
*
|
|
120
|
-
* Module-local: it reaches `graduate()` on the spec bundle, so the walk is
|
|
121
|
-
* 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.
|
|
122
56
|
*
|
|
123
57
|
* @param {{ finding: { category?: string }, contentMarker: string }} args
|
|
124
58
|
* @returns {string[]}
|
|
@@ -128,8 +62,6 @@ function buildMatchTokens({ finding, contentMarker }) {
|
|
|
128
62
|
}
|
|
129
63
|
|
|
130
64
|
/**
|
|
131
|
-
* Map a routed source to its `meta::*` routing label.
|
|
132
|
-
*
|
|
133
65
|
* @param {string} source
|
|
134
66
|
* @returns {string}
|
|
135
67
|
*/
|
|
@@ -140,18 +72,6 @@ function metaSourceLabel(source) {
|
|
|
140
72
|
}
|
|
141
73
|
|
|
142
74
|
/**
|
|
143
|
-
* The per-graduator behaviour bundle for the retro-proposals walk. Bound to
|
|
144
|
-
* a single source so the constant classifier routes every finding in the
|
|
145
|
-
* bucket to the correct repo (and the label reflects that source).
|
|
146
|
-
*
|
|
147
|
-
* The bundle carries **only** builders. It used to declare a
|
|
148
|
-
* `commentMarker` / `noCommentReason` / `parseFindings` trio purely to satisfy
|
|
149
|
-
* the shared walk's shape — this graduator supplies its findings pre-parsed,
|
|
150
|
-
* so the walk never consulted any of the three. Story #5003 deleted that limb
|
|
151
|
-
* from `graduate()` along with the Epic-era graduator that was its only real
|
|
152
|
-
* consumer, and the placeholder fields went with it: a declared-but-unread
|
|
153
|
-
* field is a standing invitation to write a parser nothing will call.
|
|
154
|
-
*
|
|
155
75
|
* @param {'framework'|'consumer'} source
|
|
156
76
|
* @returns {object}
|
|
157
77
|
*/
|
|
@@ -185,9 +105,6 @@ function makeSpec(source) {
|
|
|
185
105
|
}
|
|
186
106
|
|
|
187
107
|
/**
|
|
188
|
-
* Convert a routed-proposal item into a pre-parsed, path-less finding for
|
|
189
|
-
* the shared `graduate()` walk.
|
|
190
|
-
*
|
|
191
108
|
* @param {object} item — a `RoutedItem` from `composeRoutedProposals`.
|
|
192
109
|
* @param {'framework'|'consumer'} source
|
|
193
110
|
* @param {number} index
|
|
@@ -196,8 +113,6 @@ function makeSpec(source) {
|
|
|
196
113
|
function toFinding(item, source, index) {
|
|
197
114
|
return {
|
|
198
115
|
index,
|
|
199
|
-
// Path-less — the retro proposals are not file-scoped, so the seam
|
|
200
|
-
// skips the path-exists gate rather than probing an empty path.
|
|
201
116
|
path: '',
|
|
202
117
|
severity: 'friction',
|
|
203
118
|
category: typeof item?.category === 'string' ? item.category : '',
|
|
@@ -211,23 +126,15 @@ function toFinding(item, source, index) {
|
|
|
211
126
|
}
|
|
212
127
|
|
|
213
128
|
/**
|
|
214
|
-
*
|
|
215
|
-
* via the graduator pre-parsed-findings seam. Files the `framework` and
|
|
216
|
-
* `consumer` buckets, threading the per-run filing cap across both so the
|
|
217
|
-
* overall cap is respected. Never throws.
|
|
129
|
+
* The per-run filing cap is threaded across both buckets. Never throws.
|
|
218
130
|
*
|
|
219
131
|
* @param {object} opts
|
|
220
132
|
* @param {number} opts.epicId
|
|
221
|
-
* @param {object} opts.provider
|
|
222
|
-
*
|
|
223
|
-
* @param {
|
|
224
|
-
* @param {{owner: string, repo: string}} opts.
|
|
225
|
-
*
|
|
226
|
-
* anchor.
|
|
227
|
-
* @param {{owner: string, repo: string}} [opts.platformRepo] — the shared
|
|
228
|
-
* platform/infra bucket, forwarded to the walk's routing SSOT.
|
|
229
|
-
* @param {{owner: string, repo: string}} [opts.frameworkRepo] — where
|
|
230
|
-
* 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]
|
|
231
138
|
* @param {{ framework?: object[], consumer?: object[] }} [opts.routedProposals]
|
|
232
139
|
* @param {string} [opts.ghPath='gh']
|
|
233
140
|
* @param {Function} [opts.spawnImpl]
|
|
@@ -281,16 +188,10 @@ export async function graduateRetroProposals({
|
|
|
281
188
|
{ source: 'consumer', items: consumer },
|
|
282
189
|
];
|
|
283
190
|
|
|
284
|
-
//
|
|
285
|
-
//
|
|
286
|
-
// (Story #4657), so without it the framework and consumer buckets could each
|
|
287
|
-
// file the same category. The shared set makes the second bucket short-
|
|
288
|
-
// 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.
|
|
289
193
|
const filedMarkers = new Set();
|
|
290
194
|
|
|
291
|
-
// One live-label-set read per routed repo across both buckets (Story #4828):
|
|
292
|
-
// the two buckets file into at most two repos, and every finding in a bucket
|
|
293
|
-
// wants the same `meta::*` name.
|
|
294
195
|
const labelCache = new Map();
|
|
295
196
|
|
|
296
197
|
let remaining = maxFilingsPerRun;
|
|
@@ -304,8 +205,6 @@ export async function graduateRetroProposals({
|
|
|
304
205
|
currentRepo,
|
|
305
206
|
frameworkRepo,
|
|
306
207
|
platformRepo,
|
|
307
|
-
// Each bucket's source is known — a constant classifier routes the
|
|
308
|
-
// whole bucket to the correct repo and stamps the correct label.
|
|
309
208
|
classifier: () => source,
|
|
310
209
|
ghPath,
|
|
311
210
|
spawnImpl,
|
|
@@ -328,10 +227,6 @@ export async function graduateRetroProposals({
|
|
|
328
227
|
}
|
|
329
228
|
|
|
330
229
|
/**
|
|
331
|
-
* Pure: extract the trailing issue number from a `gh issue create` URL
|
|
332
|
-
* (`https://github.com/o/r/issues/123` → 123). Returns `null` when no
|
|
333
|
-
* trailing number is present.
|
|
334
|
-
*
|
|
335
230
|
* @param {string|null|undefined} url
|
|
336
231
|
* @returns {number|null}
|
|
337
232
|
*/
|
|
@@ -342,11 +237,8 @@ export function issueNumberFromUrl(url) {
|
|
|
342
237
|
}
|
|
343
238
|
|
|
344
239
|
/**
|
|
345
|
-
*
|
|
346
|
-
*
|
|
347
|
-
* an issue for that item's `source` + `category`. Items with no matching
|
|
348
|
-
* filing are copied unchanged (the body renderer then falls back to the
|
|
349
|
-
* 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.
|
|
350
242
|
*
|
|
351
243
|
* @param {{ framework?: object[], consumer?: object[], discarded?: object[] } | null | undefined} routedProposals
|
|
352
244
|
* @param {Array<{ source?: string, category?: string, url?: string|null }>} filed
|
|
@@ -391,27 +283,22 @@ export function enrichRoutedProposalsWithFilings(routedProposals, filed) {
|
|
|
391
283
|
}
|
|
392
284
|
|
|
393
285
|
/**
|
|
394
|
-
*
|
|
395
|
-
*
|
|
396
|
-
* enriched with the filed issue references so the body composer renders real
|
|
397
|
-
* issue numbers instead of command stanzas. Never throws — a filing failure
|
|
398
|
-
* degrades to the unenriched proposals (the composer falls back to command
|
|
399
|
-
* 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.
|
|
400
288
|
*
|
|
401
289
|
* @param {object} opts
|
|
402
290
|
* @param {number} opts.epicId
|
|
403
291
|
* @param {object} opts.provider
|
|
404
292
|
* @param {object} [opts.config]
|
|
405
293
|
* @param {string} [opts.frameworkRepo] — `"<owner>/<repo>"` slug.
|
|
406
|
-
* @param {string} [opts.consumerRepo] — `"<owner>/<repo>"` slug
|
|
294
|
+
* @param {string} [opts.consumerRepo] — `"<owner>/<repo>"` slug.
|
|
407
295
|
* @param {{ framework?: object[], consumer?: object[], discarded?: object[] }} [opts.routedProposals]
|
|
408
296
|
* @param {string} [opts.ghPath]
|
|
409
297
|
* @param {Function} [opts.spawnImpl]
|
|
410
298
|
* @param {string} [opts.cwd]
|
|
411
299
|
* @param {number} [opts.maxFilingsPerRun]
|
|
412
300
|
* @param {{info?: Function, warn?: Function}} [opts.logger]
|
|
413
|
-
* @param {Function} [opts.graduateFn]
|
|
414
|
-
* {@link graduateRetroProposals}.
|
|
301
|
+
* @param {Function} [opts.graduateFn]
|
|
415
302
|
* @returns {Promise<{ routedProposals: object|null, summary: { filed: object[], skipped: object[], errors: string[] } }>}
|
|
416
303
|
*/
|
|
417
304
|
export async function fileRetroProposals({
|
|
@@ -433,25 +320,16 @@ export async function fileRetroProposals({
|
|
|
433
320
|
summary: { filed: [], skipped: reason ? [{ reason }] : [], errors: [] },
|
|
434
321
|
});
|
|
435
322
|
|
|
436
|
-
// Toggle OFF → leave proposals unenriched; the composer renders the
|
|
437
|
-
// paste-ready command stanzas.
|
|
438
323
|
if (!isAutoFileEnabled(config)) return passthrough('toggle-disabled');
|
|
439
324
|
|
|
440
325
|
const currentRepo = parseRepoSlug(consumerRepo);
|
|
441
326
|
if (!currentRepo) {
|
|
442
|
-
// No resolvable consumer repo — the retro already disables the consumer
|
|
443
|
-
// pane loudly; skip filing and fall back to command stanzas.
|
|
444
327
|
logger?.warn?.(
|
|
445
328
|
'[retro-proposals-graduator] No resolvable consumer repo — skipping auto-file (falling back to command stanzas).',
|
|
446
329
|
);
|
|
447
330
|
return passthrough('no-current-repo');
|
|
448
331
|
}
|
|
449
|
-
//
|
|
450
|
-
// constant, NEVER to the consumer's own repo: the retired consumer-repo
|
|
451
|
-
// fallback silently auto-filed framework-tagged proposals into the
|
|
452
|
-
// consumer's tracker while the retro body rendered them under "framework
|
|
453
|
-
// repo" (masked in this repo only because consumer === framework here).
|
|
454
|
-
// `github/framework-repo.js` is the SSOT for that rule now.
|
|
332
|
+
// Fall back to the Mandrel constant, never the consumer's own repo.
|
|
455
333
|
const frameworkRepoObj =
|
|
456
334
|
parseRepoSlug(frameworkRepo) ?? parseRepoSlug(DEFAULT_FRAMEWORK_REPO);
|
|
457
335
|
|