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