mandrel 2.60.0 → 2.62.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (662) 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/merge-queue.js +158 -0
  318. package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
  319. package/.agents/scripts/lib/orchestration/plan-context.js +52 -303
  320. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
  321. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
  322. package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
  323. package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
  324. package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
  325. package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
  326. package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +14 -78
  327. package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
  328. package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
  329. package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
  330. package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
  331. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
  332. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
  333. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +49 -248
  334. package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
  335. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +85 -368
  336. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +8 -38
  337. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +30 -190
  338. package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
  339. package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
  340. package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
  341. package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
  342. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
  343. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
  344. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
  345. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
  346. package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
  347. package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
  348. package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
  349. package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
  350. package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
  351. package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
  352. package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
  353. package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
  354. package/.agents/scripts/lib/orchestration/review-depth.js +12 -94
  355. package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
  356. package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
  357. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
  358. package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
  359. package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
  360. package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
  361. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
  362. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
  363. package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
  364. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
  365. package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
  366. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
  367. package/.agents/scripts/lib/orchestration/run-epilogue.js +40 -199
  368. package/.agents/scripts/lib/orchestration/run-scoped-config.js +13 -81
  369. package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
  370. package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
  371. package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
  372. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +190 -280
  373. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +18 -80
  374. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
  375. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
  376. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +183 -485
  377. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
  378. package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +9 -50
  379. package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
  380. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
  381. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
  382. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
  383. package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
  384. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
  385. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
  386. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
  387. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
  388. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
  389. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
  390. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
  391. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +110 -290
  392. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
  393. package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
  394. package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
  395. package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
  396. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
  397. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
  398. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
  399. package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
  400. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -201
  401. package/.agents/scripts/lib/orchestration/story-follow-ups.js +43 -245
  402. package/.agents/scripts/lib/orchestration/story-init-envelope.js +4 -23
  403. package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
  404. package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
  405. package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -126
  406. package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
  407. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
  408. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
  409. package/.agents/scripts/lib/orchestration/ticket-validator.js +39 -181
  410. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
  411. package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -250
  412. package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
  413. package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
  414. package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
  415. package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
  416. package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
  417. package/.agents/scripts/lib/path-security.js +3 -6
  418. package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
  419. package/.agents/scripts/lib/preflight-runner.js +13 -69
  420. package/.agents/scripts/lib/process-group.js +143 -0
  421. package/.agents/scripts/lib/project-root.js +2 -8
  422. package/.agents/scripts/lib/provider-factory.js +2 -25
  423. package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
  424. package/.agents/scripts/lib/qa/qa-session.js +15 -69
  425. package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
  426. package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
  427. package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
  428. package/.agents/scripts/lib/reserved-test-ids.js +9 -47
  429. package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
  430. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
  431. package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
  432. package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
  433. package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
  434. package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
  435. package/.agents/scripts/lib/signals/detectors/common.js +12 -38
  436. package/.agents/scripts/lib/signals/index.js +2 -19
  437. package/.agents/scripts/lib/signals/schema.js +14 -109
  438. package/.agents/scripts/lib/signals/write.js +2 -11
  439. package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
  440. package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
  441. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
  442. package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
  443. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
  444. package/.agents/scripts/lib/single-story-sweep.js +14 -97
  445. package/.agents/scripts/lib/skills/parse-skill.js +13 -59
  446. package/.agents/scripts/lib/skills/skills-index.js +8 -29
  447. package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
  448. package/.agents/scripts/lib/source-extensions.js +11 -42
  449. package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
  450. package/.agents/scripts/lib/stdio-flush.js +9 -36
  451. package/.agents/scripts/lib/story-adjacency.js +8 -40
  452. package/.agents/scripts/lib/story-body/body-format-lints.js +22 -83
  453. package/.agents/scripts/lib/story-body/footer-block.js +11 -44
  454. package/.agents/scripts/lib/story-body/story-body.js +83 -358
  455. package/.agents/scripts/lib/temp-retention.js +42 -143
  456. package/.agents/scripts/lib/templates/decomposer-prompts.js +11 -65
  457. package/.agents/scripts/lib/test-env.js +12 -65
  458. package/.agents/scripts/lib/test-run-credit.js +10 -65
  459. package/.agents/scripts/lib/test-runner-contract.js +19 -74
  460. package/.agents/scripts/lib/test-temp.js +38 -184
  461. package/.agents/scripts/lib/test-tiers.js +12 -96
  462. package/.agents/scripts/lib/ticket-body-sections.js +21 -96
  463. package/.agents/scripts/lib/transpile.js +15 -74
  464. package/.agents/scripts/lib/util/concurrent-map.js +6 -25
  465. package/.agents/scripts/lib/util/parse-id-list.js +8 -34
  466. package/.agents/scripts/lib/util/poll-loop.js +8 -28
  467. package/.agents/scripts/lib/util/with-timeout.js +2 -11
  468. package/.agents/scripts/lib/validation-evidence.js +21 -96
  469. package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
  470. package/.agents/scripts/lib/wave-runner/live-probe.js +53 -221
  471. package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
  472. package/.agents/scripts/lib/workers/crap-worker.js +11 -64
  473. package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
  474. package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
  475. package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
  476. package/.agents/scripts/lib/workflow-closure.js +22 -105
  477. package/.agents/scripts/lib/workspace-provisioner.js +16 -54
  478. package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
  479. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
  480. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
  481. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
  482. package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
  483. package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
  484. package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
  485. package/.agents/scripts/lib/worktree-manager.js +15 -40
  486. package/.agents/scripts/lint-issue-body.js +12 -68
  487. package/.agents/scripts/mandrel-update-preflight.js +10 -70
  488. package/.agents/scripts/merge-baseline.js +30 -104
  489. package/.agents/scripts/nav-registry-diff.js +22 -108
  490. package/.agents/scripts/notify.js +12 -69
  491. package/.agents/scripts/plan-context.js +27 -111
  492. package/.agents/scripts/plan-critics.js +12 -66
  493. package/.agents/scripts/plan-persist.js +31 -148
  494. package/.agents/scripts/plan-run-epilogue.js +11 -37
  495. package/.agents/scripts/pr-watch-with-update.js +76 -267
  496. package/.agents/scripts/providers/github/auth.js +3 -8
  497. package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
  498. package/.agents/scripts/providers/github/board-add.js +5 -21
  499. package/.agents/scripts/providers/github/branch-protection.js +11 -43
  500. package/.agents/scripts/providers/github/cache.js +2 -14
  501. package/.agents/scripts/providers/github/comments.js +7 -40
  502. package/.agents/scripts/providers/github/compose.js +3 -19
  503. package/.agents/scripts/providers/github/errors.js +22 -125
  504. package/.agents/scripts/providers/github/issues.js +31 -123
  505. package/.agents/scripts/providers/github/labels.js +24 -124
  506. package/.agents/scripts/providers/github/mappers.js +5 -27
  507. package/.agents/scripts/providers/github/merge-methods.js +3 -22
  508. package/.agents/scripts/providers/github/project-board.js +2 -17
  509. package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
  510. package/.agents/scripts/providers/github/request-helpers.js +5 -32
  511. package/.agents/scripts/providers/github/search-budget.js +9 -39
  512. package/.agents/scripts/providers/github/search-query.js +5 -26
  513. package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
  514. package/.agents/scripts/providers/github/sub-issues.js +7 -36
  515. package/.agents/scripts/providers/github/tickets.js +32 -134
  516. package/.agents/scripts/providers/github.js +18 -59
  517. package/.agents/scripts/prune-plan-run-labels.js +12 -46
  518. package/.agents/scripts/quality-preview.js +35 -220
  519. package/.agents/scripts/resolve-doc-tiers.js +3 -26
  520. package/.agents/scripts/resolve-stories.js +16 -67
  521. package/.agents/scripts/resync-status-column.js +6 -25
  522. package/.agents/scripts/run-tests.js +29 -104
  523. package/.agents/scripts/single-story-close.js +23 -135
  524. package/.agents/scripts/single-story-confirm-merge.js +32 -139
  525. package/.agents/scripts/single-story-init.js +47 -209
  526. package/.agents/scripts/stories-wave-tick.js +102 -472
  527. package/.agents/scripts/sync-agentrc.js +3 -21
  528. package/.agents/scripts/sync-claude-agents.js +9 -55
  529. package/.agents/scripts/sync-claude-commands.js +20 -110
  530. package/.agents/scripts/test-wrapper.js +6 -43
  531. package/.agents/scripts/update-coverage-baseline.js +5 -22
  532. package/.agents/scripts/update-crap-baseline.js +7 -30
  533. package/.agents/scripts/update-duplication-baseline.js +16 -92
  534. package/.agents/scripts/update-maintainability-baseline.js +8 -62
  535. package/.agents/scripts/update-ticket-state.js +1 -7
  536. package/.agents/scripts/validate-skills.js +6 -26
  537. package/.agents/templates/agent-protocol.md +2 -2
  538. package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
  539. package/.agents/workflows/audit-accessibility.md +4 -7
  540. package/.agents/workflows/audit-adrs.md +3 -6
  541. package/.agents/workflows/audit-architecture.md +3 -11
  542. package/.agents/workflows/audit-baselines.md +6 -9
  543. package/.agents/workflows/audit-clean-code.md +8 -12
  544. package/.agents/workflows/audit-data-model.md +3 -7
  545. package/.agents/workflows/audit-dependencies.md +4 -7
  546. package/.agents/workflows/audit-devops.md +4 -8
  547. package/.agents/workflows/audit-documentation.md +1 -4
  548. package/.agents/workflows/audit-mobile.md +4 -7
  549. package/.agents/workflows/audit-navigability.md +3 -6
  550. package/.agents/workflows/audit-performance.md +2 -4
  551. package/.agents/workflows/audit-privacy.md +4 -7
  552. package/.agents/workflows/audit-quality.md +4 -7
  553. package/.agents/workflows/audit-security.md +4 -7
  554. package/.agents/workflows/audit-seo.md +4 -7
  555. package/.agents/workflows/audit-sre.md +4 -7
  556. package/.agents/workflows/audit-to-stories.md +17 -30
  557. package/.agents/workflows/audit-ux-ui.md +4 -7
  558. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  559. package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
  560. package/.agents/workflows/helpers/deliver-digest.md +6 -4
  561. package/.agents/workflows/helpers/deliver-reference.md +114 -188
  562. package/.agents/workflows/helpers/deliver-story-reference.md +189 -533
  563. package/.agents/workflows/helpers/plan-reference.md +86 -139
  564. package/.agents/workflows/helpers/qa-core.md +12 -0
  565. package/.agents/workflows/memory-consolidate.md +1 -1
  566. package/.agents/workflows/qa-assist.md +27 -71
  567. package/.agents/workflows/qa-explore.md +19 -59
  568. package/.agents/workflows/qa-run.md +11 -33
  569. package/README.md +1 -1
  570. package/bin/mandrel.js +5 -46
  571. package/bin/postinstall.js +18 -107
  572. package/docs/CHANGELOG.md +32 -0
  573. package/lib/cli/doctor.js +11 -71
  574. package/lib/cli/init.js +26 -165
  575. package/lib/cli/migrate.js +5 -64
  576. package/lib/cli/registry.js +84 -467
  577. package/lib/cli/sync-agents.js +4 -64
  578. package/lib/cli/sync-commands.js +11 -64
  579. package/lib/cli/sync.js +34 -213
  580. package/lib/cli/uninstall.js +40 -219
  581. package/lib/cli/update.js +105 -661
  582. package/lib/cli/version-check.js +8 -72
  583. package/lib/cli/version-helpers.js +14 -87
  584. package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
  585. package/lib/migrations/index.js +15 -92
  586. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
  587. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
  588. package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
  589. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
  590. package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
  591. package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
  592. package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
  593. package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
  594. package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +2 -21
  595. package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
  596. package/package.json +16 -14
  597. package/.agents/docs/SDLC.md +0 -590
  598. package/.agents/docs/quality-gates.md +0 -1183
  599. package/.agents/rules/known-tooling-behavior.md +0 -200
  600. package/.agents/rules/orchestration-error-handling.md +0 -61
  601. package/.agents/rules/test-seams.md +0 -59
  602. package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
  603. package/.agents/schemas/baselines/lint.schema.json +0 -47
  604. package/.agents/scripts/check-action-pinning.js +0 -260
  605. package/.agents/scripts/check-audit-attribution.js +0 -302
  606. package/.agents/scripts/check-baseline-drift.js +0 -211
  607. package/.agents/scripts/check-baseline-scope.js +0 -362
  608. package/.agents/scripts/check-generated-validator.js +0 -202
  609. package/.agents/scripts/check-knip-entries.js +0 -159
  610. package/.agents/scripts/check-lifecycle-lint.js +0 -294
  611. package/.agents/scripts/check-pinned-override-notes.js +0 -102
  612. package/.agents/scripts/check-schema-references.js +0 -368
  613. package/.agents/scripts/check-test-portability.js +0 -512
  614. package/.agents/scripts/check-workflow-citations.js +0 -218
  615. package/.agents/scripts/check-workflow-cli-lint.js +0 -299
  616. package/.agents/scripts/check-workflow-timeouts.js +0 -291
  617. package/.agents/scripts/install-matrix-assert.js +0 -326
  618. package/.agents/scripts/lib/audit-advisories.js +0 -195
  619. package/.agents/scripts/lib/audit-attribution.js +0 -134
  620. package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
  621. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
  622. package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
  623. package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
  624. package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
  625. package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
  626. package/.agents/scripts/lib/c8-cli-path.js +0 -21
  627. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
  628. package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
  629. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
  630. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
  631. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
  632. package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
  633. package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
  634. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
  635. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
  636. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
  637. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
  638. package/.agents/scripts/lib/fs-walk.js +0 -52
  639. package/.agents/scripts/lib/knip-config-resolver.js +0 -181
  640. package/.agents/scripts/lib/knip-entry-sync.js +0 -452
  641. package/.agents/scripts/lib/pinned-override-notes.js +0 -88
  642. package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
  643. package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
  644. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
  645. package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
  646. package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
  647. package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
  648. package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
  649. package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
  650. package/.agents/scripts/lib/test-isolate/runner.js +0 -483
  651. package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
  652. package/.agents/scripts/lib/test-profile/render-report.js +0 -45
  653. package/.agents/scripts/lint-label-vocabulary.js +0 -214
  654. package/.agents/scripts/post-structured-comment.js +0 -127
  655. package/.agents/scripts/provision-git-hooks.js +0 -85
  656. package/.agents/scripts/prune-baseline-orphans.js +0 -181
  657. package/.agents/scripts/run-coverage.js +0 -197
  658. package/.agents/scripts/run-lint.js +0 -133
  659. package/.agents/scripts/run-test-profile.js +0 -129
  660. package/.agents/scripts/run-verify.js +0 -125
  661. package/.agents/scripts/test-isolate.js +0 -55
  662. package/.agents/scripts/update-dead-exports-baseline.js +0 -321
