mandrel 2.60.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.
Files changed (661) hide show
  1. package/.agents/README.md +10 -10
  2. package/.agents/agents/story-worker.md +1 -1
  3. package/.agents/docs/agentrc-reference.json +4 -82
  4. package/.agents/docs/configuration.md +20 -87
  5. package/.agents/docs/workflows.md +1 -1
  6. package/.agents/instructions.md +1 -3
  7. package/.agents/rules/gherkin-standards.md +4 -0
  8. package/.agents/schemas/agentrc.schema.json +11 -486
  9. package/.agents/schemas/story-deliver-terminal.schema.json +10 -0
  10. package/.agents/schemas/validation-evidence.schema.json +2 -1
  11. package/.agents/scripts/README.md +14 -14
  12. package/.agents/scripts/acceptance-eval.js +32 -164
  13. package/.agents/scripts/agents-bootstrap-github.js +27 -129
  14. package/.agents/scripts/apply-quality-bootstrap.js +4 -40
  15. package/.agents/scripts/audit-baselines.js +6 -27
  16. package/.agents/scripts/audit-labels-bootstrap.js +5 -29
  17. package/.agents/scripts/audit-to-stories.js +91 -361
  18. package/.agents/scripts/boot-sweep.js +19 -72
  19. package/.agents/scripts/bootstrap.js +74 -395
  20. package/.agents/scripts/ceremony-derive.js +9 -45
  21. package/.agents/scripts/check-arch-cycles.js +14 -64
  22. package/.agents/scripts/check-baselines.js +8 -48
  23. package/.agents/scripts/check-context-budget.js +46 -172
  24. package/.agents/scripts/check-cyclomatic.js +12 -44
  25. package/.agents/scripts/check-dead-exports.js +13 -64
  26. package/.agents/scripts/check-doc-links.js +38 -186
  27. package/.agents/scripts/check-gherkin-corpus.js +24 -127
  28. package/.agents/scripts/check-test-temp-hygiene.js +28 -169
  29. package/.agents/scripts/coverage-capture.js +32 -99
  30. package/.agents/scripts/deliver-light.js +14 -101
  31. package/.agents/scripts/deliver-recover.js +6 -42
  32. package/.agents/scripts/deliver-run.js +36 -133
  33. package/.agents/scripts/diagnose-friction.js +24 -116
  34. package/.agents/scripts/drain-pending-cleanup.js +1 -1
  35. package/.agents/scripts/evidence-gate.js +23 -85
  36. package/.agents/scripts/file-ci-gap.js +10 -50
  37. package/.agents/scripts/generate-config-docs.js +30 -170
  38. package/.agents/scripts/generate-lens-checklists.js +8 -52
  39. package/.agents/scripts/generate-skills-index.js +14 -112
  40. package/.agents/scripts/generate-workflows-doc.js +10 -70
  41. package/.agents/scripts/git-cleanup.js +2 -34
  42. package/.agents/scripts/lib/Graph.js +24 -81
  43. package/.agents/scripts/lib/ITicketingProvider.js +47 -143
  44. package/.agents/scripts/lib/Logger.js +14 -76
  45. package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
  46. package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
  47. package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
  48. package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
  49. package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
  50. package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
  51. package/.agents/scripts/lib/audit-baselines/read.js +3 -16
  52. package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
  53. package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
  54. package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
  55. package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
  56. package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
  57. package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
  58. package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
  59. package/.agents/scripts/lib/audit-suite/findings.js +12 -52
  60. package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
  61. package/.agents/scripts/lib/audit-suite/index.js +1 -15
  62. package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
  63. package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
  64. package/.agents/scripts/lib/audit-suite/runner.js +13 -43
  65. package/.agents/scripts/lib/audit-suite/selector.js +49 -349
  66. package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
  67. package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
  68. package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
  69. package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
  70. package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
  71. package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
  72. package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
  73. package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
  74. package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
  75. package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
  76. package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
  77. package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
  78. package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
  79. package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
  80. package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
  81. package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
  82. package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
  83. package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
  84. package/.agents/scripts/lib/baseline-loader.js +12 -51
  85. package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
  86. package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
  87. package/.agents/scripts/lib/baselines/components.js +10 -61
  88. package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
  89. package/.agents/scripts/lib/baselines/crap-preview-incremental.js +5 -21
  90. package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
  91. package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
  92. package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
  93. package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
  94. package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
  95. package/.agents/scripts/lib/baselines/envelope.js +13 -129
  96. package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
  97. package/.agents/scripts/lib/baselines/git-base.js +23 -142
  98. package/.agents/scripts/lib/baselines/kernel.js +11 -111
  99. package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
  100. package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
  101. package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
  102. package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
  103. package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
  104. package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
  105. package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
  106. package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
  107. package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
  108. package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
  109. package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
  110. package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
  111. package/.agents/scripts/lib/baselines/path-canon.js +19 -128
  112. package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
  113. package/.agents/scripts/lib/baselines/reader.js +14 -107
  114. package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
  115. package/.agents/scripts/lib/baselines/scope.js +11 -135
  116. package/.agents/scripts/lib/baselines/writer.js +16 -149
  117. package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
  118. package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
  119. package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
  120. package/.agents/scripts/lib/bdd-step-index.js +26 -100
  121. package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
  122. package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
  123. package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
  124. package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
  125. package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
  126. package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
  127. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
  128. package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
  129. package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
  130. package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
  131. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
  132. package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
  133. package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
  134. package/.agents/scripts/lib/bootstrap/summary.js +1 -8
  135. package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
  136. package/.agents/scripts/lib/branch-name-guard.js +4 -23
  137. package/.agents/scripts/lib/changed-files.js +31 -143
  138. package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
  139. package/.agents/scripts/lib/checks/index.js +18 -101
  140. package/.agents/scripts/lib/checks/loop-health.js +11 -53
  141. package/.agents/scripts/lib/checks/state.js +16 -91
  142. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
  143. package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
  144. package/.agents/scripts/lib/child-exec.js +39 -108
  145. package/.agents/scripts/lib/cli/standard-args.js +9 -116
  146. package/.agents/scripts/lib/cli-args.js +31 -146
  147. package/.agents/scripts/lib/cli-usage.js +5 -27
  148. package/.agents/scripts/lib/cli-utils.js +2 -12
  149. package/.agents/scripts/lib/close-validation/commands.js +13 -76
  150. package/.agents/scripts/lib/close-validation/gates.js +92 -331
  151. package/.agents/scripts/lib/close-validation/process.js +121 -151
  152. package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
  153. package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
  154. package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
  155. package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
  156. package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
  157. package/.agents/scripts/lib/close-validation/runner.js +53 -110
  158. package/.agents/scripts/lib/command-header.js +6 -28
  159. package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
  160. package/.agents/scripts/lib/config/baselines.js +3 -14
  161. package/.agents/scripts/lib/config/ci.js +8 -38
  162. package/.agents/scripts/lib/config/commands.js +1 -15
  163. package/.agents/scripts/lib/config/defaults.js +4 -33
  164. package/.agents/scripts/lib/config/delivery-routing.js +6 -35
  165. package/.agents/scripts/lib/config/explain.js +9 -80
  166. package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
  167. package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +2 -30
  168. package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
  169. package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
  170. package/.agents/scripts/lib/config/gates/index.js +2 -17
  171. package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
  172. package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
  173. package/.agents/scripts/lib/config/gates/shared.js +4 -64
  174. package/.agents/scripts/lib/config/github.js +4 -22
  175. package/.agents/scripts/lib/config/limits.js +4 -57
  176. package/.agents/scripts/lib/config/paths.js +2 -21
  177. package/.agents/scripts/lib/config/qa.js +4 -38
  178. package/.agents/scripts/lib/config/quality.js +76 -432
  179. package/.agents/scripts/lib/config/runners.js +12 -56
  180. package/.agents/scripts/lib/config/runtime.js +13 -57
  181. package/.agents/scripts/lib/config/shared.js +2 -16
  182. package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
  183. package/.agents/scripts/lib/config/temp-paths.js +40 -280
  184. package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
  185. package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
  186. package/.agents/scripts/lib/config-resolver.js +10 -52
  187. package/.agents/scripts/lib/config-schema-shared.js +1 -4
  188. package/.agents/scripts/lib/config-settings-schema-delivery.js +12 -294
  189. package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
  190. package/.agents/scripts/lib/config-settings-schema.js +37 -274
  191. package/.agents/scripts/lib/coverage-baseline.js +20 -110
  192. package/.agents/scripts/lib/coverage-capture-fullscope.js +12 -37
  193. package/.agents/scripts/lib/coverage-capture-incremental.js +12 -43
  194. package/.agents/scripts/lib/coverage-capture-usage.js +4 -24
  195. package/.agents/scripts/lib/coverage-capture.js +99 -224
  196. package/.agents/scripts/lib/coverage-utils.js +14 -79
  197. package/.agents/scripts/lib/cpu-pool.js +17 -123
  198. package/.agents/scripts/lib/crap-baseline-join.js +16 -88
  199. package/.agents/scripts/lib/crap-coordinates.js +6 -25
  200. package/.agents/scripts/lib/crap-engine.js +40 -153
  201. package/.agents/scripts/lib/crap-method-identity.js +16 -78
  202. package/.agents/scripts/lib/crap-utils.js +31 -155
  203. package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
  204. package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
  205. package/.agents/scripts/lib/dead-exports-knip.js +18 -56
  206. package/.agents/scripts/lib/dead-exports-mode.js +5 -24
  207. package/.agents/scripts/lib/degraded-mode.js +3 -26
  208. package/.agents/scripts/lib/dependency-parser.js +8 -40
  209. package/.agents/scripts/lib/dependency-version.js +13 -35
  210. package/.agents/scripts/lib/detect-package-manager.js +6 -36
  211. package/.agents/scripts/lib/doc-tiers.js +22 -126
  212. package/.agents/scripts/lib/duplicate-search.js +8 -72
  213. package/.agents/scripts/lib/env-loader.js +5 -27
  214. package/.agents/scripts/lib/error-redactor.js +6 -31
  215. package/.agents/scripts/lib/errors/index.js +2 -22
  216. package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
  217. package/.agents/scripts/lib/escomplex-kernel.js +21 -123
  218. package/.agents/scripts/lib/feedback-loop/graduator-core.js +93 -419
  219. package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
  220. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -151
  221. package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
  222. package/.agents/scripts/lib/findings/classify-finding.js +14 -69
  223. package/.agents/scripts/lib/findings/promote-finding.js +14 -112
  224. package/.agents/scripts/lib/findings/provenance-field.js +11 -52
  225. package/.agents/scripts/lib/findings/route-finding.js +37 -255
  226. package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
  227. package/.agents/scripts/lib/findings/severity.js +18 -104
  228. package/.agents/scripts/lib/format-generated-json.js +12 -44
  229. package/.agents/scripts/lib/full-suite-lock.js +160 -429
  230. package/.agents/scripts/lib/full-suite-queue.js +213 -0
  231. package/.agents/scripts/lib/gates/baseline-store.js +5 -9
  232. package/.agents/scripts/lib/gates/friction.js +1 -3
  233. package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
  234. package/.agents/scripts/lib/gh-exec.js +31 -259
  235. package/.agents/scripts/lib/git/cached-fetch.js +9 -52
  236. package/.agents/scripts/lib/git/sync-from-base.js +15 -107
  237. package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
  238. package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
  239. package/.agents/scripts/lib/git-utils.js +37 -161
  240. package/.agents/scripts/lib/github/framework-repo.js +8 -71
  241. package/.agents/scripts/lib/github-url.js +2 -17
  242. package/.agents/scripts/lib/import-graph.js +11 -38
  243. package/.agents/scripts/lib/install-cmd-parser.js +4 -13
  244. package/.agents/scripts/lib/json-utils.js +3 -18
  245. package/.agents/scripts/lib/label-constants.js +16 -111
  246. package/.agents/scripts/lib/label-taxonomy.js +4 -30
  247. package/.agents/scripts/lib/maintainability-engine.js +12 -80
  248. package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
  249. package/.agents/scripts/lib/maintainability-utils.js +16 -92
  250. package/.agents/scripts/lib/mandrel-catalog.js +12 -70
  251. package/.agents/scripts/lib/notifications/notifier.js +13 -38
  252. package/.agents/scripts/lib/npm-scripts.js +4 -23
  253. package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
  254. package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
  255. package/.agents/scripts/lib/observability/signal-validator.js +5 -37
  256. package/.agents/scripts/lib/observability/signals-writer.js +11 -121
  257. package/.agents/scripts/lib/observability/source-classifier.js +21 -203
  258. package/.agents/scripts/lib/observability/terse-result.js +14 -47
  259. package/.agents/scripts/lib/onboard/init-tail.js +13 -74
  260. package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
  261. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
  262. package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
  263. package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
  264. package/.agents/scripts/lib/orchestration/ceremony-routing.js +5 -75
  265. package/.agents/scripts/lib/orchestration/change-set.js +7 -36
  266. package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
  267. package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
  268. package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
  269. package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
  270. package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
  271. package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
  272. package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
  273. package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
  274. package/.agents/scripts/lib/orchestration/check-state.js +92 -0
  275. package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
  276. package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +42 -189
  277. package/.agents/scripts/lib/orchestration/code-review.js +24 -128
  278. package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
  279. package/.agents/scripts/lib/orchestration/complexity-gate.js +42 -214
  280. package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
  281. package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
  282. package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
  283. package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
  284. package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
  285. package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
  286. package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
  287. package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
  288. package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
  289. package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
  290. package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
  291. package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
  292. package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
  293. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
  294. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
  295. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
  296. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
  297. package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
  298. package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
  299. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
  300. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
  301. package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
  302. package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
  303. package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
  304. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
  305. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
  306. package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
  307. package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
  308. package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
  309. package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
  310. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
  311. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
  312. package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
  313. package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
  314. package/.agents/scripts/lib/orchestration/light-suitability.js +26 -231
  315. package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
  316. package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
  317. package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
  318. package/.agents/scripts/lib/orchestration/plan-context.js +52 -303
  319. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
  320. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
  321. package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
  322. package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
  323. package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
  324. package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
  325. package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +14 -78
  326. package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
  327. package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
  328. package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
  329. package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
  330. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
  331. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
  332. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +49 -248
  333. package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
  334. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +85 -368
  335. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +8 -38
  336. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +30 -190
  337. package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
  338. package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
  339. package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
  340. package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
  341. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
  342. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
  343. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
  344. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
  345. package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
  346. package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
  347. package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
  348. package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
  349. package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
  350. package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
  351. package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
  352. package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
  353. package/.agents/scripts/lib/orchestration/review-depth.js +12 -94
  354. package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
  355. package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
  356. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
  357. package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
  358. package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
  359. package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
  360. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
  361. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
  362. package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
  363. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
  364. package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
  365. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
  366. package/.agents/scripts/lib/orchestration/run-epilogue.js +40 -199
  367. package/.agents/scripts/lib/orchestration/run-scoped-config.js +13 -81
  368. package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
  369. package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
  370. package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
  371. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
  372. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +18 -80
  373. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
  374. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
  375. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
  376. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
  377. package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +9 -50
  378. package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
  379. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
  380. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
  381. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
  382. package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
  383. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
  384. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
  385. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
  386. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
  387. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
  388. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
  389. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
  390. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +110 -290
  391. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
  392. package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
  393. package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
  394. package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
  395. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
  396. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
  397. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
  398. package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
  399. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -201
  400. package/.agents/scripts/lib/orchestration/story-follow-ups.js +43 -245
  401. package/.agents/scripts/lib/orchestration/story-init-envelope.js +4 -23
  402. package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
  403. package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
  404. package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -126
  405. package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
  406. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
  407. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
  408. package/.agents/scripts/lib/orchestration/ticket-validator.js +39 -181
  409. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
  410. package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -250
  411. package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
  412. package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
  413. package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
  414. package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
  415. package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
  416. package/.agents/scripts/lib/path-security.js +3 -6
  417. package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
  418. package/.agents/scripts/lib/preflight-runner.js +13 -69
  419. package/.agents/scripts/lib/process-group.js +143 -0
  420. package/.agents/scripts/lib/project-root.js +2 -8
  421. package/.agents/scripts/lib/provider-factory.js +2 -25
  422. package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
  423. package/.agents/scripts/lib/qa/qa-session.js +15 -69
  424. package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
  425. package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
  426. package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
  427. package/.agents/scripts/lib/reserved-test-ids.js +9 -47
  428. package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
  429. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
  430. package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
  431. package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
  432. package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
  433. package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
  434. package/.agents/scripts/lib/signals/detectors/common.js +12 -38
  435. package/.agents/scripts/lib/signals/index.js +2 -19
  436. package/.agents/scripts/lib/signals/schema.js +14 -109
  437. package/.agents/scripts/lib/signals/write.js +2 -11
  438. package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
  439. package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
  440. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
  441. package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
  442. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
  443. package/.agents/scripts/lib/single-story-sweep.js +14 -97
  444. package/.agents/scripts/lib/skills/parse-skill.js +13 -59
  445. package/.agents/scripts/lib/skills/skills-index.js +8 -29
  446. package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
  447. package/.agents/scripts/lib/source-extensions.js +11 -42
  448. package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
  449. package/.agents/scripts/lib/stdio-flush.js +9 -36
  450. package/.agents/scripts/lib/story-adjacency.js +8 -40
  451. package/.agents/scripts/lib/story-body/body-format-lints.js +22 -83
  452. package/.agents/scripts/lib/story-body/footer-block.js +11 -44
  453. package/.agents/scripts/lib/story-body/story-body.js +83 -358
  454. package/.agents/scripts/lib/temp-retention.js +42 -143
  455. package/.agents/scripts/lib/templates/decomposer-prompts.js +11 -65
  456. package/.agents/scripts/lib/test-env.js +12 -65
  457. package/.agents/scripts/lib/test-run-credit.js +10 -65
  458. package/.agents/scripts/lib/test-runner-contract.js +19 -74
  459. package/.agents/scripts/lib/test-temp.js +38 -184
  460. package/.agents/scripts/lib/test-tiers.js +12 -96
  461. package/.agents/scripts/lib/ticket-body-sections.js +21 -96
  462. package/.agents/scripts/lib/transpile.js +15 -74
  463. package/.agents/scripts/lib/util/concurrent-map.js +6 -25
  464. package/.agents/scripts/lib/util/parse-id-list.js +8 -34
  465. package/.agents/scripts/lib/util/poll-loop.js +8 -28
  466. package/.agents/scripts/lib/util/with-timeout.js +2 -11
  467. package/.agents/scripts/lib/validation-evidence.js +21 -96
  468. package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
  469. package/.agents/scripts/lib/wave-runner/live-probe.js +53 -221
  470. package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
  471. package/.agents/scripts/lib/workers/crap-worker.js +11 -64
  472. package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
  473. package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
  474. package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
  475. package/.agents/scripts/lib/workflow-closure.js +22 -105
  476. package/.agents/scripts/lib/workspace-provisioner.js +16 -54
  477. package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
  478. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
  479. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
  480. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
  481. package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
  482. package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
  483. package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
  484. package/.agents/scripts/lib/worktree-manager.js +15 -40
  485. package/.agents/scripts/lint-issue-body.js +12 -68
  486. package/.agents/scripts/mandrel-update-preflight.js +10 -70
  487. package/.agents/scripts/merge-baseline.js +30 -104
  488. package/.agents/scripts/nav-registry-diff.js +22 -108
  489. package/.agents/scripts/notify.js +12 -69
  490. package/.agents/scripts/plan-context.js +27 -111
  491. package/.agents/scripts/plan-critics.js +12 -66
  492. package/.agents/scripts/plan-persist.js +31 -148
  493. package/.agents/scripts/plan-run-epilogue.js +11 -37
  494. package/.agents/scripts/pr-watch-with-update.js +76 -267
  495. package/.agents/scripts/providers/github/auth.js +3 -8
  496. package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
  497. package/.agents/scripts/providers/github/board-add.js +5 -21
  498. package/.agents/scripts/providers/github/branch-protection.js +11 -43
  499. package/.agents/scripts/providers/github/cache.js +2 -14
  500. package/.agents/scripts/providers/github/comments.js +7 -40
  501. package/.agents/scripts/providers/github/compose.js +3 -19
  502. package/.agents/scripts/providers/github/errors.js +22 -125
  503. package/.agents/scripts/providers/github/issues.js +31 -123
  504. package/.agents/scripts/providers/github/labels.js +24 -124
  505. package/.agents/scripts/providers/github/mappers.js +5 -27
  506. package/.agents/scripts/providers/github/merge-methods.js +3 -22
  507. package/.agents/scripts/providers/github/project-board.js +2 -17
  508. package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
  509. package/.agents/scripts/providers/github/request-helpers.js +5 -32
  510. package/.agents/scripts/providers/github/search-budget.js +9 -39
  511. package/.agents/scripts/providers/github/search-query.js +5 -26
  512. package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
  513. package/.agents/scripts/providers/github/sub-issues.js +7 -36
  514. package/.agents/scripts/providers/github/tickets.js +32 -134
  515. package/.agents/scripts/providers/github.js +18 -59
  516. package/.agents/scripts/prune-plan-run-labels.js +12 -46
  517. package/.agents/scripts/quality-preview.js +35 -220
  518. package/.agents/scripts/resolve-doc-tiers.js +3 -26
  519. package/.agents/scripts/resolve-stories.js +16 -67
  520. package/.agents/scripts/resync-status-column.js +6 -25
  521. package/.agents/scripts/run-tests.js +29 -104
  522. package/.agents/scripts/single-story-close.js +23 -135
  523. package/.agents/scripts/single-story-confirm-merge.js +32 -139
  524. package/.agents/scripts/single-story-init.js +47 -209
  525. package/.agents/scripts/stories-wave-tick.js +102 -472
  526. package/.agents/scripts/sync-agentrc.js +3 -21
  527. package/.agents/scripts/sync-claude-agents.js +9 -55
  528. package/.agents/scripts/sync-claude-commands.js +20 -110
  529. package/.agents/scripts/test-wrapper.js +6 -43
  530. package/.agents/scripts/update-coverage-baseline.js +5 -22
  531. package/.agents/scripts/update-crap-baseline.js +7 -30
  532. package/.agents/scripts/update-duplication-baseline.js +16 -92
  533. package/.agents/scripts/update-maintainability-baseline.js +8 -62
  534. package/.agents/scripts/update-ticket-state.js +1 -7
  535. package/.agents/scripts/validate-skills.js +6 -26
  536. package/.agents/templates/agent-protocol.md +2 -2
  537. package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
  538. package/.agents/workflows/audit-accessibility.md +4 -7
  539. package/.agents/workflows/audit-adrs.md +3 -6
  540. package/.agents/workflows/audit-architecture.md +3 -11
  541. package/.agents/workflows/audit-baselines.md +6 -9
  542. package/.agents/workflows/audit-clean-code.md +8 -12
  543. package/.agents/workflows/audit-data-model.md +3 -7
  544. package/.agents/workflows/audit-dependencies.md +4 -7
  545. package/.agents/workflows/audit-devops.md +4 -8
  546. package/.agents/workflows/audit-documentation.md +1 -4
  547. package/.agents/workflows/audit-mobile.md +4 -7
  548. package/.agents/workflows/audit-navigability.md +3 -6
  549. package/.agents/workflows/audit-performance.md +2 -4
  550. package/.agents/workflows/audit-privacy.md +4 -7
  551. package/.agents/workflows/audit-quality.md +4 -7
  552. package/.agents/workflows/audit-security.md +4 -7
  553. package/.agents/workflows/audit-seo.md +4 -7
  554. package/.agents/workflows/audit-sre.md +4 -7
  555. package/.agents/workflows/audit-to-stories.md +17 -30
  556. package/.agents/workflows/audit-ux-ui.md +4 -7
  557. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  558. package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
  559. package/.agents/workflows/helpers/deliver-digest.md +6 -4
  560. package/.agents/workflows/helpers/deliver-reference.md +114 -188
  561. package/.agents/workflows/helpers/deliver-story-reference.md +189 -533
  562. package/.agents/workflows/helpers/plan-reference.md +86 -139
  563. package/.agents/workflows/helpers/qa-core.md +12 -0
  564. package/.agents/workflows/memory-consolidate.md +1 -1
  565. package/.agents/workflows/qa-assist.md +27 -71
  566. package/.agents/workflows/qa-explore.md +19 -59
  567. package/.agents/workflows/qa-run.md +11 -33
  568. package/README.md +1 -1
  569. package/bin/mandrel.js +5 -46
  570. package/bin/postinstall.js +18 -107
  571. package/docs/CHANGELOG.md +25 -0
  572. package/lib/cli/doctor.js +11 -71
  573. package/lib/cli/init.js +26 -165
  574. package/lib/cli/migrate.js +5 -64
  575. package/lib/cli/registry.js +84 -467
  576. package/lib/cli/sync-agents.js +4 -64
  577. package/lib/cli/sync-commands.js +11 -64
  578. package/lib/cli/sync.js +34 -213
  579. package/lib/cli/uninstall.js +40 -219
  580. package/lib/cli/update.js +105 -661
  581. package/lib/cli/version-check.js +8 -72
  582. package/lib/cli/version-helpers.js +14 -87
  583. package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
  584. package/lib/migrations/index.js +15 -92
  585. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
  586. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
  587. package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
  588. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
  589. package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
  590. package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
  591. package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
  592. package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
  593. package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +2 -21
  594. package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
  595. package/package.json +16 -14
  596. package/.agents/docs/SDLC.md +0 -590
  597. package/.agents/docs/quality-gates.md +0 -1183
  598. package/.agents/rules/known-tooling-behavior.md +0 -200
  599. package/.agents/rules/orchestration-error-handling.md +0 -61
  600. package/.agents/rules/test-seams.md +0 -59
  601. package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
  602. package/.agents/schemas/baselines/lint.schema.json +0 -47
  603. package/.agents/scripts/check-action-pinning.js +0 -260
  604. package/.agents/scripts/check-audit-attribution.js +0 -302
  605. package/.agents/scripts/check-baseline-drift.js +0 -211
  606. package/.agents/scripts/check-baseline-scope.js +0 -362
  607. package/.agents/scripts/check-generated-validator.js +0 -202
  608. package/.agents/scripts/check-knip-entries.js +0 -159
  609. package/.agents/scripts/check-lifecycle-lint.js +0 -294
  610. package/.agents/scripts/check-pinned-override-notes.js +0 -102
  611. package/.agents/scripts/check-schema-references.js +0 -368
  612. package/.agents/scripts/check-test-portability.js +0 -512
  613. package/.agents/scripts/check-workflow-citations.js +0 -218
  614. package/.agents/scripts/check-workflow-cli-lint.js +0 -299
  615. package/.agents/scripts/check-workflow-timeouts.js +0 -291
  616. package/.agents/scripts/install-matrix-assert.js +0 -326
  617. package/.agents/scripts/lib/audit-advisories.js +0 -195
  618. package/.agents/scripts/lib/audit-attribution.js +0 -134
  619. package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
  620. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
  621. package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
  622. package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
  623. package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
  624. package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
  625. package/.agents/scripts/lib/c8-cli-path.js +0 -21
  626. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
  627. package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
  628. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
  629. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
  630. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
  631. package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
  632. package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
  633. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
  634. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
  635. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
  636. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
  637. package/.agents/scripts/lib/fs-walk.js +0 -52
  638. package/.agents/scripts/lib/knip-config-resolver.js +0 -181
  639. package/.agents/scripts/lib/knip-entry-sync.js +0 -452
  640. package/.agents/scripts/lib/pinned-override-notes.js +0 -88
  641. package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
  642. package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
  643. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
  644. package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
  645. package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
  646. package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
  647. package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
  648. package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
  649. package/.agents/scripts/lib/test-isolate/runner.js +0 -483
  650. package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
  651. package/.agents/scripts/lib/test-profile/render-report.js +0 -45
  652. package/.agents/scripts/lint-label-vocabulary.js +0 -214
  653. package/.agents/scripts/post-structured-comment.js +0 -127
  654. package/.agents/scripts/provision-git-hooks.js +0 -85
  655. package/.agents/scripts/prune-baseline-orphans.js +0 -181
  656. package/.agents/scripts/run-coverage.js +0 -197
  657. package/.agents/scripts/run-lint.js +0 -133
  658. package/.agents/scripts/run-test-profile.js +0 -129
  659. package/.agents/scripts/run-verify.js +0 -125
  660. package/.agents/scripts/test-isolate.js +0 -55
  661. package/.agents/scripts/update-dead-exports-baseline.js +0 -321
