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,13 +1,6 @@
1
- /**
2
- * Graph.js
3
- * Extracted mathematical DAG logic for topological sorting, cycle detection,
4
- * transitive reduction, and auto-serialization of concurrent task overlaps.
5
- */
1
+ /** DAG utilities: cycle detection, layering, reduction, topological sort. */
6
2
 
7
- /**
8
- * Builds an adjacency list from the manifest tasks.
9
- * Returns { adjacency: Map<id, id[]>, taskMap: Map<id, task> }
10
- */
3
+ /** Returns { adjacency: Map<id, id[]>, taskMap: Map<id, task> }. */
11
4
  export function buildGraph(tasks) {
12
5
  const adjacency = new Map();
13
6
  const taskMap = new Map();
@@ -20,10 +13,7 @@ export function buildGraph(tasks) {
20
13
  return { adjacency, taskMap };
21
14
  }
22
15
 
23
- /**
24
- * Detects cycles using DFS. Returns the first cycle found as an array of ids,
25
- * or null if the graph is acyclic.
26
- */
16
+ /** The first cycle found as an array of ids, or null. */
27
17
  export function detectCycle(adjacency) {
28
18
  const WHITE = 0,
29
19
  _GRAY = 1,
@@ -50,7 +40,7 @@ function dfsVisit(u, adjacency, color, parent) {
50
40
 
51
41
  for (const v of adjacency.get(u) || []) {
52
42
  if (color.get(v) === 1) {
53
- // Back edge → cycle. Reconstruct.
43
+ // Back edge: reconstruct the cycle.
54
44
  const cycle = [v, u];
55
45
  let cur = u;
56
46
  while (parent.has(cur) && parent.get(cur) !== v) {
@@ -70,10 +60,7 @@ function dfsVisit(u, adjacency, color, parent) {
70
60
  return null;
71
61
  }
72
62
 
73
- /**
74
- * Assigns each task a layer (depth from root). Root tasks (no dependencies)
75
- * are layer 0. Returns Map<id, layer>.
76
- */
63
+ /** Depth from root (roots are layer 0) as Map<id, layer>. */
77
64
  export function assignLayers(adjacency) {
78
65
  const layers = new Map();
79
66
  const memo = new Map();
@@ -101,36 +88,18 @@ export function assignLayers(adjacency) {
101
88
  }
102
89
 
103
90
  /**
104
- * Performs transitive reduction on a DAG.
105
- *
106
- * Removes edge (u→v) iff some *other* direct dependency w of u satisfies
107
- * v ∈ reach(w) — i.e. v is reachable from u via a path of length > 1 that
108
- * does not use the edge (u→v) itself.
91
+ * Remove edge (u→v) iff another direct dependency of u already reaches v.
109
92
  *
110
- * Two-arg form (preferred on hot paths): callers that already hold a
111
- * reachability matrix for the same `adjacency` (e.g. the dispatch
112
- * pipeline, which also feeds it to `autoSerializeOverlaps`) pass it in
113
- * via `reachable` so we skip the O(V·(V+E)) re-derivation. The per-edge
114
- * check is then O(1) (`reach(w).has(v)`), making the overall reduction
115
- * O(V+E) on top of the (amortized) cost of producing `reachable` once.
116
- *
117
- * Single-arg form (back-compat): when `reachable` is omitted we compute
118
- * it locally via `computeReachability(adjacency)` so the function stays
119
- * a drop-in replacement for the historical single-argument signature.
120
- * Output is byte-identical between the two forms.
121
- *
122
- * @param {Map<*, *[]>} adjacency Dependency map (node → deps[]).
123
- * @param {Map<*, Set<*>>} [reachable] Optional pre-computed reachability
124
- * matrix matching `adjacency`. When supplied it MUST cover every node
125
- * in `adjacency` — passing a partial map will silently corrupt output.
126
- * @returns {Map<*, *[]>} Reduced adjacency map.
93
+ * @param {Map<*, *[]>} adjacency node → deps[].
94
+ * @param {Map<*, Set<*>>} [reachable] Precomputed reachability; when given it
95
+ * MUST cover every node, or output is silently corrupt.
96
+ * @returns {Map<*, *[]>}
127
97
  */
128
98
  export function transitiveReduction(adjacency, reachable) {
129
99
  const reach = reachable ?? computeReachability(adjacency);
130
100
  const result = new Map();
131
101
 
132
102
  for (const [node, deps] of adjacency.entries()) {
133
- // Early-return: nodes with zero or one dependency cannot have redundant edges
134
103
  if (deps.length <= 1) {
135
104
  result.set(node, [...deps]);
136
105
  continue;
@@ -138,8 +107,6 @@ export function transitiveReduction(adjacency, reachable) {
138
107
 
139
108
  const kept = [];
140
109
  for (const dep of deps) {
141
- // Edge (node → dep) is redundant iff some other direct dep `other`
142
- // of `node` already reaches `dep` transitively.
143
110
  let isRedundant = false;
144
111
  for (const other of deps) {
145
112
  if (other === dep) continue;
@@ -156,12 +123,8 @@ export function transitiveReduction(adjacency, reachable) {
156
123
  return result;
157
124
  }
158
125
 
159
- /**
160
- * Computes which Chat Sessions each Chat Session depends on.
161
- * Returns a Map<chatNumber, chatNumber[]>.
162
- */
126
+ /** Returns a transitively reduced Map<chatNumber, chatNumber[]>. */
163
127
  export function computeChatDependencies(chatSessions, _adjacency) {
164
- // Build a reverse lookup: taskId → chatNumber
165
128
  const taskToChat = new Map();
166
129
  for (const session of chatSessions) {
167
130
  for (const task of session.tasks) {
@@ -186,22 +149,16 @@ export function computeChatDependencies(chatSessions, _adjacency) {
186
149
  );
187
150
  }
188
151
 
189
- // Apply transitive reduction to chat-level dependencies
190
152
  return transitiveReduction(chatDeps);
191
153
  }
192
154
 
193
- /**
194
- * Computes the transitive closure (reachability matrix) for the DAG.
195
- * Returns a Map<id, Set<id>> where each key maps to a set of all tasks it can reach.
196
- */
155
+ /** Transitive closure as Map<id, Set<id>>, by memoized DFS: O(V·(V+E)). */
197
156
  export function computeReachability(adjacency) {
198
- // Memoized DFS: each node's reachable set is computed once and cached.
199
- // Complexity: O(V·(V+E)) — avoids the O(N³) Floyd-Warshall triple loop.
200
157
  const memo = new Map();
201
158
 
202
159
  function reach(id) {
203
160
  if (memo.has(id)) return memo.get(id);
204
- // Seed with a placeholder to handle cycles defensively
161
+ // Placeholder first, so a cycle cannot recurse forever.
205
162
  const set = new Set();
206
163
  memo.set(id, set);
207
164
  for (const neighbour of adjacency.get(id) || []) {
@@ -221,17 +178,14 @@ export function computeReachability(adjacency) {
221
178
  }
222
179
 
223
180
  /**
224
- * Performs a topological sort on the DAG using Kahn's algorithm.
225
- * Returns tasks ordered such that all dependencies precede their dependents.
226
- * Deterministic: ties are broken by task ID (ascending) for stable output.
181
+ * Kahn's algorithm; ties break by ascending id for stable output.
227
182
  *
228
- * @param {Map<number, number[]>} adjacency - Dependency map (id → blockedBy[]).
229
- * @param {Map<number, object>} taskMap - Full task objects keyed by id.
230
- * @returns {object[]} Tasks in topological order.
231
- * @throws {Error} If a cycle is detected (should be caught before calling this).
183
+ * @param {Map<number, number[]>} adjacency id → blockedBy[].
184
+ * @param {Map<number, object>} taskMap
185
+ * @returns {object[]}
186
+ * @throws {Error} On a cycle (run `detectCycle` first).
232
187
  */
233
188
  export function topologicalSort(adjacency, taskMap) {
234
- // Pre-compute reverse adjacency and in-degree for O(V+E)
235
189
  const inDegree = new Map();
236
190
  const reverseAdj = new Map();
237
191
 
@@ -250,7 +204,6 @@ export function topologicalSort(adjacency, taskMap) {
250
204
  inDegree.set(nodeId, activeDeps);
251
205
  }
252
206
 
253
- // Seed queue with zero-in-degree nodes (tasks with no active dependencies), sorted by id for determinism
254
207
  const queue = [...inDegree.entries()]
255
208
  .filter(([, deg]) => deg === 0)
256
209
  .map(([id]) => id)
@@ -259,17 +212,15 @@ export function topologicalSort(adjacency, taskMap) {
259
212
  const sorted = [];
260
213
 
261
214
  while (queue.length > 0) {
262
- // Take smallest ID for determinism (queue is kept sorted)
215
+ // The queue is kept sorted, so this is the smallest id.
263
216
  const id = queue.shift();
264
217
  sorted.push(taskMap.get(id));
265
218
 
266
- // Decrement in-degree for dependents using pre-computed reverse map
267
219
  for (const dependent of reverseAdj.get(id) ?? []) {
268
220
  const newDeg = (inDegree.get(dependent) ?? 0) - 1;
269
221
  inDegree.set(dependent, newDeg);
270
222
  if (newDeg === 0) {
271
- // Binary insertion to maintain sorted order — O(log N) per insert
272
- // instead of re-sorting the entire queue each iteration.
223
+ // Binary insertion keeps the queue sorted without a re-sort.
273
224
  let lo = 0,
274
225
  hi = queue.length;
275
226
  while (lo < hi) {
@@ -292,18 +243,11 @@ export function topologicalSort(adjacency, taskMap) {
292
243
  }
293
244
 
294
245
  /**
295
- * Groups tasks into sequential execution waves.
296
- *
297
- * A wave contains all tasks whose dependencies are fully satisfied by
298
- * previously completed waves. Tasks within the same wave can run concurrently
299
- * (subject to focus-area serialization in the Dispatcher).
300
- *
301
- * Uses `assignLayers` to compute depth, then groups by layer value.
302
- * The returned array is sorted by wave index (wave 0 = roots).
246
+ * Group tasks by layer; each wave's dependencies are all in earlier waves.
303
247
  *
304
- * @param {Map<number, number[]>} adjacency - Dependency map (id → blockedBy[]).
305
- * @param {Map<number, object>} taskMap - Full task objects keyed by id.
306
- * @returns {object[][]} Array of waves, each wave is an array of task objects.
248
+ * @param {Map<number, number[]>} adjacency id → blockedBy[].
249
+ * @param {Map<number, object>} taskMap
250
+ * @returns {object[][]}
307
251
  */
308
252
  export function computeWaves(adjacency, taskMap) {
309
253
  const layers = assignLayers(adjacency);
@@ -314,7 +258,6 @@ export function computeWaves(adjacency, taskMap) {
314
258
  waveMap.get(layer).push(taskMap.get(id));
315
259
  }
316
260
 
317
- // Sort waves by layer, sort tasks within each wave by id for determinism
318
261
  const maxLayer = Math.max(...waveMap.keys());
319
262
  const waves = [];
320
263
  for (let i = 0; i <= maxLayer; i++) {
@@ -1,28 +1,14 @@
1
1
  /**
2
- * ITicketingProvider — Abstract Ticketing Provider Interface
3
- *
4
- * All ticketing interactions in the v5 Story-centric orchestration are mediated
5
- * through this interface. Concrete implementations (e.g., `providers/github.js`)
6
- * extend this class and override every method.
7
- *
8
- * Unoverridden methods throw `Error('Not implemented: <method>')` to enforce
9
- * the contract at runtime rather than silently returning `undefined`.
10
- *
11
- * @see docs/architecture.md — Provider Abstraction Layer
12
- * @see docs/v5-implementation-plan.md Sprint 1A
2
+ * Abstract ticketing provider. Implementations (e.g. `providers/github.js`)
3
+ * override every method; unoverridden ones throw rather than return
4
+ * `undefined`.
13
5
  */
14
6
 
15
7
  export class ITicketingProvider {
16
- // ---------------------------------------------------------------------------
17
- // Read Operations
18
- // ---------------------------------------------------------------------------
8
+ // Reads
19
9
 
20
10
  /**
21
- * Fetch the Epic issue with its body — the single planning document
22
- * (ideation sections plus the folded Tech Spec / Acceptance Table
23
- * managed sections, Story #4324).
24
- *
25
- * @param {number} epicId - GitHub Issue number of the Epic.
11
+ * @param {number} epicId
26
12
  * @returns {Promise<{
27
13
  * id: number,
28
14
  * title: string,
@@ -34,10 +20,8 @@ export class ITicketingProvider {
34
20
  throw new Error('Not implemented: getEpic');
35
21
  }
36
22
  /**
37
- * Fetch all child tickets for an Epic, optionally filtered by labels or state.
38
- *
39
- * @param {number} epicId - GitHub Issue number of the Epic.
40
- * @param {{ label?: string, state?: string }} [filters={}] - Filter criteria.
23
+ * @param {number} epicId
24
+ * @param {{ label?: string, state?: string }} [filters={}]
41
25
  * @returns {Promise<Array<{
42
26
  * id: number,
43
27
  * title: string,
@@ -50,9 +34,7 @@ export class ITicketingProvider {
50
34
  }
51
35
 
52
36
  /**
53
- * Fetch all immediate sub-tickets of a given parent ticket.
54
- *
55
- * @param {number} parentId - GitHub Issue number of the parent.
37
+ * @param {number} parentId
56
38
  * @returns {Promise<Array<{
57
39
  * id: number,
58
40
  * title: string,
@@ -65,9 +47,7 @@ export class ITicketingProvider {
65
47
  }
66
48
 
67
49
  /**
68
- * Retrieve a single ticket with full metadata.
69
- *
70
- * @param {number} ticketId - GitHub Issue number.
50
+ * @param {number} ticketId
71
51
  * @returns {Promise<{
72
52
  * id: number,
73
53
  * title: string,
@@ -82,41 +62,19 @@ export class ITicketingProvider {
82
62
  }
83
63
 
84
64
  /**
85
- * Pre-populate the provider's per-instance ticket cache with a batch of
86
- * already-hydrated tickets so subsequent `getTicket(id)` calls can be
87
- * served from cache instead of issuing a REST round-trip.
88
- *
89
- * Default no-op: providers without a cache (e.g. the manual adapter or
90
- * test stubs) need not override. Call sites can therefore invoke
91
- * `provider.primeTicketCache(tickets)` unconditionally without an
92
- * `instanceof` / `typeof === 'function'` capability check.
65
+ * Seed the ticket cache so later `getTicket` calls skip a round-trip. A
66
+ * no-op by default, so callers need no capability check.
93
67
  *
94
68
  * @param {Array<{ id: number }>} _tickets
95
69
  * @returns {void}
96
70
  */
97
- primeTicketCache(_tickets) {
98
- // Intentional no-op. Concrete providers that maintain a cache override.
99
- }
71
+ primeTicketCache(_tickets) {}
100
72
 
101
73
  /**
102
- * List every ticket carrying `labels`, in the **mapped** ticket shape.
103
- *
104
- * This is the declared read for a label scan, and the only one callers
105
- * should reach for. Implementations MUST map every issue the way every
106
- * other read on this interface does — in particular `id` is the **issue
107
- * number**, not the backend's internal database id.
108
- *
109
- * That single rule is the whole reason the method exists. The raw REST
110
- * payload names the issue number `number` and the database id `id`, so a
111
- * consumer handed either shape wrote `number ?? id` and appeared to cope —
112
- * while silently addressing issues by database id on the mapped shape,
113
- * because there `id` is already the number and the fallback never fires.
114
- * A declared shape removes the choice rather than documenting it.
115
- *
116
- * `state` selects `open` (default), `closed` or `all`. Implementations MUST
117
- * honour it: a caller asking for `all` is asking a question — "did this
118
- * child reopen?" — that an open-only listing answers wrongly rather than
119
- * partially.
74
+ * List tickets carrying `labels` in the mapped shape: `id` MUST be the issue
75
+ * number, never the backend database id (a raw-vs-mapped `number ?? id`
76
+ * fallback silently addresses the wrong issue). `state` (default `open`)
77
+ * MUST be honoured.
120
78
  *
121
79
  * @param {{ state?: 'open'|'closed'|'all', labels?: string }} [_opts]
122
80
  * @returns {Promise<Array<{
@@ -134,19 +92,9 @@ export class ITicketingProvider {
134
92
  }
135
93
 
136
94
  /**
137
- * Read a parent's native sub-issue children as issue numbers.
138
- *
139
- * Takes **both** identifiers because they address different things: the
140
- * backend's child edge is keyed by the parent's opaque node id, while
141
- * `number` exists only so a degraded read can name the parent it failed on.
142
- * Passing the number where the node id belongs is not a type error — it is
143
- * a successful call about the wrong issue — which is why the parameter
144
- * order is fixed here rather than left to each call site.
145
- *
146
- * Implementations MUST return `[]` rather than throw when the sub-issue
147
- * feature is unavailable on the backend: absence of the feature is not a
148
- * failed read, and callers union this with a body checklist that still
149
- * answers the question.
95
+ * Native sub-issue children as issue numbers. The edge is keyed by node id;
96
+ * passing the number there succeeds about the wrong issue. MUST return `[]`
97
+ * when the backend lacks the feature (callers union a body checklist).
150
98
  *
151
99
  * @param {string} _nodeId Opaque node id of the parent.
152
100
  * @param {number} _number Parent's issue number, for diagnostics only.
@@ -157,30 +105,19 @@ export class ITicketingProvider {
157
105
  }
158
106
 
159
107
  /**
160
- * Resolve a ticket's container parent in **one** call.
108
+ * Resolve a container parent in one call. Returns `null` (never throws) when
109
+ * there is no parent or the backend cannot answer, so a degraded lookup
110
+ * never fails a lifecycle edge.
161
111
  *
162
- * Exists so a child→parent lookup is a read, not a search. Without it the
163
- * only way to find a container was to list every candidate parent and read
164
- * each one's children — O(containers) requests to answer what the backend
165
- * knows directly.
166
- *
167
- * Returns `null` when the ticket has no parent, and `null` rather than
168
- * throwing when the backend cannot answer. Callers treat a null as "no
169
- * parent resolved *here*" and may fall back to a body-declared link; an
170
- * exception would turn a degraded lookup into a failed lifecycle edge.
171
- *
172
- * @param {number} _number Issue number whose parent to resolve.
173
- * @returns {Promise<object|null>} Mapped parent ticket, or null.
112
+ * @param {number} _number
113
+ * @returns {Promise<object|null>}
174
114
  */
175
115
  async getParentIssue(_number) {
176
116
  throw new Error('Not implemented: getParentIssue');
177
117
  }
178
118
 
179
119
  /**
180
- * Return the dependency graph edges for a ticket.
181
- * Parses `blocked by #NNN` patterns from the ticket body.
182
- *
183
- * @param {number} ticketId - GitHub Issue number.
120
+ * @param {number} ticketId
184
121
  * @returns {Promise<{
185
122
  * blocks: number[],
186
123
  * blockedBy: number[]
@@ -191,28 +128,22 @@ export class ITicketingProvider {
191
128
  }
192
129
 
193
130
  /**
194
- * Fetch all comments for a specific ticket.
195
- *
196
- * @param {number} ticketId - GitHub Issue number.
197
- * @returns {Promise<object[]>} Array of comment objects.
131
+ * @param {number} ticketId
132
+ * @returns {Promise<object[]>}
198
133
  */
199
134
  async getTicketComments(_ticketId) {
200
135
  throw new Error('Not implemented: getTicketComments');
201
136
  }
202
137
 
203
- // ---------------------------------------------------------------------------
204
- // Write Operations
205
- // ---------------------------------------------------------------------------
138
+ // Writes
206
139
 
207
140
  /**
208
- * Mutate labels, body (tasklist checkboxes), and assignees on a ticket.
209
- *
210
- * @param {number} ticketId - GitHub Issue number.
141
+ * @param {number} ticketId
211
142
  * @param {{
212
143
  * labels?: { add?: string[], remove?: string[] },
213
144
  * body?: string,
214
145
  * assignees?: string[]
215
- * }} mutations - The mutations to apply.
146
+ * }} mutations
216
147
  * @returns {Promise<void>}
217
148
  */
218
149
  async updateTicket(_ticketId, _mutations) {
@@ -220,13 +151,11 @@ export class ITicketingProvider {
220
151
  }
221
152
 
222
153
  /**
223
- * Append a structured comment to a ticket.
224
- *
225
- * @param {number} ticketId - GitHub Issue number.
154
+ * @param {number} ticketId
226
155
  * @param {{
227
156
  * body: string,
228
157
  * type: 'progress'|'friction'|'notification'
229
- * }} payload - The comment content and classification.
158
+ * }} payload
230
159
  * @returns {Promise<{ commentId: number }>}
231
160
  */
232
161
  async postComment(_ticketId, _payload) {
@@ -234,8 +163,7 @@ export class ITicketingProvider {
234
163
  }
235
164
 
236
165
  /**
237
- * Delete an issue comment by its numeric id.
238
- * Implementations SHOULD treat "not found" as a no-op.
166
+ * SHOULD treat "not found" as a no-op.
239
167
  *
240
168
  * @param {number} _commentId
241
169
  * @returns {Promise<void>}
@@ -244,13 +172,9 @@ export class ITicketingProvider {
244
172
  throw new Error('Not implemented: deleteComment');
245
173
  }
246
174
 
247
- // ---------------------------------------------------------------------------
248
- // Setup Operations (used by bootstrap)
249
- // ---------------------------------------------------------------------------
175
+ // Setup (bootstrap)
250
176
 
251
177
  /**
252
- * Idempotent label creation. Skips labels that already exist.
253
- *
254
178
  * @param {Array<{ name: string, color: string, description: string }>} labelDefs
255
179
  * @returns {Promise<{ created: string[], skipped: string[] }>}
256
180
  */
@@ -259,11 +183,8 @@ export class ITicketingProvider {
259
183
  }
260
184
 
261
185
  /**
262
- * List the repository's whole label vocabulary.
263
- *
264
- * Implementations MUST paginate rather than take a fixed page cap: a cap is
265
- * silent truncation, and a caller deciding what to delete from a truncated
266
- * view is the exact failure Story #5189 exists to stop reproducing.
186
+ * MUST paginate: a page cap silently truncates, and callers decide
187
+ * deletions from this list.
267
188
  *
268
189
  * @returns {Promise<Array<{ name: string, color: string|null, description: string|null }>>}
269
190
  */
@@ -272,11 +193,8 @@ export class ITicketingProvider {
272
193
  }
273
194
 
274
195
  /**
275
- * Delete one label by name.
276
- *
277
- * A label that is already gone MUST resolve as a successful no-op
278
- * (`{ deleted: false, reason: 'not-found' }`) rather than throwing, so a
279
- * re-run of any sweep built on this port is idempotent.
196
+ * An absent label MUST resolve `{ deleted: false, reason: 'not-found' }`,
197
+ * never throw, so sweeps are idempotent.
280
198
  *
281
199
  * @param {string} _name
282
200
  * @returns {Promise<{ deleted: boolean, reason: string|null }>}
@@ -286,8 +204,7 @@ export class ITicketingProvider {
286
204
  }
287
205
 
288
206
  /**
289
- * Idempotent custom field creation on the Project board.
290
- * Only applicable when `projectNumber` is configured.
207
+ * Idempotent; only applicable when `projectNumber` is configured.
291
208
  *
292
209
  * @param {Array<{
293
210
  * name: string,
@@ -301,21 +218,17 @@ export class ITicketingProvider {
301
218
  }
302
219
 
303
220
  /**
304
- * Execute a GraphQL query/mutation against the ticketing backend.
305
- * @param {string} _query - GraphQL query/mutation string.
221
+ * @param {string} _query
306
222
  * @param {object} [_variables={}]
307
223
  * @param {object} [_opts={}]
308
- * @returns {Promise<object>} The `data` portion of the response.
224
+ * @returns {Promise<object>} The response's `data`.
309
225
  */
310
226
  async graphql(_query, _variables = {}, _opts = {}) {
311
227
  throw new Error('Not implemented: graphql');
312
228
  }
313
229
 
314
230
  /**
315
- * Inspect the branch-protection state of a branch. Returns
316
- * `{ enabled: false }` when no protection rule exists (HTTP 404), and
317
- * `{ enabled: true, raw }` when one does. Implementations may return a
318
- * richer shape; the only contract consumers rely on is the boolean.
231
+ * `{ enabled: false }` on 404; consumers rely only on the boolean.
319
232
  *
320
233
  * @param {string} _branch
321
234
  * @returns {Promise<{ enabled: boolean, raw?: object }>}
@@ -325,15 +238,9 @@ export class ITicketingProvider {
325
238
  }
326
239
 
327
240
  /**
328
- * Create or additively-merge a branch-protection rule on `_branch`. The
329
- * `contexts` array names required status-check contexts; existing
330
- * contexts are preserved (additive merge). When no rule exists one is
331
- * created with sensible defaults and just the supplied contexts.
332
- *
333
- * Returns a summary `{ created, added, existing }` describing the diff
334
- * the bootstrap orchestrator surfaces to the operator. Implementations
335
- * MAY ignore other branch-protection knobs (PR review counts, signed
336
- * commits, etc.) so operator-tuned settings survive re-runs.
241
+ * Additively merge required status-check `contexts` (creating the rule if
242
+ * absent). Other protection knobs are left alone so operator tuning
243
+ * survives re-runs.
337
244
  *
338
245
  * @param {string} _branch
339
246
  * @param {{ contexts: string[], strict?: boolean }} _opts
@@ -344,9 +251,7 @@ export class ITicketingProvider {
344
251
  }
345
252
 
346
253
  /**
347
- * Read the repo's merge-method allowlist + auto-merge / delete-branch
348
- * flags. Returns a sparse object containing only the fields the upstream
349
- * API exposes (consumers should treat missing keys as "unknown").
254
+ * Sparse: a missing key means "unknown".
350
255
  *
351
256
  * @returns {Promise<Partial<{
352
257
  * allow_squash_merge: boolean,
@@ -361,8 +266,7 @@ export class ITicketingProvider {
361
266
  }
362
267
 
363
268
  /**
364
- * PATCH the repo with the supplied merge-method settings. Body is sparse —
365
- * only the supplied fields are sent / touched.
269
+ * Sparse PATCH: only supplied fields are touched.
366
270
  *
367
271
  * @param {Partial<{
368
272
  * allow_squash_merge: boolean,