@@ -1,27 +1,7 @@
1
1
  /**
2
- * GitHub Provider — TicketGateway.
3
- *
4
- * Owns ticket CRUD against `/repos/{owner}/{repo}/issues` plus the
5
- * per-instance ticket cache that the dispatcher / reconciler / cascade
6
- * share. Extracted from `../github.js` in Story #2462 / Task #2482 as the
7
- * first slice of the seven-gateway split.
8
- *
9
- * The gateway is constructed with a `{ gh, owner, repo, hooks }` object so
10
- * cross-gateway concerns can be threaded in without bloating the constructor
11
- * signature. The `addItemToProject` hook (from the projects-v2 shim) adds a
12
- * newly-created issue to the configured Project V2.
13
- *
14
- * Story #4545 deleted `createTicket` and its `composeStoryBody` helper — the
15
- * Epic-hierarchy write surface. It composed the exact `Epic: #N` footer that
16
- * `pr-base-guard.js` hard-refuses at delivery, so the framework retained the
17
- * ability to generate work it would then reject; it had no production caller
18
- * (`/mandrel-plan` persists through the bare `createIssue` below).
19
- *
20
- * Public surface: `GitHubProvider.createIssue / getTicket /
21
- * getTickets / updateTicket / getTicketDependencies / primeTicketCache /
22
- * invalidateTicket` all delegate to the same-named methods on this class.
23
- *
24
- * @see Story #2462 — Split GitHubProvider god class into seven composed gateways.
2
+ * GitHub Provider — TicketGateway: issue CRUD plus the per-instance ticket
3
+ * cache shared across gateways. `hooks` carries cross-gateway concerns
4
+ * (Project V2 board add).
25
5
  */
