mandrel 2.60.0 → 2.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (661) hide show
  1. package/.agents/README.md +10 -10
  2. package/.agents/agents/story-worker.md +1 -1
  3. package/.agents/docs/agentrc-reference.json +4 -82
  4. package/.agents/docs/configuration.md +20 -87
  5. package/.agents/docs/workflows.md +1 -1
  6. package/.agents/instructions.md +1 -3
  7. package/.agents/rules/gherkin-standards.md +4 -0
  8. package/.agents/schemas/agentrc.schema.json +11 -486
  9. package/.agents/schemas/story-deliver-terminal.schema.json +10 -0
  10. package/.agents/schemas/validation-evidence.schema.json +2 -1
  11. package/.agents/scripts/README.md +14 -14
  12. package/.agents/scripts/acceptance-eval.js +32 -164
  13. package/.agents/scripts/agents-bootstrap-github.js +27 -129
  14. package/.agents/scripts/apply-quality-bootstrap.js +4 -40
  15. package/.agents/scripts/audit-baselines.js +6 -27
  16. package/.agents/scripts/audit-labels-bootstrap.js +5 -29
  17. package/.agents/scripts/audit-to-stories.js +91 -361
  18. package/.agents/scripts/boot-sweep.js +19 -72
  19. package/.agents/scripts/bootstrap.js +74 -395
  20. package/.agents/scripts/ceremony-derive.js +9 -45
  21. package/.agents/scripts/check-arch-cycles.js +14 -64
  22. package/.agents/scripts/check-baselines.js +8 -48
  23. package/.agents/scripts/check-context-budget.js +46 -172
  24. package/.agents/scripts/check-cyclomatic.js +12 -44
  25. package/.agents/scripts/check-dead-exports.js +13 -64
  26. package/.agents/scripts/check-doc-links.js +38 -186
  27. package/.agents/scripts/check-gherkin-corpus.js +24 -127
  28. package/.agents/scripts/check-test-temp-hygiene.js +28 -169
  29. package/.agents/scripts/coverage-capture.js +32 -99
  30. package/.agents/scripts/deliver-light.js +14 -101
  31. package/.agents/scripts/deliver-recover.js +6 -42
  32. package/.agents/scripts/deliver-run.js +36 -133
  33. package/.agents/scripts/diagnose-friction.js +24 -116
  34. package/.agents/scripts/drain-pending-cleanup.js +1 -1
  35. package/.agents/scripts/evidence-gate.js +23 -85
  36. package/.agents/scripts/file-ci-gap.js +10 -50
  37. package/.agents/scripts/generate-config-docs.js +30 -170
  38. package/.agents/scripts/generate-lens-checklists.js +8 -52
  39. package/.agents/scripts/generate-skills-index.js +14 -112
  40. package/.agents/scripts/generate-workflows-doc.js +10 -70
  41. package/.agents/scripts/git-cleanup.js +2 -34
  42. package/.agents/scripts/lib/Graph.js +24 -81
  43. package/.agents/scripts/lib/ITicketingProvider.js +47 -143
  44. package/.agents/scripts/lib/Logger.js +14 -76
  45. package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
  46. package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
  47. package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
  48. package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
  49. package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
  50. package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
  51. package/.agents/scripts/lib/audit-baselines/read.js +3 -16
  52. package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
  53. package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
  54. package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
  55. package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
  56. package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
  57. package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
  58. package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
  59. package/.agents/scripts/lib/audit-suite/findings.js +12 -52
  60. package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
  61. package/.agents/scripts/lib/audit-suite/index.js +1 -15
  62. package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
  63. package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
  64. package/.agents/scripts/lib/audit-suite/runner.js +13 -43
  65. package/.agents/scripts/lib/audit-suite/selector.js +49 -349
  66. package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
  67. package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
  68. package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
  69. package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
  70. package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
  71. package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
  72. package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
  73. package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
  74. package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
  75. package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
  76. package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
  77. package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
  78. package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
  79. package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
  80. package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
  81. package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
  82. package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
  83. package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
  84. package/.agents/scripts/lib/baseline-loader.js +12 -51
  85. package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
  86. package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
  87. package/.agents/scripts/lib/baselines/components.js +10 -61
  88. package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
  89. package/.agents/scripts/lib/baselines/crap-preview-incremental.js +5 -21
  90. package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
  91. package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
  92. package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
  93. package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
  94. package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
  95. package/.agents/scripts/lib/baselines/envelope.js +13 -129
  96. package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
  97. package/.agents/scripts/lib/baselines/git-base.js +23 -142
  98. package/.agents/scripts/lib/baselines/kernel.js +11 -111
  99. package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
  100. package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
  101. package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
  102. package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
  103. package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
  104. package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
  105. package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
  106. package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
  107. package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
  108. package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
  109. package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
  110. package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
  111. package/.agents/scripts/lib/baselines/path-canon.js +19 -128
  112. package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
  113. package/.agents/scripts/lib/baselines/reader.js +14 -107
  114. package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
  115. package/.agents/scripts/lib/baselines/scope.js +11 -135
  116. package/.agents/scripts/lib/baselines/writer.js +16 -149
  117. package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
  118. package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
  119. package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
  120. package/.agents/scripts/lib/bdd-step-index.js +26 -100
  121. package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
  122. package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
  123. package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
  124. package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
  125. package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
  126. package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
  127. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
  128. package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
  129. package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
  130. package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
  131. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
  132. package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
  133. package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
  134. package/.agents/scripts/lib/bootstrap/summary.js +1 -8
  135. package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
  136. package/.agents/scripts/lib/branch-name-guard.js +4 -23
  137. package/.agents/scripts/lib/changed-files.js +31 -143
  138. package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
  139. package/.agents/scripts/lib/checks/index.js +18 -101
  140. package/.agents/scripts/lib/checks/loop-health.js +11 -53
  141. package/.agents/scripts/lib/checks/state.js +16 -91
  142. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
  143. package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
  144. package/.agents/scripts/lib/child-exec.js +39 -108
  145. package/.agents/scripts/lib/cli/standard-args.js +9 -116
  146. package/.agents/scripts/lib/cli-args.js +31 -146
  147. package/.agents/scripts/lib/cli-usage.js +5 -27
  148. package/.agents/scripts/lib/cli-utils.js +2 -12
  149. package/.agents/scripts/lib/close-validation/commands.js +13 -76
  150. package/.agents/scripts/lib/close-validation/gates.js +92 -331
  151. package/.agents/scripts/lib/close-validation/process.js +121 -151
  152. package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
  153. package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
  154. package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
  155. package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
  156. package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
  157. package/.agents/scripts/lib/close-validation/runner.js +53 -110
  158. package/.agents/scripts/lib/command-header.js +6 -28
  159. package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
  160. package/.agents/scripts/lib/config/baselines.js +3 -14
  161. package/.agents/scripts/lib/config/ci.js +8 -38
  162. package/.agents/scripts/lib/config/commands.js +1 -15
  163. package/.agents/scripts/lib/config/defaults.js +4 -33
  164. package/.agents/scripts/lib/config/delivery-routing.js +6 -35
  165. package/.agents/scripts/lib/config/explain.js +9 -80
  166. package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
  167. package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +2 -30
  168. package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
  169. package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
  170. package/.agents/scripts/lib/config/gates/index.js +2 -17
  171. package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
  172. package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
  173. package/.agents/scripts/lib/config/gates/shared.js +4 -64
  174. package/.agents/scripts/lib/config/github.js +4 -22
  175. package/.agents/scripts/lib/config/limits.js +4 -57
  176. package/.agents/scripts/lib/config/paths.js +2 -21
  177. package/.agents/scripts/lib/config/qa.js +4 -38
  178. package/.agents/scripts/lib/config/quality.js +76 -432
  179. package/.agents/scripts/lib/config/runners.js +12 -56
  180. package/.agents/scripts/lib/config/runtime.js +13 -57
  181. package/.agents/scripts/lib/config/shared.js +2 -16
  182. package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
  183. package/.agents/scripts/lib/config/temp-paths.js +40 -280
  184. package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
  185. package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
  186. package/.agents/scripts/lib/config-resolver.js +10 -52
  187. package/.agents/scripts/lib/config-schema-shared.js +1 -4
  188. package/.agents/scripts/lib/config-settings-schema-delivery.js +12 -294
  189. package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
  190. package/.agents/scripts/lib/config-settings-schema.js +37 -274
  191. package/.agents/scripts/lib/coverage-baseline.js +20 -110
  192. package/.agents/scripts/lib/coverage-capture-fullscope.js +12 -37
  193. package/.agents/scripts/lib/coverage-capture-incremental.js +12 -43
  194. package/.agents/scripts/lib/coverage-capture-usage.js +4 -24
  195. package/.agents/scripts/lib/coverage-capture.js +99 -224
  196. package/.agents/scripts/lib/coverage-utils.js +14 -79
  197. package/.agents/scripts/lib/cpu-pool.js +17 -123
  198. package/.agents/scripts/lib/crap-baseline-join.js +16 -88
  199. package/.agents/scripts/lib/crap-coordinates.js +6 -25
  200. package/.agents/scripts/lib/crap-engine.js +40 -153
  201. package/.agents/scripts/lib/crap-method-identity.js +16 -78
  202. package/.agents/scripts/lib/crap-utils.js +31 -155
  203. package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
  204. package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
  205. package/.agents/scripts/lib/dead-exports-knip.js +18 -56
  206. package/.agents/scripts/lib/dead-exports-mode.js +5 -24
  207. package/.agents/scripts/lib/degraded-mode.js +3 -26
  208. package/.agents/scripts/lib/dependency-parser.js +8 -40
  209. package/.agents/scripts/lib/dependency-version.js +13 -35
  210. package/.agents/scripts/lib/detect-package-manager.js +6 -36
  211. package/.agents/scripts/lib/doc-tiers.js +22 -126
  212. package/.agents/scripts/lib/duplicate-search.js +8 -72
  213. package/.agents/scripts/lib/env-loader.js +5 -27
  214. package/.agents/scripts/lib/error-redactor.js +6 -31
  215. package/.agents/scripts/lib/errors/index.js +2 -22
  216. package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
  217. package/.agents/scripts/lib/escomplex-kernel.js +21 -123
  218. package/.agents/scripts/lib/feedback-loop/graduator-core.js +93 -419
  219. package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
  220. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -151
  221. package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
  222. package/.agents/scripts/lib/findings/classify-finding.js +14 -69
  223. package/.agents/scripts/lib/findings/promote-finding.js +14 -112
  224. package/.agents/scripts/lib/findings/provenance-field.js +11 -52
  225. package/.agents/scripts/lib/findings/route-finding.js +37 -255
  226. package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
  227. package/.agents/scripts/lib/findings/severity.js +18 -104
  228. package/.agents/scripts/lib/format-generated-json.js +12 -44
  229. package/.agents/scripts/lib/full-suite-lock.js +160 -429
  230. package/.agents/scripts/lib/full-suite-queue.js +213 -0
  231. package/.agents/scripts/lib/gates/baseline-store.js +5 -9
  232. package/.agents/scripts/lib/gates/friction.js +1 -3
  233. package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
  234. package/.agents/scripts/lib/gh-exec.js +31 -259
  235. package/.agents/scripts/lib/git/cached-fetch.js +9 -52
  236. package/.agents/scripts/lib/git/sync-from-base.js +15 -107
  237. package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
  238. package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
  239. package/.agents/scripts/lib/git-utils.js +37 -161
  240. package/.agents/scripts/lib/github/framework-repo.js +8 -71
  241. package/.agents/scripts/lib/github-url.js +2 -17
  242. package/.agents/scripts/lib/import-graph.js +11 -38
  243. package/.agents/scripts/lib/install-cmd-parser.js +4 -13
  244. package/.agents/scripts/lib/json-utils.js +3 -18
  245. package/.agents/scripts/lib/label-constants.js +16 -111
  246. package/.agents/scripts/lib/label-taxonomy.js +4 -30
  247. package/.agents/scripts/lib/maintainability-engine.js +12 -80
  248. package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
  249. package/.agents/scripts/lib/maintainability-utils.js +16 -92
  250. package/.agents/scripts/lib/mandrel-catalog.js +12 -70
  251. package/.agents/scripts/lib/notifications/notifier.js +13 -38
  252. package/.agents/scripts/lib/npm-scripts.js +4 -23
  253. package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
  254. package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
  255. package/.agents/scripts/lib/observability/signal-validator.js +5 -37
  256. package/.agents/scripts/lib/observability/signals-writer.js +11 -121
  257. package/.agents/scripts/lib/observability/source-classifier.js +21 -203
  258. package/.agents/scripts/lib/observability/terse-result.js +14 -47
  259. package/.agents/scripts/lib/onboard/init-tail.js +13 -74
  260. package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
  261. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
  262. package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
  263. package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
  264. package/.agents/scripts/lib/orchestration/ceremony-routing.js +5 -75
  265. package/.agents/scripts/lib/orchestration/change-set.js +7 -36
  266. package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
  267. package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
  268. package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
  269. package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
  270. package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
  271. package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
  272. package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
  273. package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
  274. package/.agents/scripts/lib/orchestration/check-state.js +92 -0
  275. package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
  276. package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +42 -189
  277. package/.agents/scripts/lib/orchestration/code-review.js +24 -128
  278. package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
  279. package/.agents/scripts/lib/orchestration/complexity-gate.js +42 -214
  280. package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
  281. package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
  282. package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
  283. package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
  284. package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
  285. package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
  286. package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
  287. package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
  288. package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
  289. package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
  290. package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
  291. package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
  292. package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
  293. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
  294. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
  295. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
  296. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
  297. package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
  298. package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
  299. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
  300. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
  301. package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
  302. package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
  303. package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
  304. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
  305. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
  306. package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
  307. package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
  308. package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
  309. package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
  310. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
  311. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
  312. package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
  313. package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
  314. package/.agents/scripts/lib/orchestration/light-suitability.js +26 -231
  315. package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
  316. package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
  317. package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
  318. package/.agents/scripts/lib/orchestration/plan-context.js +52 -303
  319. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
  320. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
  321. package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
  322. package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
  323. package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
  324. package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
  325. package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +14 -78
  326. package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
  327. package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
  328. package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
  329. package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
  330. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
  331. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
  332. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +49 -248
  333. package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
  334. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +85 -368
  335. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +8 -38
  336. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +30 -190
  337. package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
  338. package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
  339. package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
  340. package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
  341. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
  342. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
  343. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
  344. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
  345. package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
  346. package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
  347. package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
  348. package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
  349. package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
  350. package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
  351. package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
  352. package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
  353. package/.agents/scripts/lib/orchestration/review-depth.js +12 -94
  354. package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
  355. package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
  356. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
  357. package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
  358. package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
  359. package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
  360. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
  361. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
  362. package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
  363. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
  364. package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
  365. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
  366. package/.agents/scripts/lib/orchestration/run-epilogue.js +40 -199
  367. package/.agents/scripts/lib/orchestration/run-scoped-config.js +13 -81
  368. package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
  369. package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
  370. package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
  371. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
  372. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +18 -80
  373. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
  374. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
  375. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
  376. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
  377. package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +9 -50
  378. package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
  379. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
  380. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
  381. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
  382. package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
  383. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
  384. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
  385. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
  386. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
  387. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
  388. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
  389. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
  390. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +110 -290
  391. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
  392. package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
  393. package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
  394. package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
  395. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
  396. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
  397. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
  398. package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
  399. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -201
  400. package/.agents/scripts/lib/orchestration/story-follow-ups.js +43 -245
  401. package/.agents/scripts/lib/orchestration/story-init-envelope.js +4 -23
  402. package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
  403. package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
  404. package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -126
  405. package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
  406. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
  407. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
  408. package/.agents/scripts/lib/orchestration/ticket-validator.js +39 -181
  409. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
  410. package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -250
  411. package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
  412. package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
  413. package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
  414. package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
  415. package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
  416. package/.agents/scripts/lib/path-security.js +3 -6
  417. package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
  418. package/.agents/scripts/lib/preflight-runner.js +13 -69
  419. package/.agents/scripts/lib/process-group.js +143 -0
  420. package/.agents/scripts/lib/project-root.js +2 -8
  421. package/.agents/scripts/lib/provider-factory.js +2 -25
  422. package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
  423. package/.agents/scripts/lib/qa/qa-session.js +15 -69
  424. package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
  425. package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
  426. package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
  427. package/.agents/scripts/lib/reserved-test-ids.js +9 -47
  428. package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
  429. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
  430. package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
  431. package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
  432. package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
  433. package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
  434. package/.agents/scripts/lib/signals/detectors/common.js +12 -38
  435. package/.agents/scripts/lib/signals/index.js +2 -19
  436. package/.agents/scripts/lib/signals/schema.js +14 -109
  437. package/.agents/scripts/lib/signals/write.js +2 -11
  438. package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
  439. package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
  440. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
  441. package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
  442. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
  443. package/.agents/scripts/lib/single-story-sweep.js +14 -97
  444. package/.agents/scripts/lib/skills/parse-skill.js +13 -59
  445. package/.agents/scripts/lib/skills/skills-index.js +8 -29
  446. package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
  447. package/.agents/scripts/lib/source-extensions.js +11 -42
  448. package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
  449. package/.agents/scripts/lib/stdio-flush.js +9 -36
  450. package/.agents/scripts/lib/story-adjacency.js +8 -40
  451. package/.agents/scripts/lib/story-body/body-format-lints.js +22 -83
  452. package/.agents/scripts/lib/story-body/footer-block.js +11 -44
  453. package/.agents/scripts/lib/story-body/story-body.js +83 -358
  454. package/.agents/scripts/lib/temp-retention.js +42 -143
  455. package/.agents/scripts/lib/templates/decomposer-prompts.js +11 -65
  456. package/.agents/scripts/lib/test-env.js +12 -65
  457. package/.agents/scripts/lib/test-run-credit.js +10 -65
  458. package/.agents/scripts/lib/test-runner-contract.js +19 -74
  459. package/.agents/scripts/lib/test-temp.js +38 -184
  460. package/.agents/scripts/lib/test-tiers.js +12 -96
  461. package/.agents/scripts/lib/ticket-body-sections.js +21 -96
  462. package/.agents/scripts/lib/transpile.js +15 -74
  463. package/.agents/scripts/lib/util/concurrent-map.js +6 -25
  464. package/.agents/scripts/lib/util/parse-id-list.js +8 -34
  465. package/.agents/scripts/lib/util/poll-loop.js +8 -28
  466. package/.agents/scripts/lib/util/with-timeout.js +2 -11
  467. package/.agents/scripts/lib/validation-evidence.js +21 -96
  468. package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
  469. package/.agents/scripts/lib/wave-runner/live-probe.js +53 -221
  470. package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
  471. package/.agents/scripts/lib/workers/crap-worker.js +11 -64
  472. package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
  473. package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
  474. package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
  475. package/.agents/scripts/lib/workflow-closure.js +22 -105
  476. package/.agents/scripts/lib/workspace-provisioner.js +16 -54
  477. package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
  478. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
  479. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
  480. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
  481. package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
  482. package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
  483. package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
  484. package/.agents/scripts/lib/worktree-manager.js +15 -40
  485. package/.agents/scripts/lint-issue-body.js +12 -68
  486. package/.agents/scripts/mandrel-update-preflight.js +10 -70
  487. package/.agents/scripts/merge-baseline.js +30 -104
  488. package/.agents/scripts/nav-registry-diff.js +22 -108
  489. package/.agents/scripts/notify.js +12 -69
  490. package/.agents/scripts/plan-context.js +27 -111
  491. package/.agents/scripts/plan-critics.js +12 -66
  492. package/.agents/scripts/plan-persist.js +31 -148
  493. package/.agents/scripts/plan-run-epilogue.js +11 -37
  494. package/.agents/scripts/pr-watch-with-update.js +76 -267
  495. package/.agents/scripts/providers/github/auth.js +3 -8
  496. package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
  497. package/.agents/scripts/providers/github/board-add.js +5 -21
  498. package/.agents/scripts/providers/github/branch-protection.js +11 -43
  499. package/.agents/scripts/providers/github/cache.js +2 -14
  500. package/.agents/scripts/providers/github/comments.js +7 -40
  501. package/.agents/scripts/providers/github/compose.js +3 -19
  502. package/.agents/scripts/providers/github/errors.js +22 -125
  503. package/.agents/scripts/providers/github/issues.js +31 -123
  504. package/.agents/scripts/providers/github/labels.js +24 -124
  505. package/.agents/scripts/providers/github/mappers.js +5 -27
  506. package/.agents/scripts/providers/github/merge-methods.js +3 -22
  507. package/.agents/scripts/providers/github/project-board.js +2 -17
  508. package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
  509. package/.agents/scripts/providers/github/request-helpers.js +5 -32
  510. package/.agents/scripts/providers/github/search-budget.js +9 -39
  511. package/.agents/scripts/providers/github/search-query.js +5 -26
  512. package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
  513. package/.agents/scripts/providers/github/sub-issues.js +7 -36
  514. package/.agents/scripts/providers/github/tickets.js +32 -134
  515. package/.agents/scripts/providers/github.js +18 -59
  516. package/.agents/scripts/prune-plan-run-labels.js +12 -46
  517. package/.agents/scripts/quality-preview.js +35 -220
  518. package/.agents/scripts/resolve-doc-tiers.js +3 -26
  519. package/.agents/scripts/resolve-stories.js +16 -67
  520. package/.agents/scripts/resync-status-column.js +6 -25
  521. package/.agents/scripts/run-tests.js +29 -104
  522. package/.agents/scripts/single-story-close.js +23 -135
  523. package/.agents/scripts/single-story-confirm-merge.js +32 -139
  524. package/.agents/scripts/single-story-init.js +47 -209
  525. package/.agents/scripts/stories-wave-tick.js +102 -472
  526. package/.agents/scripts/sync-agentrc.js +3 -21
  527. package/.agents/scripts/sync-claude-agents.js +9 -55
  528. package/.agents/scripts/sync-claude-commands.js +20 -110
  529. package/.agents/scripts/test-wrapper.js +6 -43
  530. package/.agents/scripts/update-coverage-baseline.js +5 -22
  531. package/.agents/scripts/update-crap-baseline.js +7 -30
  532. package/.agents/scripts/update-duplication-baseline.js +16 -92
  533. package/.agents/scripts/update-maintainability-baseline.js +8 -62
  534. package/.agents/scripts/update-ticket-state.js +1 -7
  535. package/.agents/scripts/validate-skills.js +6 -26
  536. package/.agents/templates/agent-protocol.md +2 -2
  537. package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
  538. package/.agents/workflows/audit-accessibility.md +4 -7
  539. package/.agents/workflows/audit-adrs.md +3 -6
  540. package/.agents/workflows/audit-architecture.md +3 -11
  541. package/.agents/workflows/audit-baselines.md +6 -9
  542. package/.agents/workflows/audit-clean-code.md +8 -12
  543. package/.agents/workflows/audit-data-model.md +3 -7
  544. package/.agents/workflows/audit-dependencies.md +4 -7
  545. package/.agents/workflows/audit-devops.md +4 -8
  546. package/.agents/workflows/audit-documentation.md +1 -4
  547. package/.agents/workflows/audit-mobile.md +4 -7
  548. package/.agents/workflows/audit-navigability.md +3 -6
  549. package/.agents/workflows/audit-performance.md +2 -4
  550. package/.agents/workflows/audit-privacy.md +4 -7
  551. package/.agents/workflows/audit-quality.md +4 -7
  552. package/.agents/workflows/audit-security.md +4 -7
  553. package/.agents/workflows/audit-seo.md +4 -7
  554. package/.agents/workflows/audit-sre.md +4 -7
  555. package/.agents/workflows/audit-to-stories.md +17 -30
  556. package/.agents/workflows/audit-ux-ui.md +4 -7
  557. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  558. package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
  559. package/.agents/workflows/helpers/deliver-digest.md +6 -4
  560. package/.agents/workflows/helpers/deliver-reference.md +114 -188
  561. package/.agents/workflows/helpers/deliver-story-reference.md +189 -533
  562. package/.agents/workflows/helpers/plan-reference.md +86 -139
  563. package/.agents/workflows/helpers/qa-core.md +12 -0
  564. package/.agents/workflows/memory-consolidate.md +1 -1
  565. package/.agents/workflows/qa-assist.md +27 -71
  566. package/.agents/workflows/qa-explore.md +19 -59
  567. package/.agents/workflows/qa-run.md +11 -33
  568. package/README.md +1 -1
  569. package/bin/mandrel.js +5 -46
  570. package/bin/postinstall.js +18 -107
  571. package/docs/CHANGELOG.md +25 -0
  572. package/lib/cli/doctor.js +11 -71
  573. package/lib/cli/init.js +26 -165
  574. package/lib/cli/migrate.js +5 -64
  575. package/lib/cli/registry.js +84 -467
  576. package/lib/cli/sync-agents.js +4 -64
  577. package/lib/cli/sync-commands.js +11 -64
  578. package/lib/cli/sync.js +34 -213
  579. package/lib/cli/uninstall.js +40 -219
  580. package/lib/cli/update.js +105 -661
  581. package/lib/cli/version-check.js +8 -72
  582. package/lib/cli/version-helpers.js +14 -87
  583. package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
  584. package/lib/migrations/index.js +15 -92
  585. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
  586. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
  587. package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
  588. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
  589. package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
  590. package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
  591. package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
  592. package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
  593. package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +2 -21
  594. package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
  595. package/package.json +16 -14
  596. package/.agents/docs/SDLC.md +0 -590
  597. package/.agents/docs/quality-gates.md +0 -1183
  598. package/.agents/rules/known-tooling-behavior.md +0 -200
  599. package/.agents/rules/orchestration-error-handling.md +0 -61
  600. package/.agents/rules/test-seams.md +0 -59
  601. package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
  602. package/.agents/schemas/baselines/lint.schema.json +0 -47
  603. package/.agents/scripts/check-action-pinning.js +0 -260
  604. package/.agents/scripts/check-audit-attribution.js +0 -302
  605. package/.agents/scripts/check-baseline-drift.js +0 -211
  606. package/.agents/scripts/check-baseline-scope.js +0 -362
  607. package/.agents/scripts/check-generated-validator.js +0 -202
  608. package/.agents/scripts/check-knip-entries.js +0 -159
  609. package/.agents/scripts/check-lifecycle-lint.js +0 -294
  610. package/.agents/scripts/check-pinned-override-notes.js +0 -102
  611. package/.agents/scripts/check-schema-references.js +0 -368
  612. package/.agents/scripts/check-test-portability.js +0 -512
  613. package/.agents/scripts/check-workflow-citations.js +0 -218
  614. package/.agents/scripts/check-workflow-cli-lint.js +0 -299
  615. package/.agents/scripts/check-workflow-timeouts.js +0 -291
  616. package/.agents/scripts/install-matrix-assert.js +0 -326
  617. package/.agents/scripts/lib/audit-advisories.js +0 -195
  618. package/.agents/scripts/lib/audit-attribution.js +0 -134
  619. package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
  620. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
  621. package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
  622. package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
  623. package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
  624. package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
  625. package/.agents/scripts/lib/c8-cli-path.js +0 -21
  626. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
  627. package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
  628. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
  629. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
  630. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
  631. package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
  632. package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
  633. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
  634. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
  635. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
  636. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
  637. package/.agents/scripts/lib/fs-walk.js +0 -52
  638. package/.agents/scripts/lib/knip-config-resolver.js +0 -181
  639. package/.agents/scripts/lib/knip-entry-sync.js +0 -452
  640. package/.agents/scripts/lib/pinned-override-notes.js +0 -88
  641. package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
  642. package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
  643. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
  644. package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
  645. package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
  646. package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
  647. package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
  648. package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
  649. package/.agents/scripts/lib/test-isolate/runner.js +0 -483
  650. package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
  651. package/.agents/scripts/lib/test-profile/render-report.js +0 -45
  652. package/.agents/scripts/lint-label-vocabulary.js +0 -214
  653. package/.agents/scripts/post-structured-comment.js +0 -127
  654. package/.agents/scripts/provision-git-hooks.js +0 -85
  655. package/.agents/scripts/prune-baseline-orphans.js +0 -181
  656. package/.agents/scripts/run-coverage.js +0 -197
  657. package/.agents/scripts/run-lint.js +0 -133
  658. package/.agents/scripts/run-test-profile.js +0 -129
  659. package/.agents/scripts/run-verify.js +0 -125
  660. package/.agents/scripts/test-isolate.js +0 -55
  661. package/.agents/scripts/update-dead-exports-baseline.js +0 -321