@@ -1,27 +1,7 @@
1
1
  /**
2
- * prior-feedback-fetcher.js — gh-CLI-backed fetcher for open meta feedback
3
- * issues that feed the `/mandrel-plan` Phase 0 planner context.
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
- * Pure: derive recurring-defect-class signals from a list of normalized
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 — path to the gh binary (e.g. "gh")
105
- * @param {string[]} opts.args — positional + flag arguments
106
- * @param {Function} [opts.spawnImpl] — test seam; defaults to node:child_process spawn
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
- * Build a human-readable error message for a failed gh invocation.
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
- * Normalize a single issue record returned by `gh issue list --json`. We keep
135
- * the shape narrow on purpose: planner context payloads ride on top of an
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
- * Flatten `gh issue list --json labels` into plain names. `gh` returns label
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
- * Append every not-yet-seen issue to one bucket, marking it seen.
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
- * Fetch the union of open issues carrying `meta::framework-gap`,
252
- * `meta::consumer-improvement` or `meta::platform-gap` and split them into
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 — GitHub owner (e.g. "dsj1984")
264
- * @param {string} opts.repo — GitHub repo (e.g. "mandrel")
265
- * @param {string} [opts.ghPath="gh"] — path to the gh binary
266
- * @param {number} [opts.limit=50] — per-label `--limit` passed to gh
267
- * @param {Function} [opts.spawnImpl] — test seam for node:child_process spawn
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
- * retro-proposals-graduator.js — Auto-graduate the retro's actionable
3
- * routed proposals into GitHub follow-up issues. Story #4418 / Epic #4406.
4
- *
5
- * This is the loop's terminal junction: the retro composer
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
- * The content fingerprint identifying one retro proposal.
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} 16-char lowercase hex digest.
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
- * Build the content-hash idempotency marker embedded in filed follow-up
80
- * bodies. An HTML comment so it survives markdown rendering without leaking
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
- * The `epicId` parameter is retained because `graduate()` owns the calling
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
- * Body substrings that identify a follow-up already filed for this finding,
111
- * handed to the graduator's strongly-consistent read (Story #4837).
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
- * File the retro's actionable routed proposals as GitHub follow-up issues
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 — ticketing provider (`postComment`, for the
224
- * cross-repo-deferred persistence).
225
- * @param {object} [opts.config] — resolved agentrc.
226
- * @param {{owner: string, repo: string}} opts.currentRepo — the repo the
227
- * retro is running inside (the consumer's own repo); the cross-repo guard's
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
- // One memo of content markers filed so far, SHARED across both buckets: the
287
- // two scopes mint an identical marker for the same category by construction
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
- * Pure: return a NEW `routedProposals` whose `framework` / `consumer` items
348
- * each carry a `filedIssue` field ({ url, number }) when the graduator filed
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
- * Orchestrating seam invoked by the retro post-and-mirror phase: gate the
397
- * toggle, file the routed proposals, and return the routed proposals
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 (currentRepo).
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] — test seam; defaults to
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
- // An unconfigured framework slug falls back to the Mandrel mirror
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