26
6
 
27
7
  import { parseBlockedBy, parseBlocks } from '../../lib/dependency-parser.js';
@@ -37,10 +17,8 @@ import {
37
17
  } from './request-helpers.js';
38
18
 
39
19
  /**
40
- * GitHub Search API hard ceiling is 1000 results per query; at
41
- * `per_page=100` that is 10 pages. An Epic never has anywhere near 1000
42
- * children, so hitting this cap means the query is degenerate — we stop
43
- * rather than throw (the regex post-filter keeps results correct).
20
+ * Search API ceiling: 1000 results = 10 pages of 100. Hitting it means a
21
+ * degenerate query, so stop rather than throw.
44
22
  */
45
23
  const SEARCH_PAGE_CAP = 10;
46
24
 
@@ -64,28 +42,17 @@ export class TicketGateway {
64
42
  this._hooks = hooks;
65
43
  this._cache = cache ?? createInlineTicketCache();
66
44
  /**
67
- * Per-instance memo of `getTickets(epicId, filters)` results (Story
68
- * #3988). Planning-era healing fetched the same child list twice
69
- * per planning pass; without this memo each fetch re-pays the full
70
- * search/list round-trip. Invalidated on every write surface.
45
+ * Memo of `getTickets(epicId, filters)`; cleared on every write.
71
46
  * @type {Map<string, object[]>}
72
47
  */
73
48
  this._listCache = new Map();
74
49
  }