@@ -1,77 +1,8 @@
1
1
  /**
2
- * refresh-service.js — Unified Baseline Refresh Service entry point
3
- * (Story #2197, Epic #2173).
4
- *
5
- * `refreshBaseline()` is the single funnel through which every baseline
6
- * regeneration (maintainability, crap, coverage, duplication) must flow.
7
- * Callers that previously assembled their own envelopes and called
8
- * `fs.writeFileSync` MUST migrate to this entry point — Stories 3/4/5 of
9
- * Epic #2173 do that migration; Story #2197 only lands the service surface
10
- * and tests. Story #4944 migrated the last holdout, `duplication`.
11
- *
12
- * The service is **scoring-agnostic**: it does not itself walk the
13
- * filesystem to compute MI / CRAP / coverage / duplication scores. Scoring
14
- * is provided by the per-kind default scorers resolved lazily via
15
- * `resolveDefaultScorer`
16
- * (built with the project config resolved against `cwd`) and, in tests or
17
- * production wiring, injected via the `scorer` option for hermetic
18
- * determinism. The service is the policy layer:
19
- *
20
- * 1. Validate the input contract.
21
- * 2. Resolve the scope (explicit list / diff-derived / full).
22
- * 3. Read the prior envelope from `writePath` (if present).
23
- * 4. Run the kind's scorer over the in-scope file list.
24
- * 5. Canonicalize every persisted row path via `canonicalizeBaselinePath()`
25
- * (Story #2192) before handing off to the shared `writer.write()`.
26
- * 6. Pass `prior` + `scope` to `writer.write()` so out-of-scope rows are
27
- * preserved byte-for-byte (Task #2209) and structural-equality
28
- * short-circuits return the prior envelope unchanged.
29
- * 7. Atomically serialise the resulting envelope to `writePath`.
30
- *
31
- * Public API (Task #2203, AC-1 / AC-2 / AC-7):
32
- *
33
- * refreshBaseline({
34
- * kind, // 'maintainability' | 'crap' | 'coverage'
35
- * // | 'duplication' REQUIRED
36
- * baseRef, // git ref to diff against; default 'origin/main'
37
- * headRef, // git ref under inspection; default 'HEAD'
38
- * scopeFiles, // Array<string> | null
39
- * // - Array: use verbatim as the in-scope file set.
40
- * // - null + !fullScope: derive via `git diff
41
- * // --name-only baseRef..headRef` filtered by kind
42
- * // predicate (Task #2207).
43
- * // - null + fullScope=true: ignore scope, regenerate
44
- * // every row.
45
- * epsilon, // per-kind stabilization tolerance (number | undefined)
46
- * fullScope, // boolean; default false. When true, scopeFiles MUST
47
- * // be null and the whole baseline is regenerated.
48
- * writePath, // absolute path to baselines/<kind>.json REQUIRED
49
- * scorer, // INTERNAL/TESTING: override the kind's scorer.
50
- * // Signature: (files: string[], opts) =>
51
- * // Promise<Array<row>> | Array<row>
52
- * fs, // INTERNAL/TESTING: inject fs impl for read/write.
53
- * gitDiff, // INTERNAL/TESTING: inject diff-derivation impl with
54
- * // signature ({ baseRef, headRef, cwd }) =>
55
- * // Iterable<string>
56
- * cwd, // working directory for git diff; default process.cwd()
57
- * generatedAt, // optional pinned timestamp (test determinism); falls
58
- * // back to MANDREL_BASELINE_GENERATED_AT, then now().
59
- * requireRowsForScopeFiles, // optional fail-loud guard for Story-close
60
- * requiredScopeFilePredicate, // optional predicate to narrow guarded files
61
- * }) -> Promise<{
62
- * kind, writePath, scope: { mode, ref?, files: string[] },
63
- * envelope, wrote: boolean
64
- * }>
65
- *
66
- * Acceptance contract:
67
- *
68
- * AC-1: All callers that produce a maintainability/crap/coverage/
69
- * duplication baseline go through refreshBaseline(). Enforced by
70
- * the Task #2208 invariant.
71
- * AC-2: scopeFiles=null && !fullScope -> diff-derived scope (Task #2207).
72
- * AC-4: Out-of-scope rows + their updatedAt fields are preserved byte-
73
- * for-byte (Task #2209).
74
- * AC-7: All persisted paths go through canonicalizeBaselinePath().
2
+ * Baseline refresh service: `refreshBaseline()` is the single funnel for
3
+ * every baseline regeneration. It is scoring-agnostic policy — resolve scope,
4
+ * score via the kind's (default or injected) scorer, canonicalize paths, and
5
+ * write through `writer.write()` so out-of-scope rows survive byte-for-byte.
75
6
  *
76
7
  * @module .agents/scripts/lib/baselines/refresh-service
77
8
  */