75
50
 
76
- /**
77
- * Expose the cache so the parent provider's other surfaces (sub-issues,
78
- * comments) can keep invalidating on mutations. The parent passes the
79
- * same cache instance into every gateway constructor.
80
- */
51
+ /** Shared with sibling gateways so their mutations can invalidate it. */
81
52
  get cache() {
82
53
  return this._cache;
83
54
  }
84
55
 
85
- // ---------------------------------------------------------------------------
86
- // Read surface
87
- // ---------------------------------------------------------------------------
88
-
89
56
  /**
90
57
  * @field-manifest /repos/{owner}/{repo}/issues/{n}: number, id, node_id,
91
58
  * title, body, labels, assignees, state
@@ -113,10 +80,8 @@ export class TicketGateway {
113
80
  }
114
81
 
115
82
  /**
116
- * Run one Search API query (`/search/issues`) to completion, returning
117
- * the raw issue items. Search responses are `{ total_count, items }`
118
- * envelopes rather than bare arrays, so this paginates manually instead
119
- * of going through `paginateRest`.
83
+ * Paginated manually: search responses are `{ total_count, items }`
84
+ * envelopes, not the bare arrays `paginateRest` expects.
120
85
  */
121
86
  async _searchIssues(query) {
122
87
  const items = [];
@@ -143,13 +108,9 @@ export class TicketGateway {
143
108
  }
144
109
 
145
110
  /**
146
- * Server-side narrowed child lookup (Story #3988): two Search API
147
- * queries — `"Epic: #N" in:body` and `"parent: #N" in:body` — deduped
148
- * by issue number. Replaces the repo-wide `state=all` pagination that
149
- * cost ~1 spawn per 100 repo issues and hard-failed past the
150
- * `paginateRest` page cap. Search tokenization can over-match (e.g.
151
- * `#10` vs `#100`), so callers MUST keep the word-boundary regex
152
- * post-filter.
111
+ * Two body searches (the `Epic:` and `parent:` footers) deduped by number.
112
+ * Search tokenization over-matches (issue 10 hits issue 100), so callers
113
+ * MUST keep the word-boundary regex post-filter.
153
114
  */
154
115
  async _searchEpicChildren(epicId, filters) {
155
116
  const qualifiers = [`repo:${this.owner}/${this.repo}`, 'is:issue'];
@@ -172,10 +133,7 @@ export class TicketGateway {
172
133
  return Array.from(byNumber.values());
173
134
  }
174
135
 
175
- /**
176
- * Repo-wide listing fallback — the pre-#3988 shape. Only used when the
177
- * Search API path fails (search outage, search-specific rate limit).
178
- */
136
+ /** Repo-wide fallback for when the Search API fails. */
179
137
  /* node:coverage ignore next */
180
138
  async _listAllIssues(filters) {
181
139
  const params = new URLSearchParams({ state: filters.state ?? 'all' });
@@ -206,7 +164,7 @@ export class TicketGateway {
206
164
  issues = await this._listAllIssues(filters);
207
165
  }
208
166
 
209
- // Word-boundary regex prevents #1 matching #10, #100, etc.
167
+ // Word boundary: epic 1 must not match 10 or 100.
210
168
  const epicRefRe = new RegExp(
211
169
  `(?:Epic:\\s*#${epicId}|parent:\\s*#${epicId})(?:\\s|$|[,.)\\]])`,
212
170
  );
@@ -231,11 +189,6 @@ export class TicketGateway {
231
189
  };
232
190
  }
233
191
 
234
- // ---------------------------------------------------------------------------
235
- // Cache primers — exposed so the parent provider keeps a stable surface for
236
- // `primeTicketCache` / `invalidateTicket` callers.
237
- // ---------------------------------------------------------------------------
238
-
239
192
  primeTicketCache(tickets) {
240
193
  this._cache.primeMany(tickets);
241
194
  }
@@ -245,35 +198,12 @@ export class TicketGateway {
245
198
  this._listCache.clear();
246
199
  }
247
200
 
248
- // ---------------------------------------------------------------------------
249
- // Write surface
250
- // ---------------------------------------------------------------------------
251
-
252
201
  /**
253
- * Create a **bare** issue — no footer composition and no sub-issue link.
254
- * Since Story #4545 this is the *only* create path: `/mandrel-plan` persist and the
255
- * `/mandrel-plan` Phase 4 Epic open (`openEpicFromOnePager`'s `createIssue` port)
256
- * both route through it.
257
- *
258
- * After the POST, the new issue is added to the configured Project V2
259
- * board via the shared `addIssueToBoard` helper (Story #3822) —
260
- * idempotent, non-fatal, and a no-op when no project number resolves —
261
- * so board membership never depends on GitHub's "Auto-add to project"
262
- * built-in workflow.
263
- *
264
- * The POST is wrapped in `withTransientRetry` (Story #4541) so it absorbs
265
- * the same 502/429/ECONNRESET blips the read surfaces already do. It used
266
- * to post bare, which made a single transient failure at story *k* of *N*
267
- * abort `/mandrel-plan` persist with `1..k-1` already live on the tracker.
268
- *
269
- * Retry alone is not sufficient for that failure mode — a POST whose
270
- * response is lost would double-create on the retry. Story #5112 closed
271
- * that: `findExisting` is consulted **before every retry POST**, and a hit
272
- * is adopted instead of re-created, so a response-lost first attempt files
273
- * exactly one issue. `/mandrel-plan` persist supplies the plan-fingerprint lookup
274
- * its resume path already uses (`plan-persist`'s `createStoryIssues`);
275
- * callers with no content identity omit it and keep the pre-#5112
276
- * retry-only behaviour.
202
+ * Create a bare issue (the only create path) and add it to the Project V2
203
+ * board (non-fatal, no-op without a project). The POST retries transient
204
+ * failures; because a lost response would double-create, `findExisting` is
205
+ * consulted before every retry POST and a hit is adopted. Callers with no
206
+ * content identity omit it and get retry-only behaviour.
277
207
  *
278
208
  * @field-manifest POST /repos/{owner}/{repo}/issues: number, id, node_id,
279
209
  * html_url
@@ -322,8 +252,6 @@ export class TicketGateway {
322
252
  }
323
253
 
324
254
  /**
325
- * POST one issue and parse the created resource out of the response.
326
- *
327
255
  * @param {{ title: string, body: string, labels: string[] }} payload
328
256
  * @returns {Promise<object>}
329
257
  */
@@ -338,9 +266,8 @@ export class TicketGateway {
338
266
  }
339
267
 
340
268
  /**
341
- * Resolve the ambiguity a lost response leaves behind: did attempt 1 land?
342
- * `ECONNRESET` after the server committed the create looks exactly like
343
- * `ECONNRESET` before it, so the only authority is the server's own state.
269
+ * Did a prior attempt land? `ECONNRESET` looks the same before and after
270
+ * the server commits, so only the server's state can say.
344
271
  *
345
272
  * @param {(() => Promise<object|null>)|null} findExisting
346
273
  * @returns {Promise<object|null>} the already-created issue, or `null`.
@@ -350,10 +277,6 @@ export class TicketGateway {
350
277
  }
351
278
 
352
279
  /**
353
- * The idempotent half of {@link TicketGateway#createIssue}: POST once, and
354
- * on every subsequent attempt look for an already-created issue *before*
355
- * posting again, so a retry adopts rather than duplicates.
356
- *
357
280
  * @param {{ title: string, body: string, labels: string[], findExisting: (() => Promise<object|null>)|null }} args
358
281
  * @returns {Promise<{ issue: object, adopted: boolean }>}
359
282
  */
@@ -374,10 +297,8 @@ export class TicketGateway {
374
297
  }
375
298
 
376
299
  /**
377
- * Append logins to an issue's assignee set via GitHub's additive assignees
378
- * endpoint. No read-before-write and no replace semantics, so it cannot
379
- * evict an assignee another run added between our read and our write. A
380
- * non-array or empty list is a no-op.
300
+ * Additive assignee write: cannot evict an assignee another run added
301
+ * concurrently. Empty/absent list is a no-op.
381
302
  *
382
303
  * @param {number} ticketId
383
304
  * @param {string[]|undefined} logins
@@ -397,21 +318,10 @@ export class TicketGateway {
397
318
  }
398
319
 
399
320
  /**
400
- * Add/remove labels on an issue. When the only mutation is "add", uses the
401
- * additive labels endpoint (POST /issues/{n}/labels) for atomicity and to
402
- * avoid a read-before-write. When other PATCH fields are present, or when
403
- * removing labels, computes the final label set and returns it to the
404
- * caller for inclusion in the PATCH.
405
- *
406
- * The additive POST goes through `withTransientRetry` (Story #4961) on the
407
- * same policy as every other call in this file. Story #4952 raised the
408
- * `/mandrel-plan` write loops that reach this endpoint — the `agent::ready` flips
409
- * and the checkpoint fan-out — off serial, which is precisely what makes
410
- * GitHub's secondary rate limit likelier; `gh-exec` already classifies that
411
- * as transient, so the only thing missing was a backoff behind it.
412
- * Retry does not change what the caller observes on a genuine failure: an
413
- * exhausted or non-transient error still throws, so `markStoriesReady`
414
- * still collects it into the complete failure set.
321
+ * Add-only with no other PATCH fields uses the atomic additive labels POST
322
+ * (no read-before-write); otherwise returns the merged label set for the
323
+ * caller's PATCH. Retried because parallel write fan-outs hit the secondary
324
+ * rate limit; a genuine failure still throws.
415
325
  */
416
326
  async _applyLabelMutations(
417
327
  ticketId,
@@ -434,9 +344,7 @@ export class TicketGateway {
434
344
  return { skipPatch: true };
435
345
  }
436
346
 
437
- // Story #1795 — when `transitionTicketState` threads a pre-fetched
438
- // snapshot via `_ticketSnapshot` we reuse its labels rather than
439
- // issuing another `getTicket` for the merge.
347
+ // Reuse a caller-supplied snapshot rather than re-fetching.
440
348
  const ticket = ticketSnapshot ?? (await this.getTicket(ticketId));
441
349
  const currentLabels = new Set(ticket.labels ?? []);
442
350
  for (const l of remove) currentLabels.delete(l);
@@ -446,20 +354,10 @@ export class TicketGateway {
446
354
  }
447
355
 
448
356
  /**
449
- * The issue PATCH is wrapped in `withTransientRetry` (Story #4961) for the
450
- * same reason as the additive label POST above — see
451
- * {@link TicketGateway#_applyLabelMutations}. Both are the write half of the
452
- * fan-outs Story #4952 raised; the reads in this file were already wrapped.
453
- *
454
- * `mutations.addAssignees` (Story #5112) is the **additive** assignee
455
- * write, on the same shape as the additive label POST above: it appends to
456
- * the assignee set instead of replacing it. The lease claim
457
- * (`lib/orchestration/ticket-lease.js`) needs that — a replacing PATCH
458
- * evicts a simultaneous claimer silently, so both runs read a clean
459
- * `[self]` on verify and both believe they hold the lease. Appending makes
460
- * the collision *observable* as a co-assignment, which is exactly what the
461
- * lease's `lost-race` back-out keys on. `mutations.assignees` (replace) is
462
- * unchanged and still used by the steal and release paths.
357
+ * `mutations.addAssignees` appends rather than replaces: the lease claim
358
+ * needs a simultaneous claimer to show up as a co-assignment (what its
359
+ * `lost-race` back-out keys on) instead of being silently evicted.
360
+ * `mutations.assignees` replaces (steal/release paths).
463
361
  *
464
362
  * @field-manifest POST /repos/{owner}/{repo}/issues/{n}/assignees: assignees
465
363
  * @field-manifest PATCH /repos/{owner}/{repo}/issues/{n}:
@@ -1,31 +1,11 @@
1
1
  /**
2
- * GitHub Provider — composition root (thin composer).
3
- *
4
- * Story #2462 (Epic #2453) split this class into nine sibling modules under
5
- * `./github/`. This file now does two things only:
6
- *
7
- * 1. **Holds the constructor** that captures config + opts + the gh-exec
8
- * facade, then delegates gateway wiring to `composeGateways()` in
9
- * `./github/compose.js`.
10
- * 2. **Installs the ITicketingProvider surface** as one-line delegating
11
- * methods sourced from the `DELEGATIONS` table below — every public
12
- * method forwards verbatim to a concrete gateway.
13
- *
14
- * Re-exports: only the five error-classification helpers still used by tests
15
- * that import through this barrel (classifyGithubError et al.). All other
16
- * symbols (mappers, auth helpers, sub-issue constants) are dead exports per
17
- * baselines/dead-exports.json and were removed in Story #3650 (Epic #3599).
18
- * Callers should import those symbols directly from their ./github/<sub>.js
19
- * module.
20
- *
21
- * Gateway map: tickets, sub-issues, comments, labels, branch-protection,
22
- * merge-methods, project-board, issues (epics + sub-tickets + branch probe
23
- * + raw GraphQL). Story #5008 retired the `prs` gateway — `single-story-close`
24
- * drives `gh pr create` directly — along with the sub-issue write surface and
25
- * the repo-wide recent-comments feed.
2
+ * GitHub Provider — composition root. The constructor wires gateways via
3
+ * `composeGateways()`; the `DELEGATIONS` table installs the
4
+ * ITicketingProvider surface as one-line forwards to them. Only the error
5
+ * classifiers are re-exported; import anything else from `./github/<sub>.js`.
26
6
  */
27
7
 
28
- import { createGh, gh as defaultGh } from '../lib/gh-exec.js';
8
+ import { createGh } from '../lib/gh-exec.js';
29
9
  import { ITicketingProvider } from '../lib/ITicketingProvider.js';
30
10
  import { resolveToken } from './github/auth.js';
31
11
  import { createInlineTicketCache } from './github/cache.js';
@@ -47,6 +27,12 @@ export {
47
27
  isTransientStatus,
48
28
  };
49
29
 
30
+ /**
31
+ * Per-`gh`-subprocess ceiling so a stalled socket can't hang orchestration;
32
+ * the resulting `GhExecTimeoutError` classifies as transient and is retried.
33
+ */
34
+ const GH_DEFAULT_TIMEOUT_MS = 60_000;
35
+
50
36
  export class GitHubProvider extends ITicketingProvider {
51
37
  constructor(config, opts = {}) {
52
38
  super();
@@ -58,20 +44,9 @@ export class GitHubProvider extends ITicketingProvider {
58
44
  this.operatorHandle = config.operatorHandle ?? null;
59
45
  this._explicitToken = opts.token ?? null;
60
46
  this._memoizedToken = opts.token ?? null;
61
- // Resolve the gh-exec default timeout (Story #2860). When the operator
62
- // sets `github.defaultTimeoutMs` in `.agentrc.json`, every `gh`
63
- // subprocess this provider spawns inherits that timeout ceiling. An
64
- // injected `opts.gh` is honored as-is so tests can drive the facade
65
- // without going through this fallback. Unset → 60_000 ms in code.
66
- if (opts.gh) {
67
- this._gh = opts.gh;
68
- } else {
69
- const defaultTimeoutMs = config.defaultTimeoutMs ?? 60_000;
70
- this._gh =
71
- defaultTimeoutMs > 0
72
- ? createGh(undefined, { timeoutMs: defaultTimeoutMs })
73
- : defaultGh;
74
- }
47
+ // An injected `opts.gh` is honored as-is (test seam).
48
+ this._gh =
49
+ opts.gh ?? createGh(undefined, { timeoutMs: GH_DEFAULT_TIMEOUT_MS });
75
50
  this._cache = createInlineTicketCache();
76
51
  composeGateways(this);
77
52
  }
@@ -83,17 +58,8 @@ export class GitHubProvider extends ITicketingProvider {
83
58
  }
84
59
 
85
60
  /**
86
- * The identifiers a native dependency-edge writer needs, handed over as an
87
- * explicit interface (Story #4544).
88
- *
89
- * `providers/github/blocked-by-add.js` talks to the dependencies REST API
90
- * directly, so it needs the `gh` facade plus `owner`/`repo` — none of which
91
- * the `ITicketingProvider` surface exposes. Its caller lives in the
92
- * orchestration layer (`plan-persist/story-ops.js`), and the alternative was
93
- * for that caller to reach through `provider._gh` — a private-by-convention
94
- * field — from outside this module. Naming the hand-off here keeps the
95
- * coupling declared and greppable instead of incidental: the provider
96
- * decides what it lends out, and the field stays private.
61
+ * What `blocked-by-add.js` needs for the dependencies REST API, lent
62
+ * explicitly so orchestration callers never reach into `provider._gh`.
97
63
  *
98
64
  * @returns {{ gh: object, owner: string, repo: string }}
99
65
  */
@@ -106,12 +72,7 @@ export class GitHubProvider extends ITicketingProvider {
106
72
  }
107
73
  }
108
74
 
109
- /**
110
- * Delegation table. Each `[publicMethod, 'gatewayName.gatewayMethod']` pair
111
- * installs an async wrapper on `GitHubProvider.prototype` that forwards
112
- * every argument to the matching gateway method. This keeps the parity
113
- * surface explicit and the file under the thin-composer LOC ceiling.
114
- */
75
+ /** `[publicMethod, 'gateway.method']` → async prototype forwarder. */
115
76
  const DELEGATIONS = [
116
77
  ['graphql', 'issues.ghGraphql'],
117
78
  ['searchIssues', 'issues.searchIssues'],
@@ -129,9 +90,7 @@ const DELEGATIONS = [
129
90
  ['updateTicket', 'tickets.updateTicket'],
130
91
  ['_applyLabelMutations', 'tickets._applyLabelMutations'],
131
92
  ['getNativeSubIssues', 'subIssues.getNativeSubIssues'],
132
- // The private alias predates the declared `getNativeSubIssues` port above
133
- // and still has call sites; both forward to the same gateway method, so the
134
- // two can never answer differently while the older name is retired.
93
+ // Legacy private alias with live call sites; same target, so both agree.
135
94
  ['_getNativeSubIssues', 'subIssues.getNativeSubIssues'],
136
95
  ['getTicketComments', 'comments.getTicketComments'],
137
96
  ['deleteComment', 'comments.deleteComment'],
@@ -1,35 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- // .agents/scripts/prune-plan-run-labels.js — Story #5189.
3
+ // prune-plan-run-labels.js — delete spent `plan-run::<id>` cohort labels
4
+ // across the whole repository (the close tail only reaps one Story's labels
5
+ // as it lands). The spent-ness decision lives in `plan-run-labels/reap.js` so
6
+ // this sweep and the close-path reap cannot disagree. A zero-issue label is
7
+ // kept by default: it looks exactly like one an in-flight persist just minted.
4
8
  //
5
- // Sweep the repository's `plan-run::<id>` cohort labels and delete the ones
6
- // that are provably spent.
7
- //
8
- // The close tail reaps incrementally — one Story's own labels, as it lands —
9
- // which keeps a healthy repository flat but does nothing about a pile that
10
- // already exists, and nothing about a cohort whose last Story was closed by
11
- // hand rather than by a close. This is the surface that burns an accumulated
12
- // pile down: it reads the whole label vocabulary through the paginating
13
- // listing port, so what it can see is bounded by the repository rather than by
14
- // an API page.
15
- //
16
- // The decision is not made here — `lib/orchestration/plan-run-labels/reap.js`
17
- // owns it, so this sweep and the close-path reap cannot come to different
18
- // conclusions about when a label is spent. In short: reapable means the label
19
- // carries at least one issue and every one of them is closed. A label carrying
20
- // zero issues is NOT reapable by default, because that shape is exactly what
21
- // an in-flight `plan-persist` looks like between minting its label and
22
- // creating its Stories; `--include-unreferenced` is the explicit opt-in for an
23
- // operator who knows no persist is running.
24
- //
25
- // Exit codes:
26
- // 0 nothing reapable (or, without `--check`, the reap was performed)
27
- // 1 `--check` found at least one label that would be reaped
28
- // 2 the sweep could not run
9
+ // Exit codes: 0 clean or reaped; 1 `--check` found reapable labels; 2 the
10
+ // sweep could not run.
29
11
 
30
- // Fail-fast if the framework's runtime deps are not installed — must be the
31
- // first import so the check runs before any third-party-importing sibling
32
- // module is evaluated (Story #3432).
12
+ // Must be the first import: fail fast before any third-party import runs.
33
13
  import './lib/runtime-deps/ensure-installed.js';
34
14
  import { runAsCli } from './lib/cli-utils.js';
35
15
  import { resolveConfig } from './lib/config-resolver.js';
@@ -65,8 +45,7 @@ const HELP = {
65
45
  };
66
46
 
67
47
  /**
68
- * Parse argv into an options bag. An unknown flag is an error, never a silent
69
- * no-op — a typo'd `--dry-run` must not read as "delete the labels".
48
+ * An unknown flag throws: a typo'd `--dry-run` must not read as "delete".
70
49
  *
71
50
  * @param {string[]} argv
72
51
  * @returns {{ check: boolean, json: boolean, includeUnreferenced: boolean, cwd: string }}
@@ -99,9 +78,7 @@ export function parseArgs(argv = []) {
99
78
  }
100
79
 
101
80
  /**
102
- * One human-readable line per cohort label, naming the reason it was kept or
103
- * reaped. The reason is printed for every label, not only the reapable ones —
104
- * an operator auditing a pile of 235 needs to see why the other 234 stayed.
81
+ * Every label gets a reason line, kept ones included, so an audit can see why.
105
82
  *
106
83
  * @param {object} decision
107
84
  * @param {boolean} check
@@ -120,8 +97,6 @@ function renderDecision(decision, check) {
120
97
  }
121
98
 
122
99
  /**
123
- * Render the whole report as text.
124
- *
125
100
  * @param {object} report
126
101
  * @returns {string}
127
102
  */
@@ -147,14 +122,6 @@ export function formatReport(report) {
147
122
  }
148
123
 
149
124
  /**
150
- * The whole sweep — argv in, exit code out, report written through `writeFn`.
151
- *
152
- * Exported with its provider/config/output surfaces as default-parameter
153
- * seams (`rules/test-seams.md`) so a test drives the *real* argv parsing,
154
- * report rendering and exit-code decision against a stub provider. Without
155
- * that, the only testable thing here would be a re-implementation of the
156
- * decision, which is precisely the copy that drifts.
157
- *
158
125
  * @param {string[]} argv
159
126
  * @param {{
160
127
  * createProviderFn?: Function,
@@ -201,9 +168,8 @@ export async function runSweep(
201
168
  }
202
169
 
203
170
  /**
204
- * CLI entry point. Returns its exit code rather than calling `process.exit()`,
205
- * so `runAsCli`'s `propagateExitCode` path settles it through `flushStdio` and
206
- * an unbounded report is not truncated at a pipe boundary (Story #4783).
171
+ * Returns the exit code instead of `process.exit()` so a long report is not
172
+ * truncated at a pipe boundary.
207
173
  *
208
174
  * @returns {Promise<number>}
209
175
  */