@@ -106,10 +37,6 @@ import {
106
37
 
107
38
  const nodeRequire = createRequire(import.meta.url);
108
39
 
109
- /**
110
- * Kinds the refresh service knows how to dispatch. Stays in lockstep with
111
- * the per-kind modules under `.agents/scripts/lib/baselines/kinds/`.
112
- */
113
40
  const SUPPORTED_KINDS = Object.freeze([
114
41
  'maintainability',
115
42
  'crap',
@@ -118,13 +45,7 @@ const SUPPORTED_KINDS = Object.freeze([
118
45
  ]);
119
46
 
120
47
  /**
121
- * Per-kind file-extension predicate for diff-scope derivation (Task #2207).
122
- * Only files whose extension matches the kind's scorer surface are admitted
123
- * into the diff-derived scope; this prevents unrelated diffs (docs, JSON
124
- * fixtures, schema files) from triggering a no-op rescore.
125
- *
126
- * The predicates intentionally accept canonical, forward-slash POSIX paths
127
- * only — every caller funnels through `canonicalizeBaselinePath()` first.
48
+ * Per-kind extension filter for diff-derived scope, over canonical POSIX paths.
128
49
  *
129
50
  * @type {Record<string, (p: string) => boolean>}
130
51
  */
@@ -132,25 +53,14 @@ const KIND_FILE_PREDICATES = Object.freeze({
132
53
  maintainability: (p) => /\.(?:m?[jt]sx?)$/i.test(p),
133
54
  crap: (p) => /\.(?:m?[jt]sx?)$/i.test(p),
134
55
  coverage: (p) => /\.(?:m?[jt]sx?)$/i.test(p),
135
- // Duplication shares the source-extension filter deliberately. jscpd is
136
- // configured for the `javascript` format only, so a changed `.ts` file
137
- // admitted here simply yields no row on either side of the merge —
138
- // over-inclusive is inert, under-inclusive would silently pin a changed
139
- // file's prior row. Erring wide is the safe direction.
56
+ // Over-inclusive is inert for JS-only jscpd; under-inclusive would pin a
57
+ // changed file's prior row.
140
58
  duplication: (p) => /\.(?:m?[jt]sx?)$/i.test(p),
141
59
  });
142
60
 
143
61
  /**
144
- * Resolve the normalized quality block for a kind from a `config` /
145
- * `quality` pair. The default scorers MUST read the same canonical,
146
- * defaulted shape that the production scorers (`refresh-commit.js#buildKindScorer`,
147
- * `update-crap-baseline.js`) consume — i.e. the `getQuality(config)` output,
148
- * not the raw `config.delivery.quality.gates.<kind>` path. The raw path is
149
- * un-defaulted (e.g. it lacks `requireCoverage` / `coveragePath`), so reading
150
- * it directly is exactly the construction inconsistency Story #3694 fixes.
151
- *
152
- * Precedence: an explicitly supplied `quality` block wins; otherwise derive
153
- * it from `config` via `getQuality`; otherwise fall back to `{}`.
62
+ * The defaulted `getQuality(config)` shape the production scorers read — never
63
+ * the raw, un-defaulted gates path. Explicit `quality` wins over `config`.
154
64
  *
155
65
  * @param {{ quality?: object, config?: object }} opts
156
66
  * @returns {object}
@@ -162,23 +72,10 @@ function resolveQualityBlock({ quality, config } = {}) {
162
72
  }
163
73
 
164
74
  /**
165
- * Build the default CRAP scorer. Scans configured target directories
166
- * (full-scope) or the diff-derived file list, loads coverage-final.json,
167
- * and runs `scanAndScore` to produce row-shape objects ready for the writer.
168
- *
169
- * Reads its `targetDirs` / `ignoreGlobs` / `requireCoverage` / `coveragePath`
170
- * from the normalized quality block (Story #3694). The lazy default resolver
171
- * (`resolveDefaultScorer`) passes the resolved project quality block so the
172
- * config-less default no longer silently drops rows.
173
- *
174
- * Exposed for unit tests that need to inspect the built scorer shape; the
175
- * production caller is the internal `resolveDefaultScorer` resolver below.
176
- *
177
75
  * @param {{ cwd: string, config?: object, quality?: object }} opts
178
76
  * @returns {(files: string[], opts: object) => Promise<object[]>}
179
77
  */
180
78
  function buildDefaultCrapScorer({ cwd, config, quality } = {}) {
181
- // Config is optional: callers that don't pass it get reasonable defaults.
182
79
  const crapCfg = resolveQualityBlock({ quality, config })?.crap ?? {};
183
80
  const targetDirs = Array.isArray(crapCfg.targetDirs)
184
81
  ? crapCfg.targetDirs
@@ -205,8 +102,6 @@ function buildDefaultCrapScorer({ cwd, config, quality } = {}) {
205
102
  ignoreGlobs,
206
103
  scopeFiles,
207
104
  });
208
- // Stamp version probes (satisfies coverage even when caller doesn't need
209
- // the values — the writer stamps kernelVersion from the crap kind module).
210
105
  resolveEscomplexVersion(effectiveCwd);
211
106
  resolveTsTranspilerVersion();
212
107
  return (rows ?? []).filter(
@@ -216,12 +111,7 @@ function buildDefaultCrapScorer({ cwd, config, quality } = {}) {
216
111
  }
217
112
 
218
113
  /**
219
- * Build the default coverage scorer. Reads coverage-final.json, applies
220
- * the c8 scope predicate from `.c8rc.cjs`, and converts the per-file
221
- * coverage percentages into rows in the `{ path, lines, branches,
222
- * functions }` shape the writer expects.
223
- *
224
- * `.c8rc.cjs` is optional: when absent the scorer admits all files.
114
+ * Coverage rows from coverage-final.json, scoped by the optional `.c8rc.cjs`.
225
115
  *
226
116
  * @param {{ cwd: string }} opts
227
117
  * @returns {(files: string[], opts: object) => object[]}
@@ -255,8 +145,6 @@ function buildDefaultCoverageScorer({ cwd } = {}) {
255
145
  cwd: effectiveCwd,
256
146
  scope: c8Scope,
257
147
  });
258
- // In diff mode, further narrow to the in-scope file list so only changed
259
- // files are re-scored (out-of-scope rows are preserved by the service).
260
148
  const inScope =
261
149
  !opts?.fullScope && Array.isArray(files) && files.length > 0
262
150
  ? new Set(files)
@@ -273,13 +161,6 @@ function buildDefaultCoverageScorer({ cwd } = {}) {
273
161
  }
274
162
 
275
163
  /**
276
- * Build the default maintainability scorer. Full-scope walks all configured
277
- * target directories; diff-scope resolves just the in-scope files.
278
- *
279
- * Reads its `targetDirs` / `ignoreGlobs` from the normalized quality block
280
- * (Story #3694), mirroring `buildDefaultCrapScorer` and the production
281
- * `refresh-commit.js#buildKindScorer`.
282
- *
283
164
  * @param {{ cwd: string, config?: object, quality?: object }} opts
284
165
  * @returns {(files: string[], opts: object) => Promise<object[]>}
285
166
  */
@@ -305,12 +186,8 @@ function buildDefaultMaintainabilityScorer({ cwd, config, quality } = {}) {
305
186
  const underTarget = targetAbsDirs.some(
306
187
  (root) => abs === root || abs.startsWith(`${root}${path.sep}`),
307
188
  );
308
- // Apply `ignoreGlobs` here too — the full-scope walk drops
309
- // ignore-matched files via `scanDirectoryMi`, so the diff-scope path
310
- // must do the same or an ignored-but-changed file (e.g. one matched by
311
- // `config-settings-schema*.js`) enters `rows` and drags the
312
- // `rollup["*"].min` below the maintainability floor. Reuse the same
313
- // matcher `scanDirectoryMi` uses so behaviour is identical.
189
+ // Same ignore matcher as the full-scope walk, or an ignored-but-changed
190
+ // file enters `rows` and drags the rollup min below the floor.
314
191
  if (
315
192
  underTarget &&
316
193
  !isIgnoredByGlobsMi(abs, ignoreGlobs, effectiveCwd)
@@ -330,20 +207,8 @@ function buildDefaultMaintainabilityScorer({ cwd, config, quality } = {}) {
330
207
  }
331
208
 
332
209
  /**
333
- * Per-kind default-scorer builders. Story #3658 completes the Epic #2173
334
- * migration by wiring real default scorers for all three kinds so the service
335
- * is self-contained: callers may still inject a `scorer` via the options bag
336
- * (used by auto-refresh-runner and tests), but no scorer injection is required
337
- * for production invocations.
338
- *
339
- * Story #3694: the builders are invoked **lazily** by `resolveDefaultScorer`
340
- * with the project config resolved against the call's `cwd`, rather than being
341
- * frozen once at module-load with `{ cwd: process.cwd() }` and no `config`.
342
- * The previous eager table built every scorer with no config, so the crap and
343
- * maintainability scorers ran with empty `targetDirs`/`ignoreGlobs` and
344
- * silently dropped valid rows. Lazy resolution honours both the call's `cwd`
345
- * and the resolved `crap.targetDirs`/`ignoreGlobs`/`requireCoverage` (and the
346
- * maintainability equivalents).
210
+ * Built lazily per call so each scorer sees the config resolved against the
211
+ * call's `cwd`; an unconfigured scorer silently drops valid rows.
347
212
  *
348
213
  * @type {Record<string, (input: { cwd: string, config?: object, quality?: object }) => ((files: string[], opts: object) => Promise<object[]> | object[])>}
349
214
  */
@@ -355,25 +220,10 @@ const KIND_SCORER_BUILDERS = Object.freeze({
355
220
  });
356
221
 
357
222
  /**
358
- * Resolve the default scorer for `kind`, building it with the project config
359
- * resolved against `cwd` (Story #3694). This is the production replacement for
360
- * the old eager `KIND_SCORERS` table: it guarantees the crap and
361
- * maintainability defaults are constructed with the resolved
362
- * `targetDirs`/`ignoreGlobs`/`requireCoverage`, so a config-less
363
- * `refreshBaseline({ kind: 'crap', ... })` call produces the same rows as the
364
- * `update-crap-baseline.js` CLI rather than silently dropping them.
365
- *
366
- * Config resolution is best-effort: if `resolveConfig` throws (e.g. a
367
- * malformed `.agentrc.json` under a tmp `cwd` in tests), we fall back to a
368
- * config-less builder so the service still produces a valid (empty) envelope
369
- * rather than crashing the refresh. The production crap/maintainability paths
370
- * never rely on this fallback — they inject an explicit, configured scorer.
371
- *
372
- * Exported since Story #4776 so the full-scope drift detector
373
- * (`check-baseline-drift.js`) re-scores through the *same* scorer that
374
- * writes the baseline. A drift check scoring by a second, parallel
375
- * implementation would report the two implementations' disagreement as
376
- * drift, which is exactly the false signal it exists to rule out.
223
+ * Default scorer for `kind`, configured from `cwd`. Config resolution is
224
+ * best-effort (a throw yields a config-less scorer). Exported so the drift
225
+ * detector re-scores through the same scorer that writes the baseline; a
226
+ * parallel implementation would report its own disagreement as drift.
377
227
  *
378
228
  * @param {string} kind
379
229
  * @param {{ cwd: string }} opts
@@ -393,9 +243,10 @@ export function resolveDefaultScorer(kind, { cwd } = {}) {
393
243
  }
394
244
 
395
245
  /**
396
- * Refresh the on-disk baseline for `kind`. See module preamble for the
397
- * full contract. Returns the resulting envelope plus the resolved scope
398
- * so callers (and tests) can assert what actually got scored.
246
+ * Refresh the on-disk baseline for `kind`. `scopeFiles: null` without
247
+ * `fullScope` derives scope from `git diff baseRef..headRef`; `fullScope`
248
+ * requires `scopeFiles: null`. `requireRowsForScopeFiles` fails loud when a
249
+ * scoped file produced no row.
399
250
  *
400
251
  * @param {{
401
252
  * kind: 'maintainability' | 'crap' | 'coverage' | 'duplication',
@@ -441,10 +292,6 @@ export async function refreshBaseline(opts = {}) {
441
292
 
442
293
  validateOptions({ kind, scopeFiles, fullScope, writePath });
443
294
 
444
- // Resolve the kind's scorer. Tests / production wiring inject via
445
- // `opts.scorer`; otherwise build the default scorer lazily with the project
446
- // config resolved against `cwd` (Story #3694) so the crap/maintainability
447
- // defaults honour the configured targetDirs/ignoreGlobs.
448
295
  const resolvedScorer = scorer ?? resolveDefaultScorer(kind, { cwd });
449
296
  if (typeof resolvedScorer !== 'function') {
450
297
  throw new Error(
@@ -452,7 +299,6 @@ export async function refreshBaseline(opts = {}) {
452
299
  );
453
300
  }
454
301
 
455
- // Resolve the in-scope file set.
456
302
  const scope = await resolveScope({
457
303
  kind,
458
304
  scopeFiles,
@@ -463,10 +309,7 @@ export async function refreshBaseline(opts = {}) {
463
309
  cwd,
464
310
  });
465
311
 
466
- // Score every in-scope file. For full-scope refreshes the scorer
467
- // receives an empty `files` list and is expected to scan the whole
468
- // target tree itself (the scorer owns the directory walk — the service
469
- // does not, by design).
312
+ // On full scope `files` is empty: the scorer owns the directory walk.
470
313
  const scoredRows = await resolvedScorer(scope.files, {
471
314
  kind,
472
315
  fullScope: scope.mode === 'full',
@@ -480,12 +323,7 @@ export async function refreshBaseline(opts = {}) {
480
323
  );
481
324
  }
482
325
 
483
- // Canonicalize every row path (Story #2192 / AC-7). The shared
484
- // `writer.write()` already runs each row through the per-kind
485
- // `projectRow` which calls `canonicalise()` internally, but funnelling
486
- // through `canonicalizeBaselinePath()` here is the explicit
487
- // service-level contract: rows leave the service with canonical keys,
488
- // regardless of which scorer produced them.
326
+ // Rows leave the service canonical whatever scorer produced them.
489
327
  const canonicalRows = scoredRows.map((row) => ({
490
328
  ...row,
491
329
  path: canonicalizeBaselinePath(row.path ?? row.file),
@@ -499,12 +337,8 @@ export async function refreshBaseline(opts = {}) {
499
337
  requiredScopeFilePredicate,
500
338
  });
501
339
 
502
- // Read the prior envelope so out-of-scope rows survive (Task #2209) and
503
- // the structural-equality short-circuit can fire.
504
340
  const priorEnvelope = readPriorEnvelope(writePath, fs);
505
341
 
506
- // Hand off to the shared writer. It applies `mergeRows` (scope), then
507
- // `applyEpsilon` (stability), then sort + rollup + envelope stamping.
508
342
  const envelope = writeEnvelope({
509
343
  kind,
510
344
  rows: canonicalRows,
@@ -518,10 +352,8 @@ export async function refreshBaseline(opts = {}) {
518
352
  generatedAt: generatedAt ?? process.env.MANDREL_BASELINE_GENERATED_AT,
519
353
  });
520
354
 
521
- // Persist iff the envelope changed. The writer's structural-equality
522
- // short-circuit returns the prior envelope object identity-equal when
523
- // nothing changed; in that case we skip the disk write so the on-disk
524
- // bytes (including `generatedAt`) are preserved verbatim.
355
+ // The writer returns the prior object itself when nothing changed; skip the
356
+ // write so on-disk bytes (including `generatedAt`) stay verbatim.
525
357
  let wrote = false;
526
358
  if (priorEnvelope === null || envelope !== priorEnvelope) {
527
359
  writeEnvelopeFile(writePath, envelope, { fsImpl: fs });
@@ -571,11 +403,8 @@ function assertRequiredScopeRows({
571
403
  }
572
404
 
573
405
  /**
574
- * Default git-diff derivation for the diff-scope path. Runs through the shared
575
- * child-process surface ([`child-exec.js`](../child-exec.js)) — `execFile`,
576
- * never a shell — and only the canonical two-dot range `baseRef..headRef`:
577
- * triple-dot is intentionally avoided so the result reflects exactly the
578
- * files that differ between the two refs at the time of the call.
406
+ * Two-dot range (not triple-dot): exactly the files that differ between the
407
+ * two refs now. `execFile`, never a shell.
579
408
  *
580
409
  * @param {{ baseRef: string, headRef: string, cwd: string }} args
581
410
  * @returns {Promise<string[]>}
@@ -593,8 +422,6 @@ async function defaultGitDiff({ baseRef, headRef, cwd }) {
593
422
  .map((line) => line.trim())
594
423
  .filter((line) => line.length > 0);
595
424
  } catch (err) {
596
- // A missing ref or corrupt repo is the operator's signal to inspect
597
- // the working tree. Best-effort: emit a friction-friendly error.
598
425
  throw new Error(
599
426
  `refreshBaseline: git diff --name-only ${range} failed in ${cwd}: ${err.message}`,
600
427
  );
@@ -602,15 +429,7 @@ async function defaultGitDiff({ baseRef, headRef, cwd }) {
602
429
  }
603
430
 
604
431
  /**
605
- * Derive an in-scope file list from `git diff --name-only baseRef..headRef`
606
- * filtered by `predicate` (Story #2197, Task #2207). Exposed as a named
607
- * export so the diff-scope behaviour can be exercised in isolation. Every
608
- * file returned is canonicalized via `canonicalizeBaselinePath()` before
609
- * the predicate runs, so the predicate may assume POSIX, repo-relative
610
- * input regardless of what shape `git diff` printed on the host platform.
611
- *
612
- * Pure-by-design: `gitDiff` is injected by the caller (defaults to
613
- * `defaultGitDiff` which uses `execFile`, never a shell).
432
+ * Diff-derived scope; paths are canonicalized before `predicate` sees them.
614
433
  *
615
434
  * @param {{
616
435
  * baseRef: string,
@@ -642,10 +461,6 @@ export async function deriveScopeFromDiff({
642
461
  }
643
462
 
644
463
  /**
645
- * Look up the file predicate for `kind`. Exposed so external tests can
646
- * verify the per-kind extension filter without depending on the private
647
- * `KIND_FILE_PREDICATES` table.
648
- *
649
464
  * @param {string} kind
650
465
  * @returns {(p: string) => boolean}
651
466
  */
@@ -659,18 +474,7 @@ export function fileFilterFor(kind) {
659
474
  return pred;
660
475
  }
661
476
 
662
- /**
663
- * Resolve the in-scope file set for this refresh call. Returns a flat
664
- * `{ mode, ref?, files }` record so callers can branch on the resolution
665
- * mode without re-deriving it from the input shape.
666
- *
667
- * Resolution order:
668
- *
669
- * 1. `fullScope === true` -> `{ mode: 'full', files: [] }`.
670
- * 2. `scopeFiles` is an array -> `{ mode: 'explicit', files }`.
671
- * 3. `scopeFiles === null` -> derive via `gitDiff` filtered by the kind's
672
- * predicate -> `{ mode: 'diff', ref: baseRef..headRef, files }`.
673
- */
477
+ /** Full, then explicit list, then diff-derived. */
674
478
  async function resolveScope({
675
479
  kind,
676
480
  scopeFiles,
@@ -689,7 +493,6 @@ async function resolveScope({
689
493
  files: scopeFiles.map((p) => canonicalizeBaselinePath(p)),
690
494
  };
691
495
  }
692
- // Diff-derived (Task #2207).
693
496
  const files = await deriveScopeFromDiff({
694
497
  baseRef,
695
498
  headRef,
@@ -701,9 +504,7 @@ async function resolveScope({
701
504
  }
702
505
 
703
506
  /**
704
- * Read + JSON-parse the prior envelope at `writePath`. Returns `null` on
705
- * any I/O or parse failure — the caller treats "no prior" as "fresh
706
- * write" (regression-fail-safe).
507
+ * `null` on any read/parse/shape failure, which the caller treats as a fresh write.
707
508
  *
708
509
  * @param {string} writePath
709
510
  * @param {typeof nodeFs} fs
@@ -734,10 +535,6 @@ function readPriorEnvelope(writePath, fs) {
734
535
  }
735
536
  }
736
537
 
737
- /**
738
- * Validate the option bag up-front. Throws on any contract violation so a
739
- * misuse never silently produces an empty / wrong baseline.
740
- */
741
538
  function validateOptions({ kind, scopeFiles, fullScope, writePath }) {
742
539
  if (typeof kind !== 'string' || !SUPPORTED_KINDS.includes(kind)) {
743
540
  throw new Error(
@@ -762,24 +559,10 @@ function validateOptions({ kind, scopeFiles, fullScope, writePath }) {
762
559
  }
763
560
 
764
561
  /**
765
- * Build the default duplication scorer.
766
- *
767
- * **This scorer always scans the whole target tree, in every scope mode.**
768
- * That is not an oversight — duplication is the only kind here whose metric
769
- * is *pairwise*: a clone is a relationship between two files, and jscpd can
770
- * only report it if both sides are in the corpus it was handed. Narrowing the
771
- * scan to the diff would drop every clone between a changed file and an
772
- * unchanged one, i.e. exactly the duplication a refactor is most likely to
773
- * introduce. So the `files` argument is intentionally unused: scope narrowing
774
- * for this kind is a **write-side** concern, applied by the service handing
775
- * `scope` to `writer.write()`, where `mergeRowsByScope` keeps the freshly
776
- * scanned rows for in-scope files and preserves the prior rows verbatim for
777
- * everything else.
778
- *
779
- * Reads `targetDirs` / `ignoreGlobs` off `gates.duplication`, not off a
780
- * flattened accessor: `resolveQuality` never lifted duplication into the
781
- * legacy bag (the kind post-dates it), so `quality.duplication` is always
782
- * `undefined` and reading it would silently scan nothing.
562
+ * Always scans the whole tree: duplication is pairwise, so a diff-narrowed
563
+ * scan would miss clones between changed and unchanged files. Scope applies
564
+ * write-side only. Config comes from `gates.duplication`; `quality.duplication`
565
+ * is always undefined.
783
566
  *
784
567
  * @param {{ cwd: string, config?: object, quality?: object, detect?: (opts: object) => Promise<object[]> }} opts
785
568
  * @returns {(files: string[], opts: object) => Promise<object[]>}