mandrel 2.59.0 → 2.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (678) hide show
  1. package/.agents/README.md +21 -19
  2. package/.agents/agents/acceptance-critic.md +24 -43
  3. package/.agents/agents/story-worker.md +20 -21
  4. package/.agents/docs/agentrc-reference.json +5 -84
  5. package/.agents/docs/configuration.md +48 -132
  6. package/.agents/docs/workflows.md +2 -2
  7. package/.agents/instructions.md +5 -8
  8. package/.agents/rules/ci-remediation.md +41 -8
  9. package/.agents/rules/gherkin-standards.md +4 -0
  10. package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
  11. package/.agents/schemas/agentrc.schema.json +16 -496
  12. package/.agents/schemas/story-deliver-terminal.schema.json +13 -3
  13. package/.agents/schemas/validation-evidence.schema.json +2 -1
  14. package/.agents/scripts/README.md +23 -13
  15. package/.agents/scripts/acceptance-eval.js +35 -169
  16. package/.agents/scripts/agents-bootstrap-github.js +27 -129
  17. package/.agents/scripts/apply-quality-bootstrap.js +4 -40
  18. package/.agents/scripts/audit-baselines.js +6 -27
  19. package/.agents/scripts/audit-labels-bootstrap.js +5 -29
  20. package/.agents/scripts/audit-to-stories.js +91 -361
  21. package/.agents/scripts/boot-sweep.js +19 -72
  22. package/.agents/scripts/bootstrap.js +74 -395
  23. package/.agents/scripts/ceremony-derive.js +10 -41
  24. package/.agents/scripts/check-arch-cycles.js +14 -64
  25. package/.agents/scripts/check-baselines.js +8 -48
  26. package/.agents/scripts/check-context-budget.js +105 -311
  27. package/.agents/scripts/check-cyclomatic.js +12 -44
  28. package/.agents/scripts/check-dead-exports.js +13 -64
  29. package/.agents/scripts/check-doc-links.js +38 -186
  30. package/.agents/scripts/check-gherkin-corpus.js +24 -127
  31. package/.agents/scripts/check-test-temp-hygiene.js +28 -169
  32. package/.agents/scripts/coverage-capture.js +34 -98
  33. package/.agents/scripts/deliver-light.js +25 -171
  34. package/.agents/scripts/deliver-recover.js +6 -42
  35. package/.agents/scripts/deliver-run.js +534 -0
  36. package/.agents/scripts/diagnose-friction.js +24 -116
  37. package/.agents/scripts/drain-pending-cleanup.js +1 -1
  38. package/.agents/scripts/evidence-gate.js +23 -85
  39. package/.agents/scripts/file-ci-gap.js +57 -49
  40. package/.agents/scripts/generate-config-docs.js +30 -170
  41. package/.agents/scripts/generate-lens-checklists.js +8 -52
  42. package/.agents/scripts/generate-skills-index.js +14 -112
  43. package/.agents/scripts/generate-workflows-doc.js +10 -70
  44. package/.agents/scripts/git-cleanup.js +2 -34
  45. package/.agents/scripts/lib/Graph.js +24 -81
  46. package/.agents/scripts/lib/ITicketingProvider.js +47 -143
  47. package/.agents/scripts/lib/Logger.js +14 -76
  48. package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
  49. package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
  50. package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
  51. package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
  52. package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
  53. package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
  54. package/.agents/scripts/lib/audit-baselines/read.js +3 -16
  55. package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
  56. package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
  57. package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
  58. package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
  59. package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
  60. package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
  61. package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
  62. package/.agents/scripts/lib/audit-suite/findings.js +12 -52
  63. package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
  64. package/.agents/scripts/lib/audit-suite/index.js +1 -15
  65. package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
  66. package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
  67. package/.agents/scripts/lib/audit-suite/runner.js +13 -43
  68. package/.agents/scripts/lib/audit-suite/selector.js +49 -349
  69. package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
  70. package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
  71. package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
  72. package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
  73. package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
  74. package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
  75. package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
  76. package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
  77. package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
  78. package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
  79. package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
  80. package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
  81. package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
  82. package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
  83. package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
  84. package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
  85. package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
  86. package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
  87. package/.agents/scripts/lib/baseline-loader.js +12 -51
  88. package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
  89. package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
  90. package/.agents/scripts/lib/baselines/components.js +10 -61
  91. package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
  92. package/.agents/scripts/lib/baselines/crap-preview-incremental.js +7 -19
  93. package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
  94. package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
  95. package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
  96. package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
  97. package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
  98. package/.agents/scripts/lib/baselines/envelope.js +13 -129
  99. package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
  100. package/.agents/scripts/lib/baselines/git-base.js +23 -142
  101. package/.agents/scripts/lib/baselines/kernel.js +11 -111
  102. package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
  103. package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
  104. package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
  105. package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
  106. package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
  107. package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
  108. package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
  109. package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
  110. package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
  111. package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
  112. package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
  113. package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
  114. package/.agents/scripts/lib/baselines/path-canon.js +19 -128
  115. package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
  116. package/.agents/scripts/lib/baselines/reader.js +14 -107
  117. package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
  118. package/.agents/scripts/lib/baselines/scope.js +11 -135
  119. package/.agents/scripts/lib/baselines/writer.js +16 -149
  120. package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
  121. package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
  122. package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
  123. package/.agents/scripts/lib/bdd-step-index.js +26 -100
  124. package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
  125. package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
  126. package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
  127. package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
  128. package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
  129. package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
  130. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
  131. package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
  132. package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
  133. package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
  134. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
  135. package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
  136. package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
  137. package/.agents/scripts/lib/bootstrap/summary.js +1 -8
  138. package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
  139. package/.agents/scripts/lib/branch-name-guard.js +4 -23
  140. package/.agents/scripts/lib/changed-files.js +39 -121
  141. package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
  142. package/.agents/scripts/lib/checks/index.js +18 -101
  143. package/.agents/scripts/lib/checks/loop-health.js +11 -53
  144. package/.agents/scripts/lib/checks/state.js +16 -91
  145. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
  146. package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
  147. package/.agents/scripts/lib/child-exec.js +39 -108
  148. package/.agents/scripts/lib/cli/standard-args.js +9 -116
  149. package/.agents/scripts/lib/cli-args.js +31 -146
  150. package/.agents/scripts/lib/cli-usage.js +5 -27
  151. package/.agents/scripts/lib/cli-utils.js +2 -12
  152. package/.agents/scripts/lib/close-validation/commands.js +13 -76
  153. package/.agents/scripts/lib/close-validation/gates.js +92 -331
  154. package/.agents/scripts/lib/close-validation/process.js +121 -151
  155. package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
  156. package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
  157. package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
  158. package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
  159. package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
  160. package/.agents/scripts/lib/close-validation/runner.js +53 -110
  161. package/.agents/scripts/lib/command-header.js +6 -28
  162. package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
  163. package/.agents/scripts/lib/config/baselines.js +3 -14
  164. package/.agents/scripts/lib/config/ci.js +8 -38
  165. package/.agents/scripts/lib/config/commands.js +1 -15
  166. package/.agents/scripts/lib/config/defaults.js +4 -33
  167. package/.agents/scripts/lib/config/delivery-routing.js +6 -34
  168. package/.agents/scripts/lib/config/explain.js +10 -83
  169. package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
  170. package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +3 -31
  171. package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
  172. package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
  173. package/.agents/scripts/lib/config/gates/index.js +2 -17
  174. package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
  175. package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
  176. package/.agents/scripts/lib/config/gates/shared.js +4 -64
  177. package/.agents/scripts/lib/config/github.js +4 -22
  178. package/.agents/scripts/lib/config/limits.js +4 -57
  179. package/.agents/scripts/lib/config/paths.js +2 -21
  180. package/.agents/scripts/lib/config/qa.js +4 -38
  181. package/.agents/scripts/lib/config/quality.js +76 -432
  182. package/.agents/scripts/lib/config/runners.js +12 -56
  183. package/.agents/scripts/lib/config/runtime.js +13 -57
  184. package/.agents/scripts/lib/config/shared.js +2 -16
  185. package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
  186. package/.agents/scripts/lib/config/temp-paths.js +40 -280
  187. package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
  188. package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
  189. package/.agents/scripts/lib/config-resolver.js +11 -52
  190. package/.agents/scripts/lib/config-schema-shared.js +1 -4
  191. package/.agents/scripts/lib/config-settings-schema-delivery.js +16 -291
  192. package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
  193. package/.agents/scripts/lib/config-settings-schema.js +37 -274
  194. package/.agents/scripts/lib/coverage-baseline.js +20 -110
  195. package/.agents/scripts/lib/coverage-capture-fullscope.js +18 -35
  196. package/.agents/scripts/lib/coverage-capture-incremental.js +15 -45
  197. package/.agents/scripts/lib/coverage-capture-usage.js +8 -25
  198. package/.agents/scripts/lib/coverage-capture.js +99 -224
  199. package/.agents/scripts/lib/coverage-utils.js +14 -79
  200. package/.agents/scripts/lib/cpu-pool.js +17 -123
  201. package/.agents/scripts/lib/crap-baseline-join.js +16 -88
  202. package/.agents/scripts/lib/crap-coordinates.js +6 -25
  203. package/.agents/scripts/lib/crap-engine.js +40 -153
  204. package/.agents/scripts/lib/crap-method-identity.js +16 -78
  205. package/.agents/scripts/lib/crap-utils.js +31 -155
  206. package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
  207. package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
  208. package/.agents/scripts/lib/dead-exports-knip.js +18 -56
  209. package/.agents/scripts/lib/dead-exports-mode.js +5 -24
  210. package/.agents/scripts/lib/degraded-mode.js +3 -26
  211. package/.agents/scripts/lib/dependency-parser.js +8 -40
  212. package/.agents/scripts/lib/dependency-version.js +13 -35
  213. package/.agents/scripts/lib/detect-package-manager.js +6 -36
  214. package/.agents/scripts/lib/doc-tiers.js +22 -124
  215. package/.agents/scripts/lib/duplicate-search.js +8 -72
  216. package/.agents/scripts/lib/env-loader.js +5 -27
  217. package/.agents/scripts/lib/error-redactor.js +6 -31
  218. package/.agents/scripts/lib/errors/index.js +2 -22
  219. package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
  220. package/.agents/scripts/lib/escomplex-kernel.js +21 -123
  221. package/.agents/scripts/lib/feedback-loop/graduator-core.js +94 -419
  222. package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
  223. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -149
  224. package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
  225. package/.agents/scripts/lib/findings/classify-finding.js +14 -69
  226. package/.agents/scripts/lib/findings/promote-finding.js +14 -112
  227. package/.agents/scripts/lib/findings/provenance-field.js +11 -52
  228. package/.agents/scripts/lib/findings/route-finding.js +37 -255
  229. package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
  230. package/.agents/scripts/lib/findings/severity.js +18 -104
  231. package/.agents/scripts/lib/format-generated-json.js +12 -44
  232. package/.agents/scripts/lib/full-suite-lock.js +160 -429
  233. package/.agents/scripts/lib/full-suite-queue.js +213 -0
  234. package/.agents/scripts/lib/gates/baseline-store.js +5 -9
  235. package/.agents/scripts/lib/gates/friction.js +1 -3
  236. package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
  237. package/.agents/scripts/lib/gh-exec.js +123 -191
  238. package/.agents/scripts/lib/git/cached-fetch.js +9 -52
  239. package/.agents/scripts/lib/git/sync-from-base.js +15 -107
  240. package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
  241. package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
  242. package/.agents/scripts/lib/git-utils.js +37 -161
  243. package/.agents/scripts/lib/github/framework-repo.js +8 -71
  244. package/.agents/scripts/lib/github-url.js +2 -17
  245. package/.agents/scripts/lib/import-graph.js +11 -38
  246. package/.agents/scripts/lib/install-cmd-parser.js +4 -13
  247. package/.agents/scripts/lib/json-utils.js +3 -18
  248. package/.agents/scripts/lib/label-constants.js +16 -111
  249. package/.agents/scripts/lib/label-taxonomy.js +4 -30
  250. package/.agents/scripts/lib/maintainability-engine.js +12 -80
  251. package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
  252. package/.agents/scripts/lib/maintainability-utils.js +16 -92
  253. package/.agents/scripts/lib/mandrel-catalog.js +12 -70
  254. package/.agents/scripts/lib/notifications/notifier.js +13 -38
  255. package/.agents/scripts/lib/npm-scripts.js +4 -23
  256. package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
  257. package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
  258. package/.agents/scripts/lib/observability/signal-validator.js +5 -37
  259. package/.agents/scripts/lib/observability/signals-writer.js +11 -121
  260. package/.agents/scripts/lib/observability/source-classifier.js +22 -203
  261. package/.agents/scripts/lib/observability/terse-result.js +14 -47
  262. package/.agents/scripts/lib/onboard/init-tail.js +13 -74
  263. package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
  264. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
  265. package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
  266. package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
  267. package/.agents/scripts/lib/orchestration/ceremony-routing.js +28 -156
  268. package/.agents/scripts/lib/orchestration/change-set.js +7 -36
  269. package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
  270. package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
  271. package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
  272. package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
  273. package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
  274. package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
  275. package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
  276. package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
  277. package/.agents/scripts/lib/orchestration/check-state.js +92 -0
  278. package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
  279. package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +121 -157
  280. package/.agents/scripts/lib/orchestration/code-review.js +24 -128
  281. package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
  282. package/.agents/scripts/lib/orchestration/complexity-gate.js +118 -462
  283. package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
  284. package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
  285. package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
  286. package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
  287. package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
  288. package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
  289. package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
  290. package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
  291. package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
  292. package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
  293. package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
  294. package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
  295. package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
  296. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
  297. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
  298. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
  299. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
  300. package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
  301. package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
  302. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
  303. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
  304. package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
  305. package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
  306. package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
  307. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
  308. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
  309. package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
  310. package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
  311. package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
  312. package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
  313. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
  314. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
  315. package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
  316. package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
  317. package/.agents/scripts/lib/orchestration/light-suitability.js +37 -307
  318. package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
  319. package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
  320. package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
  321. package/.agents/scripts/lib/orchestration/plan-context.js +55 -318
  322. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
  323. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
  324. package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
  325. package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
  326. package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
  327. package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
  328. package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +16 -78
  329. package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
  330. package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
  331. package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
  332. package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
  333. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
  334. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
  335. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +71 -289
  336. package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
  337. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +96 -362
  338. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +9 -39
  339. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +60 -186
  340. package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
  341. package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
  342. package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
  343. package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
  344. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
  345. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
  346. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
  347. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
  348. package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
  349. package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
  350. package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
  351. package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
  352. package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
  353. package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
  354. package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
  355. package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
  356. package/.agents/scripts/lib/orchestration/review-depth.js +12 -91
  357. package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
  358. package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
  359. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
  360. package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
  361. package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
  362. package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
  363. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
  364. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
  365. package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
  366. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
  367. package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
  368. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
  369. package/.agents/scripts/lib/orchestration/run-epilogue.js +245 -326
  370. package/.agents/scripts/lib/orchestration/run-scoped-config.js +55 -159
  371. package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
  372. package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
  373. package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
  374. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
  375. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +20 -82
  376. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
  377. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
  378. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
  379. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
  380. package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +96 -0
  381. package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
  382. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
  383. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
  384. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
  385. package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
  386. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
  387. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
  388. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
  389. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
  390. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
  391. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
  392. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
  393. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +180 -273
  394. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
  395. package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
  396. package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
  397. package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
  398. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
  399. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
  400. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
  401. package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
  402. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -200
  403. package/.agents/scripts/lib/orchestration/story-follow-ups.js +167 -252
  404. package/.agents/scripts/lib/orchestration/story-init-envelope.js +52 -0
  405. package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
  406. package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
  407. package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -135
  408. package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
  409. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
  410. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
  411. package/.agents/scripts/lib/orchestration/ticket-validator.js +63 -344
  412. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
  413. package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -261
  414. package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
  415. package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
  416. package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
  417. package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
  418. package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
  419. package/.agents/scripts/lib/path-security.js +3 -6
  420. package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
  421. package/.agents/scripts/lib/preflight-runner.js +13 -69
  422. package/.agents/scripts/lib/process-group.js +143 -0
  423. package/.agents/scripts/lib/project-root.js +2 -8
  424. package/.agents/scripts/lib/provider-factory.js +2 -25
  425. package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
  426. package/.agents/scripts/lib/qa/qa-session.js +15 -69
  427. package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
  428. package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
  429. package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
  430. package/.agents/scripts/lib/reserved-test-ids.js +9 -47
  431. package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
  432. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
  433. package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
  434. package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
  435. package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
  436. package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
  437. package/.agents/scripts/lib/signals/detectors/common.js +12 -38
  438. package/.agents/scripts/lib/signals/index.js +2 -19
  439. package/.agents/scripts/lib/signals/schema.js +14 -109
  440. package/.agents/scripts/lib/signals/write.js +2 -11
  441. package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
  442. package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
  443. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
  444. package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
  445. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
  446. package/.agents/scripts/lib/single-story-sweep.js +14 -97
  447. package/.agents/scripts/lib/skills/parse-skill.js +13 -59
  448. package/.agents/scripts/lib/skills/skills-index.js +8 -29
  449. package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
  450. package/.agents/scripts/lib/source-extensions.js +11 -42
  451. package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
  452. package/.agents/scripts/lib/stdio-flush.js +9 -36
  453. package/.agents/scripts/lib/story-adjacency.js +8 -40
  454. package/.agents/scripts/lib/story-body/body-format-lints.js +51 -66
  455. package/.agents/scripts/lib/story-body/footer-block.js +11 -44
  456. package/.agents/scripts/lib/story-body/story-body.js +123 -344
  457. package/.agents/scripts/lib/temp-retention.js +42 -143
  458. package/.agents/scripts/lib/templates/decomposer-prompts.js +18 -80
  459. package/.agents/scripts/lib/test-env.js +12 -65
  460. package/.agents/scripts/lib/test-run-credit.js +10 -65
  461. package/.agents/scripts/lib/test-runner-contract.js +19 -74
  462. package/.agents/scripts/lib/test-temp.js +38 -184
  463. package/.agents/scripts/lib/test-tiers.js +12 -96
  464. package/.agents/scripts/lib/ticket-body-sections.js +21 -96
  465. package/.agents/scripts/lib/transpile.js +15 -74
  466. package/.agents/scripts/lib/util/concurrent-map.js +6 -25
  467. package/.agents/scripts/lib/util/parse-id-list.js +8 -34
  468. package/.agents/scripts/lib/util/poll-loop.js +8 -28
  469. package/.agents/scripts/lib/util/with-timeout.js +2 -11
  470. package/.agents/scripts/lib/validation-evidence.js +21 -96
  471. package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
  472. package/.agents/scripts/lib/wave-runner/live-probe.js +67 -209
  473. package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
  474. package/.agents/scripts/lib/workers/crap-worker.js +11 -64
  475. package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
  476. package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
  477. package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
  478. package/.agents/scripts/lib/workflow-closure.js +22 -105
  479. package/.agents/scripts/lib/workspace-provisioner.js +16 -54
  480. package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
  481. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
  482. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
  483. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
  484. package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
  485. package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
  486. package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
  487. package/.agents/scripts/lib/worktree-manager.js +15 -40
  488. package/.agents/scripts/lint-issue-body.js +12 -68
  489. package/.agents/scripts/mandrel-update-preflight.js +10 -70
  490. package/.agents/scripts/merge-baseline.js +30 -105
  491. package/.agents/scripts/nav-registry-diff.js +22 -108
  492. package/.agents/scripts/notify.js +12 -69
  493. package/.agents/scripts/plan-context.js +97 -92
  494. package/.agents/scripts/plan-critics.js +12 -66
  495. package/.agents/scripts/plan-persist.js +71 -137
  496. package/.agents/scripts/plan-run-epilogue.js +20 -43
  497. package/.agents/scripts/pr-watch-with-update.js +79 -263
  498. package/.agents/scripts/providers/github/auth.js +3 -8
  499. package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
  500. package/.agents/scripts/providers/github/board-add.js +5 -21
  501. package/.agents/scripts/providers/github/branch-protection.js +11 -43
  502. package/.agents/scripts/providers/github/cache.js +2 -14
  503. package/.agents/scripts/providers/github/comments.js +7 -40
  504. package/.agents/scripts/providers/github/compose.js +3 -19
  505. package/.agents/scripts/providers/github/errors.js +22 -125
  506. package/.agents/scripts/providers/github/issues.js +31 -123
  507. package/.agents/scripts/providers/github/labels.js +24 -124
  508. package/.agents/scripts/providers/github/mappers.js +5 -27
  509. package/.agents/scripts/providers/github/merge-methods.js +3 -22
  510. package/.agents/scripts/providers/github/project-board.js +2 -17
  511. package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
  512. package/.agents/scripts/providers/github/request-helpers.js +5 -32
  513. package/.agents/scripts/providers/github/search-budget.js +9 -39
  514. package/.agents/scripts/providers/github/search-query.js +5 -26
  515. package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
  516. package/.agents/scripts/providers/github/sub-issues.js +7 -36
  517. package/.agents/scripts/providers/github/tickets.js +32 -134
  518. package/.agents/scripts/providers/github.js +18 -59
  519. package/.agents/scripts/prune-plan-run-labels.js +12 -46
  520. package/.agents/scripts/quality-preview.js +35 -220
  521. package/.agents/scripts/resolve-doc-tiers.js +3 -26
  522. package/.agents/scripts/resolve-stories.js +16 -67
  523. package/.agents/scripts/resync-status-column.js +6 -25
  524. package/.agents/scripts/run-tests.js +29 -104
  525. package/.agents/scripts/single-story-close.js +23 -135
  526. package/.agents/scripts/single-story-confirm-merge.js +32 -139
  527. package/.agents/scripts/single-story-init.js +47 -259
  528. package/.agents/scripts/stories-wave-tick.js +179 -415
  529. package/.agents/scripts/sync-agentrc.js +3 -21
  530. package/.agents/scripts/sync-claude-agents.js +9 -55
  531. package/.agents/scripts/sync-claude-commands.js +20 -110
  532. package/.agents/scripts/test-wrapper.js +6 -43
  533. package/.agents/scripts/update-coverage-baseline.js +5 -22
  534. package/.agents/scripts/update-crap-baseline.js +7 -30
  535. package/.agents/scripts/update-duplication-baseline.js +16 -92
  536. package/.agents/scripts/update-maintainability-baseline.js +8 -62
  537. package/.agents/scripts/update-ticket-state.js +1 -7
  538. package/.agents/scripts/validate-skills.js +6 -26
  539. package/.agents/skills/core/gates-and-baselines/reference.md +0 -1
  540. package/.agents/skills/skills.index.json +2 -2
  541. package/.agents/skills/stack/qa/playwright/SKILL.md +26 -0
  542. package/.agents/templates/agent-protocol.md +2 -2
  543. package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
  544. package/.agents/workflows/audit-accessibility.md +4 -7
  545. package/.agents/workflows/audit-adrs.md +3 -6
  546. package/.agents/workflows/audit-architecture.md +3 -11
  547. package/.agents/workflows/audit-baselines.md +6 -9
  548. package/.agents/workflows/audit-clean-code.md +8 -12
  549. package/.agents/workflows/audit-data-model.md +3 -7
  550. package/.agents/workflows/audit-dependencies.md +4 -7
  551. package/.agents/workflows/audit-devops.md +4 -8
  552. package/.agents/workflows/audit-documentation.md +1 -4
  553. package/.agents/workflows/audit-mobile.md +4 -7
  554. package/.agents/workflows/audit-navigability.md +3 -6
  555. package/.agents/workflows/audit-performance.md +2 -4
  556. package/.agents/workflows/audit-privacy.md +4 -7
  557. package/.agents/workflows/audit-quality.md +4 -7
  558. package/.agents/workflows/audit-security.md +4 -7
  559. package/.agents/workflows/audit-seo.md +4 -7
  560. package/.agents/workflows/audit-sre.md +4 -7
  561. package/.agents/workflows/audit-to-stories.md +17 -30
  562. package/.agents/workflows/audit-ux-ui.md +4 -7
  563. package/.agents/workflows/helpers/acceptance-self-eval.md +84 -157
  564. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  565. package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
  566. package/.agents/workflows/helpers/code-review.md +4 -2
  567. package/.agents/workflows/helpers/deliver-digest.md +37 -28
  568. package/.agents/workflows/helpers/deliver-light.md +92 -101
  569. package/.agents/workflows/helpers/deliver-reference.md +162 -220
  570. package/.agents/workflows/helpers/deliver-story-reference.md +197 -607
  571. package/.agents/workflows/helpers/deliver-story.md +17 -18
  572. package/.agents/workflows/helpers/plan-reference.md +125 -167
  573. package/.agents/workflows/helpers/qa-core.md +12 -0
  574. package/.agents/workflows/mandrel-deliver.md +47 -31
  575. package/.agents/workflows/mandrel-plan.md +22 -21
  576. package/.agents/workflows/mandrel-update.md +36 -21
  577. package/.agents/workflows/memory-consolidate.md +1 -1
  578. package/.agents/workflows/qa-assist.md +27 -71
  579. package/.agents/workflows/qa-explore.md +19 -59
  580. package/.agents/workflows/qa-run.md +11 -33
  581. package/README.md +1 -1
  582. package/bin/mandrel.js +5 -46
  583. package/bin/postinstall.js +18 -107
  584. package/docs/CHANGELOG.md +60 -0
  585. package/lib/cli/doctor.js +11 -71
  586. package/lib/cli/init.js +26 -165
  587. package/lib/cli/migrate.js +5 -64
  588. package/lib/cli/registry.js +84 -467
  589. package/lib/cli/sync-agents.js +4 -64
  590. package/lib/cli/sync-commands.js +11 -64
  591. package/lib/cli/sync.js +34 -213
  592. package/lib/cli/uninstall.js +40 -219
  593. package/lib/cli/update.js +326 -523
  594. package/lib/cli/version-check.js +8 -72
  595. package/lib/cli/version-helpers.js +14 -87
  596. package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
  597. package/lib/migrations/index.js +17 -92
  598. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
  599. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
  600. package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
  601. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
  602. package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
  603. package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
  604. package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
  605. package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
  606. package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +21 -0
  607. package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
  608. package/package.json +17 -14
  609. package/.agents/docs/SDLC.md +0 -590
  610. package/.agents/docs/quality-gates.md +0 -1179
  611. package/.agents/rules/known-tooling-behavior.md +0 -150
  612. package/.agents/rules/orchestration-error-handling.md +0 -61
  613. package/.agents/rules/test-seams.md +0 -59
  614. package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
  615. package/.agents/schemas/baselines/lint.schema.json +0 -47
  616. package/.agents/schemas/model-attribution.schema.json +0 -53
  617. package/.agents/scripts/check-action-pinning.js +0 -260
  618. package/.agents/scripts/check-audit-attribution.js +0 -302
  619. package/.agents/scripts/check-baseline-drift.js +0 -211
  620. package/.agents/scripts/check-baseline-scope.js +0 -362
  621. package/.agents/scripts/check-generated-validator.js +0 -202
  622. package/.agents/scripts/check-knip-entries.js +0 -159
  623. package/.agents/scripts/check-lifecycle-lint.js +0 -294
  624. package/.agents/scripts/check-pinned-override-notes.js +0 -102
  625. package/.agents/scripts/check-schema-references.js +0 -366
  626. package/.agents/scripts/check-test-portability.js +0 -512
  627. package/.agents/scripts/check-workflow-citations.js +0 -332
  628. package/.agents/scripts/check-workflow-cli-lint.js +0 -299
  629. package/.agents/scripts/check-workflow-timeouts.js +0 -291
  630. package/.agents/scripts/install-matrix-assert.js +0 -326
  631. package/.agents/scripts/lib/audit-advisories.js +0 -195
  632. package/.agents/scripts/lib/audit-attribution.js +0 -134
  633. package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
  634. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
  635. package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
  636. package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
  637. package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
  638. package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
  639. package/.agents/scripts/lib/c8-cli-path.js +0 -21
  640. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
  641. package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
  642. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
  643. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
  644. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
  645. package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
  646. package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
  647. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
  648. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
  649. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
  650. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
  651. package/.agents/scripts/lib/fs-walk.js +0 -52
  652. package/.agents/scripts/lib/knip-config-resolver.js +0 -181
  653. package/.agents/scripts/lib/knip-entry-sync.js +0 -452
  654. package/.agents/scripts/lib/orchestration/model-attribution.js +0 -418
  655. package/.agents/scripts/lib/orchestration/story-plan-state.js +0 -33
  656. package/.agents/scripts/lib/orchestration/structured-comment-parser.js +0 -67
  657. package/.agents/scripts/lib/pinned-override-notes.js +0 -88
  658. package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
  659. package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
  660. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
  661. package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
  662. package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
  663. package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
  664. package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
  665. package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
  666. package/.agents/scripts/lib/test-isolate/runner.js +0 -483
  667. package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
  668. package/.agents/scripts/lib/test-profile/render-report.js +0 -45
  669. package/.agents/scripts/lint-label-vocabulary.js +0 -214
  670. package/.agents/scripts/post-structured-comment.js +0 -127
  671. package/.agents/scripts/provision-git-hooks.js +0 -85
  672. package/.agents/scripts/prune-baseline-orphans.js +0 -181
  673. package/.agents/scripts/run-coverage.js +0 -197
  674. package/.agents/scripts/run-lint.js +0 -133
  675. package/.agents/scripts/run-test-profile.js +0 -129
  676. package/.agents/scripts/run-verify.js +0 -118
  677. package/.agents/scripts/test-isolate.js +0 -55
  678. package/.agents/scripts/update-dead-exports-baseline.js +0 -321
@@ -1,23 +1,6 @@
1
1
  /**
2
- * `getAgentrcDefaults()` — single source of `.agentrc.json` defaults.
3
- *
4
- * `.agents/docs/agentrc-reference.json` is the authoritative editor-reference
5
- * inventory of every field the framework supports plus its default
6
- * value. Runtime accessors under `lib/config/*.js` (`COMMANDS_DEFAULTS`,
7
- * `BRANCH_PROTECTION_DEFAULTS`, gate defaults, etc.) layer the same
8
- * values onto whatever the project config carries; a parity test
9
- * (tests/config/full-agentrc-runtime-parity.test.js) keeps the two in
10
- * lockstep.
11
- *
12
- * Story #1995: the `/mandrel-update` sync helper consults this module
13
- * (not the template directly) to decide whether a project value is
14
- * "just the default" and therefore safe to omit from `.agentrc.json`.
15
- *
16
- * Identity placeholders (`[OWNER]`, `[REPO]`, `@[USERNAME]`) carry no
17
- * meaningful default — the operator must set them. They survive in
18
- * the returned object so the consumer can see the expected shape, but
19
- * the sync helper treats them as "no usable default" via
20
- * `IDENTITY_PLACEHOLDER_PATHS`.
2
+ * `.agentrc.json` defaults from `.agents/docs/agentrc-reference.json`; a
3
+ * parity test keeps them in lockstep with the runtime accessors' constants.
21
4
  */
22
5
 
23
6
  import fs from 'node:fs';
@@ -33,12 +16,7 @@ export const FULL_AGENTRC_PATH = path.join(
33
16
  'agentrc-reference.json',
34
17
  );
35
18
 
36
- /**
37
- * Dotted paths whose template value is a human placeholder
38
- * (`[OWNER]`, `[REPO]`, `@[USERNAME]`). The sync helper treats these
39
- * as "no default" — they are never auto-filled, and a project value
40
- * present at one of these paths is never flagged as redundant.
41
- */
19
+ /** Placeholder-valued paths: never auto-filled, never flagged redundant. */
42
20
  export const IDENTITY_PLACEHOLDER_PATHS = Object.freeze([
43
21
  'github.owner',
44
22
  'github.repo',
@@ -48,8 +26,6 @@ export const IDENTITY_PLACEHOLDER_PATHS = Object.freeze([
48
26
  let _cache = null;
49
27
 
50
28
  /**
51
- * Parse `.agents/docs/agentrc-reference.json` and return a deep-frozen snapshot.
52
- *
53
29
  * @param {{ bustCache?: boolean }} [opts]
54
30
  * @returns {object}
55
31
  */
@@ -57,7 +33,6 @@ export function getAgentrcDefaults(opts = {}) {
57
33
  if (!opts.bustCache && _cache) return _cache;
58
34
  const raw = fs.readFileSync(FULL_AGENTRC_PATH, 'utf8');
59
35
  const parsed = JSON.parse(raw);
60
- // Strip the `$schema` pointer — it's editor metadata, not a default.
61
36
  delete parsed.$schema;
62
37
  _cache = deepFreeze(parsed);
63
38
  return _cache;
@@ -70,8 +45,7 @@ function deepFreeze(obj) {
70
45
  }
71
46
 
72
47
  /**
73
- * Walk a default object and yield `[dottedPath, value]` for every
74
- * scalar / array leaf. Objects are descended into, not yielded.
48
+ * Arrays are leaves.
75
49
  *
76
50
  * @param {object} defaults
77
51
  * @returns {Generator<[string, unknown]>}
@@ -93,9 +67,6 @@ export function* iterDefaultLeaves(defaults, prefix = '') {
93
67
  }
94
68
 
95
69
  /**
96
- * Look up a dotted path inside an arbitrary nested object.
97
- * Returns `{ present: boolean, value: unknown }`.
98
- *
99
70
  * @param {object|null|undefined} obj
100
71
  * @param {string} dottedPath
101
72
  */
@@ -1,44 +1,19 @@
1
1
  /**
2
- * `delivery.routing` accessor + framework defaults — Epic #4478 (M7-B), the
3
- * role-scoped-boot-context flip and the ceremony profile.
4
- *
5
- * Stage 6 dropped `delivery.routing.singleDelivery` (the v1 epic
6
- * single-vs-fan-out kill-switch). Story #5313 dropped
7
- * `delivery.routing.freshCriticSampleRate` (the maker-checker sampling
8
- * floor): the standard profile now routes purely off the derived change
9
- * level — high or underivable → fresh critic, low → inline self-eval. v2 has
10
- * one Story delivery path; routing here is only about spawn boot context and
11
- * the ceremony profile.
12
- *
13
- * `delivery.routing.roleScopedAgents` is the **kill-switch for the role-scoped
14
- * boot contexts** (Epic #4478, M7-B). It defaults to `true`: a converted spawn
15
- * (`story-worker`, `acceptance-critic`) boots on its own
16
- * `.claude/agents/<role>.md` system prompt instead of re-paying the full
17
- * `CLAUDE.md` @-import closure, which is the whole payoff of the context diet
18
- * (≈50KB → ≈8KB per spawn). When set to `false`, every converted spawn falls
19
- * back to `subagent_type: general-purpose` — the instant, code-rollback-free
20
- * per-consumer revert, and the universal escape for hosts that ignore
21
- * `.claude/agents/`. Flipping it off never drops a gate: the fallback is the
22
- * full-closure agent that ran before M7-B.
23
- *
24
- * Framework-defaults pattern mirrors `lib/config/ci.js#getCiDelivery`.
2
+ * `delivery.routing`: spawn boot context and ceremony profile. Only `strict`
3
+ * spawns a fresh-context critic; `minimal`/`standard` use the inline
4
+ * self-eval. `roleScopedAgents: false` falls every converted spawn back to
5
+ * `general-purpose` with the full closure — a revert that drops no gate.
25
6
  */
26
7
 
27
8
  export const DELIVERY_ROUTING_DEFAULTS = Object.freeze({
28
9
  roleScopedAgents: true,
29
10
  /** @type {'minimal'|'standard'|'strict'} */
30
11
  ceremonyProfile: 'standard',
31
- /**
32
- * When true (default), attended `/mandrel-deliver` lands through merge in one
33
- * close (`--wait-merge` semantics) instead of stopping at `agent::closing`.
34
- * Operators opt out per-run with `--no-wait-merge`.
35
- */
12
+ /** Land through merge in one close; opt out with `--no-wait-merge`. */
36
13
  closeAndLand: true,
37
14
  });
38
15
 
39
16
  /**
40
- * Normalize ceremony profile; unknown values → `standard`.
41
- *
42
17
  * @param {unknown} value
43
18
  * @returns {'minimal'|'standard'|'strict'}
44
19
  */
@@ -50,10 +25,7 @@ function normalizeCeremonyProfile(value) {
50
25
  }
51
26
 
52
27
  /**
53
- * Read the merged `delivery.routing` block, applying framework defaults for
54
- * any field the operator omitted. Accepts the full resolved config, the bare
55
- * `delivery` bag, or the bare `routing` bag — mirroring `getCiDelivery`'s
56
- * tolerant unwrap so callers can pass whichever shape they hold.
28
+ * Accepts the full config, the `delivery` bag, or the `routing` bag.
57
29
  *
58
30
  * @param {object | null | undefined} config
59
31
  * @returns {{
@@ -1,25 +1,7 @@
1
1
  /**
2
- * Config-explain capability (Story #3523, Epic #3438).
3
- *
4
- * `explainConfig()` answers the operator question "what does each resolved
5
- * config key mean, what is its effective value, and where did that value
6
- * come from?". It pairs with the unified config resolver: the resolver
7
- * decides the *effective* value, this module attributes that value to a
8
- * *source* layer and pins a one-line *meaning* to every key.
9
- *
10
- * Source attribution is two-valued (Story #3690 removed the named
11
- * config-profile layer):
12
- * - `agentrc` — the key is present in the project's resolved `.agentrc.json`
13
- * (including any `.agentrc.local.json` overlay). The operator
14
- * set it.
15
- * - `default` — the project does not carry the key; the framework default
16
- * from `.agents/docs/agentrc-reference.json` applies.
17
- *
18
- * Secret hygiene: no key in the `.agentrc.json` surface is a credential today,
19
- * but the report is defensive — any key whose dotted path matches a
20
- * secret-shaped token (`token`, `secret`, `password`, `apiKey`, `credential`,
21
- * …) has its value redacted to `null` and is flagged `redacted: true`. Only
22
- * the *source* of a secret is ever reported, never the value.
2
+ * `mandrel explain`: each config key's effective value, source (`agentrc`
3
+ * incl. local overlay, or `default`) and one-line meaning. Secret-shaped keys
4
+ * report their source only; the value is redacted to `null`.
23
5
  */
24
6
 
25
7
  import { resolveConfig } from '../config-resolver.js';
@@ -30,11 +12,7 @@ import {
30
12
  } from './defaults.js';
31
13
 
32
14
  /**
33
- * Dotted-path segment patterns that mark a key as secret-bearing. Matched
34
- * case-insensitively against any segment of the dotted path. The
35
- * `.agentrc.json` schema carries none of these today; the guard is forward
36
- * defence so a future credential-shaped key never leaks its value through
37
- * `mandrel explain`.
15
+ * Forward defence: no key matches today.
38
16
  *
39
17
  * @type {readonly RegExp[]}
40
18
  */
@@ -51,12 +29,7 @@ const SECRET_SEGMENT_PATTERNS = Object.freeze([
51
29
  ]);
52
30
 
53
31
  /**
54
- * Curated one-line meanings keyed by dotted config path. Wildcard floor
55
- * paths (`...floors.*`) are covered by the prefix fallbacks below, so this
56
- * map pins the operator-facing keys that benefit from a bespoke gloss. Any
57
- * key without an exact entry falls back to the longest matching prefix gloss,
58
- * then to a top-level block gloss, so every key always reports a non-empty
59
- * meaning.
32
+ * Exact glosses; misses fall back to the longest prefix, then the block.
60
33
  *
61
34
  * @type {Readonly<Record<string, string>>}
62
35
  */
@@ -88,8 +61,6 @@ const KEY_MEANINGS = Object.freeze({
88
61
  'github.projectOwner': 'Owner of the GitHub Projects board.',
89
62
  'github.operatorHandle':
90
63
  'GitHub @handle mentioned when a run needs operator attention.',
91
- 'github.defaultTimeoutMs':
92
- 'Default timeout (ms) for GitHub CLI / API calls when a caller does not supply one.',
93
64
  'github.branchProtection.enforce':
94
65
  'Whether the framework applies branch-protection rules.',
95
66
  'github.branchProtection.requiredChecks':
@@ -118,14 +89,6 @@ const KEY_MEANINGS = Object.freeze({
118
89
  'Tokens identifying the nav-registry SSOT a route-adding Story is expected to reference.',
119
90
 
120
91
  // delivery.*
121
- 'delivery.execution.timeoutMs':
122
- 'Per-execution timeout for orchestrated delivery steps.',
123
- 'delivery.ci.watch.pollIntervalMs':
124
- 'Poll cadence (ms) for the merge/CI watch loop.',
125
- 'delivery.ci.watch.maxPolls':
126
- 'Maximum number of poll probes before the CI watch gives up.',
127
- 'delivery.ci.watch.maxResumes':
128
- 'Maximum times the CI watch may resume after a transient stall.',
129
92
  'delivery.ci.autoMerge':
130
93
  'Merge posture: trust-ci merges on green checks; strict also requires a clean review gate.',
131
94
  'delivery.docsFreshness.paths':
@@ -146,28 +109,20 @@ const KEY_MEANINGS = Object.freeze({
146
109
  'Whether a worktree is removed after a Story closes cleanly.',
147
110
  'delivery.worktreeIsolation.bootstrapFiles':
148
111
  'Files copied into each new worktree (e.g. .env, .mcp.json, local overrides).',
149
- 'delivery.mergeWatch.intervalSeconds':
150
- 'Poll cadence (seconds) for the close-and-land merge wait after the arm.',
151
112
  'delivery.mergeWatch.maxBudgetSeconds':
152
113
  'Cumulative wall-clock budget (seconds) across resumes before the merge wait gives up and blocks.',
153
114
  'delivery.codeReview.providers':
154
115
  'Ordered provider chain the code-review phase consults.',
155
- 'delivery.codeReview.maxFixAttempts':
156
- 'Maximum auto-fix attempts the code-review phase makes.',
157
116
  'delivery.codeReview.autoFixSeverity':
158
117
  'Severity threshold for on-branch code-review remediation (medium fixes 🔴/🟠/🟡, high fixes 🔴/🟠 only; default medium).',
159
118
  'delivery.routing.roleScopedAgents':
160
119
  'Whether delivery spawns boot on role-scoped .claude/agents/<role>.md contexts.',
161
120
  'delivery.routing.ceremonyProfile':
162
- 'Acceptance-ceremony depth: minimal (always inline), standard (derived-level routed), or strict (always fresh).',
121
+ 'Who authors the Story acceptance verdict: minimal and standard = the inline self-eval, strict = a fresh maker-blind critic.',
163
122
  'delivery.routing.closeAndLand':
164
123
  'When true, single-story-close lands through merge in one close (opt out with --no-wait-merge).',
165
- 'delivery.feedbackLoop.auditResultsAutoFile':
166
- 'When true, auto-file non-blocking audit findings as follow-up issues.',
167
124
  'delivery.feedbackLoop.retroProposals':
168
125
  'When true, auto-file actionable retro proposals as follow-up issues.',
169
- 'delivery.quality.formatAutofix.timeoutMs':
170
- 'Bounded timeout (ms) for the close-time format autofix spawn.',
171
126
  'delivery.quality.requireBaselines':
172
127
  'When true, absent baseline artifacts fail close-validation instead of skipping cleanly.',
173
128
  'delivery.quality.navigability.routeGlobs':
@@ -189,10 +144,6 @@ const KEY_MEANINGS = Object.freeze({
189
144
  });
190
145
 
191
146
  /**
192
- * Prefix-keyed fallback glosses. Used when a key has no exact entry in
193
- * `KEY_MEANINGS` (notably wildcard floor paths and per-gate sub-keys). The
194
- * longest matching prefix wins.
195
- *
196
147
  * @type {ReadonlyArray<[string, string]>}
197
148
  */
198
149
  const PREFIX_MEANINGS = Object.freeze([
@@ -200,20 +151,12 @@ const PREFIX_MEANINGS = Object.freeze([
200
151
  'delivery.quality.gates',
201
152
  'Quality-gate threshold/configuration for the delivery close gate.',
202
153
  ],
203
- [
204
- 'delivery.quality.codingGuardrails',
205
- 'Per-commit coding-guardrail threshold.',
206
- ],
207
154
  [
208
155
  'delivery.quality.autoRefresh',
209
156
  'Auto-refresh policy for ratcheted baselines.',
210
157
  ],
211
- [
212
- 'delivery.quality.baselineEpsilon',
213
- 'Tolerance epsilon applied when comparing a quality baseline.',
214
- ],
215
158
  ['delivery.quality', 'Delivery-time quality configuration.'],
216
- ['delivery.mergeWatch', 'Merge-wait poll cadence and wall-clock budget.'],
159
+ ['delivery.mergeWatch', 'Merge-wait posture and wall-clock budget.'],
217
160
  [
218
161
  'delivery.feedbackLoop',
219
162
  'Opt-out toggles for auto-filing non-blocking findings.',
@@ -222,7 +165,7 @@ const PREFIX_MEANINGS = Object.freeze([
222
165
  'delivery.routing',
223
166
  'Delivery-spawn routing and acceptance-ceremony profile.',
224
167
  ],
225
- ['delivery.ci', 'CI-aware delivery namespace (watch, auto-merge).'],
168
+ ['delivery.ci', 'CI-aware delivery namespace (auto-merge, advisory checks).'],
226
169
  [
227
170
  'planning.navigation',
228
171
  'Plan-time navigability reachability gate (route globs + nav registry).',
@@ -239,9 +182,6 @@ const PREFIX_MEANINGS = Object.freeze([
239
182
  ]);
240
183
 
241
184
  /**
242
- * Block-level fallback glosses by top-level prefix. Guarantees every key gets
243
- * a non-empty meaning even if neither the exact map nor a prefix gloss matches.
244
- *
245
185
  * @type {Readonly<Record<string, string>>}
246
186
  */
247
187
  const BLOCK_MEANINGS = Object.freeze({
@@ -253,8 +193,6 @@ const BLOCK_MEANINGS = Object.freeze({
253
193
  });
254
194
 
255
195
  /**
256
- * Is `dottedPath` a secret-bearing key whose value must be redacted?
257
- *
258
196
  * @param {string} dottedPath
259
197
  * @returns {boolean}
260
198
  */
@@ -267,8 +205,6 @@ export function isSecretKey(dottedPath) {
267
205
  }
268
206
 
269
207
  /**
270
- * Resolve the one-line meaning for a dotted config key.
271
- *
272
208
  * @param {string} dottedPath
273
209
  * @returns {string}
274
210
  */
@@ -276,7 +212,6 @@ export function meaningFor(dottedPath) {
276
212
  if (Object.hasOwn(KEY_MEANINGS, dottedPath)) {
277
213
  return KEY_MEANINGS[dottedPath];
278
214
  }
279
- // Longest matching prefix wins.
280
215
  let best = null;
281
216
  for (const [prefix, gloss] of PREFIX_MEANINGS) {
282
217
  if (
@@ -293,12 +228,9 @@ export function meaningFor(dottedPath) {
293
228
  }
294
229
 
295
230
  /**
296
- * Attribute a key's effective value to a source layer and capture the value
297
- * the resolver actually applies.
298
- *
299
231
  * @param {string} dottedPath
300
- * @param {object|null} rawAgentrc The resolver's `raw` (merged agentrc+local), or null.
301
- * @param {unknown} defaultValue The framework default for this key.
232
+ * @param {object|null} rawAgentrc — merged agentrc + local overlay.
233
+ * @param {unknown} defaultValue
302
234
  * @returns {{ source: 'agentrc'|'default', value: unknown }}
303
235
  */
304
236
  function attribute(dottedPath, rawAgentrc, defaultValue) {
@@ -310,12 +242,7 @@ function attribute(dottedPath, rawAgentrc, defaultValue) {
310
242
  }
311
243
 
312
244
  /**
313
- * Build the config-explain report: one entry per known config key, each
314
- * carrying its effective value, source layer, and one-line meaning.
315
- *
316
245
  * @param {{ cwd?: string }} [opts]
317
- * - `cwd`: project root whose `.agentrc.json` is resolved (default: the
318
- * framework root via `resolveConfig`).
319
246
  * @returns {Array<{
320
247
  * key: string,
321
248
  * value: unknown,
@@ -21,18 +21,6 @@ export const COVERAGE_GATE = {
21
21
  'Repo-relative path to the Istanbul `coverage-final.json` the capture step writes and the gate reads.',
22
22
  default: COVERAGE_GATE_DEFAULTS.coveragePath,
23
23
  },
24
- // Story #2136 / Task #2142 — bounded timeout for `npm run test:coverage`.
25
- // Wired into `runCapture` via `spawnSync({ timeout, killSignal })`. A
26
- // SIGKILL fired by the timeout is translated to exit code 124 (the GNU
27
- // `timeout` convention) so close-validation can branch on "hang" vs.
28
- // "test failed".
29
- timeoutMs: {
30
- type: 'integer',
31
- minimum: 1,
32
- description:
33
- 'Bounded timeout (ms) for the `npm run test:coverage` capture spawn. A SIGKILL at the budget boundary maps to exit 124 so close-validation can tell a hang from a test failure.',
34
- default: COVERAGE_GATE_DEFAULTS.timeoutMs,
35
- },
36
24
  },
37
25
  additionalProperties: false,
38
26
  };
@@ -1,31 +1,8 @@
1
1
  /* node:coverage ignore file -- AJV schema declaration (data-as-code) */
2
2
 
3
3
  /**
4
- * `delivery.quality.gates.crap.incrementalCoverage` — the two independent
5
- * full-suite economies (Story #4981, split by Story #5173).
6
- *
7
- * Split into its own module (rather than an inline property literal on
8
- * `CRAP_GATE`) so the schema addition lands as a new file, not a same-file
9
- * expansion of `crap.schema.js` — the file this module's sole export is
10
- * spread into.
11
- *
12
- * The two switches are deliberately independent because they are not equally
13
- * safe:
14
- *
15
- * - **`skipWhenUnchanged`** (default `true`) decides *whether* to capture:
16
- * no changed file under `crap.targetDirs` versus `baseRef` means no
17
- * capture at all. It is a pure saving — the gates score exactly what they
18
- * scored before, because nothing they score moved.
19
- * - **`baselineJoin`** (default `false`) loosens gate semantics: the CRAP
20
- * join resolves a method in an untouched file from its committed baseline
21
- * row instead of requiring fresh coverage for it.
22
- *
23
- * Bundling them under one `enabled` switch is what forced the earlier default
24
- * flip to be reverted. `enabled` survives as a deprecated alias that sets
25
- * both.
26
- *
27
- * Neither switch narrows the capture run itself: a capture that does happen is
28
- * the ordinary full `npm run test:coverage` (Story #5065).
4
+ * `delivery.quality.gates.crap.incrementalCoverage`; the two switches stay
5
+ * independent because only `baselineJoin` loosens the gate.
29
6
  */
30
7
  export const INCREMENTAL_COVERAGE_SCHEMA = {
31
8
  type: 'object',
@@ -44,16 +21,11 @@ export const INCREMENTAL_COVERAGE_SCHEMA = {
44
21
  'Let the CRAP join resolve a method in a file the diff did not touch from its committed baseline row instead of requiring fresh coverage for it. A gate loosening, not a saving — defaults to false.',
45
22
  default: false,
46
23
  },
47
- enabled: {
48
- type: 'boolean',
49
- description:
50
- 'DEPRECATED alias for setting both `skipWhenUnchanged` and `baselineJoin`. Prefer the two switches: they are not equally safe, and bundling them is why the earlier default flip was reverted. Either explicit switch overrides this alias.',
51
- },
52
24
  baseRef: {
53
25
  type: 'string',
54
26
  minLength: 1,
55
27
  description:
56
- 'Git ref the changed-file set is computed against. Omitted falls back to the gate’s own `--ref` (`main`).',
28
+ 'Default git ref the changed-file set is computed against, for a caller that passes no `--ref`. A `--ref` the caller named wins over this value, so a caller that anchors another gate on the same ref — `.husky/pre-push`, which passes `--ref origin/main` and then previews `--changed-since origin/main` — resolves ONE scope for both steps (Story #5365). Omitted and unpassed, the gate’s own default `main` applies.',
57
29
  },
58
30
  },
59
31
  additionalProperties: false,
@@ -2,11 +2,7 @@
2
2
 
3
3
  import { CRAP_GATE_DEFAULTS } from '../quality.js';
4
4
  import { INCREMENTAL_COVERAGE_SCHEMA } from './crap-incremental-coverage.schema.js';
5
- import {
6
- gateBase,
7
- LIST_OR_EXTENDER_OF_STRINGS,
8
- SAFE_STRING,
9
- } from './shared.js';
5
+ import { gateBase, LIST_OR_EXTENDER_OF_STRINGS } from './shared.js';
10
6
 
11
7
  export const CRAP_GATE = {
12
8
  type: 'object',
@@ -38,7 +34,6 @@ export const CRAP_GATE = {
38
34
  'When true, the gate refuses to score without a coverage artifact rather than silently reporting complexity-only rows.',
39
35
  default: CRAP_GATE_DEFAULTS.requireCoverage,
40
36
  },
41
- // Story #4775 — fail-closed floor on the per-method coverage JOIN.
42
37
  minMethodResolutionRate: {
43
38
  type: 'number',
44
39
  minimum: 0,
@@ -46,34 +41,6 @@ export const CRAP_GATE = {
46
41
  description:
47
42
  'Fail-closed floor on the per-method coverage JOIN (Story #4775): the fraction of methods that must resolve a coverage entry, counted only over files that HAVE one, before `update-crap-baseline.js` will persist. A broken join is silent by construction — unresolved methods are simply absent — so the updater refuses rather than writing a thin baseline and logging it as success. Not enforced below 25 joinable methods, where a diff-scoped run’s rate is noise. Default 0.75; a healthy repo resolves ~98%.',
48
43
  },
49
- friction: {
50
- type: 'object',
51
- description:
52
- 'Friction-signal wiring for a CRAP baseline regression, so a recurring one can reach the actionable threshold.',
53
- properties: {
54
- markerKey: {
55
- type: 'string',
56
- minLength: 1,
57
- description: 'Signal marker key the regression is recorded under.',
58
- },
59
- },
60
- additionalProperties: false,
61
- default: { ...CRAP_GATE_DEFAULTS.friction },
62
- },
63
- refreshTag: {
64
- ...SAFE_STRING,
65
- minLength: 1,
66
- description:
67
- 'Commit-subject substring that acknowledges a deliberate CRAP baseline refresh in the compared range. A range commit carrying it that also touches the baseline file demotes head-vs-base regressions; floors stay enforced.',
68
- default: CRAP_GATE_DEFAULTS.refreshTag,
69
- },
70
- refreshTimeoutMs: {
71
- type: 'integer',
72
- minimum: 1,
73
- description:
74
- 'Bounded timeout (ms) for `npm run crap:update` spawned by the baseline-attribution refresh path. Mirrors `coverage.timeoutMs`: a SIGKILL fired at the budget boundary maps to exit 124 so the close orchestrator can flip the Story to `agent::blocked`. Default 60000 (Story #2165).',
75
- default: CRAP_GATE_DEFAULTS.refreshTimeoutMs,
76
- },
77
44
  ignoreGlobs: {
78
45
  type: 'array',
79
46
  items: { type: 'string', minLength: 1 },
@@ -5,7 +5,7 @@ import { gateBase, LIST_OR_EXTENDER_OF_STRINGS } from './shared.js';
5
5
  export const DUPLICATION_GATE = {
6
6
  type: 'object',
7
7
  description:
8
- 'Code-duplication (DRY) gate (Story #3664). Shares the gate base and adds the scan-scope extras: the `targetDirs` the duplication scanner walks, a bounded refresh timeout mirroring crap/MI, and `ignoreGlobs` to exclude files from the scan.',
8
+ 'Code-duplication (DRY) gate (Story #3664). Shares the gate base and adds the scan-scope extras: the `targetDirs` the duplication scanner walks and `ignoreGlobs` to exclude files from the scan.',
9
9
  properties: {
10
10
  ...gateBase({
11
11
  enabled: false,
@@ -19,13 +19,6 @@ export const DUPLICATION_GATE = {
19
19
  "Directories whose JS sources the duplication (DRY) gate scans for copy-paste clones. Mandrel ships a `src/`-centric default; projects whose executable code lives elsewhere (e.g. this repo's `.agents/scripts/`) override here. The framework default is intentionally not auto-discovered, so an override is the explicit, auditable signal (Story #3664).",
20
20
  default: ['src'],
21
21
  },
22
- refreshTimeoutMs: {
23
- type: 'integer',
24
- minimum: 1,
25
- description:
26
- 'Bounded timeout (ms) for `npm run duplication:update` spawned by the baseline-attribution refresh path. Mirrors `crap.refreshTimeoutMs` / `coverage.timeoutMs`: a SIGKILL fired at the budget boundary maps to exit 124. Default 60000 (Story #3664).',
27
- default: 60000,
28
- },
29
22
  ignoreGlobs: {
30
23
  type: 'array',
31
24
  items: { type: 'string', minLength: 1 },
@@ -4,34 +4,19 @@ import { BUNDLE_SIZE_GATE } from './bundle-size.schema.js';
4
4
  import { COVERAGE_GATE } from './coverage.schema.js';
5
5
  import { CRAP_GATE } from './crap.schema.js';
6
6
  import { DUPLICATION_GATE } from './duplication.schema.js';
7
- import { LIGHTHOUSE_GATE } from './lighthouse.schema.js';
8
- import { LINT_GATE } from './lint.schema.js';
9
7
  import { MAINTAINABILITY_GATE } from './maintainability.schema.js';
10
8
  import { MUTATION_GATE } from './mutation.schema.js';
11
9
 
12
- /**
13
- * Composite `delivery.quality.gates` schema — closed shape.
14
- *
15
- * Split from the former `lib/config-gates-schema.js` aggregate
16
- * (Story #2987) into per-gate sub-schema files under
17
- * `lib/config/gates/`. Shared fragments (`gateBase()`, `SAFE_STRING`,
18
- * `TOLERANCE_SCHEMA`, `FLOORS_SCHEMA`, `COMPONENTS_SCHEMA`,
19
- * `LIST_OR_EXTENDER_OF_STRINGS`, `NULLABLE_NONEMPTY_SAFE_STRING`) live
20
- * in `./shared.js`. Each per-gate file exports one sub-schema literal
21
- * with the gate-specific extras layered on top of `gateBase()`, passing
22
- * that gate's own base-field defaults (Story #5007).
23
- */
10
+ /** Composite `delivery.quality.gates` schema — closed shape. */
24
11
  export const GATES_SCHEMA = {
25
12
  type: 'object',
26
13
  description:
27
- 'The eight quality gates, each sharing the `{ enabled, baselinePath, tolerance, floors, components }` base.',
14
+ 'The six quality gates, each sharing the `{ enabled, baselinePath, tolerance, floors, components }` base.',
28
15
  properties: {
29
- lint: LINT_GATE,
30
16
  coverage: COVERAGE_GATE,
31
17
  crap: CRAP_GATE,
32
18
  maintainability: MAINTAINABILITY_GATE,
33
19
  mutation: MUTATION_GATE,
34
- lighthouse: LIGHTHOUSE_GATE,
35
20
  'bundle-size': BUNDLE_SIZE_GATE,
36
21
  duplication: DUPLICATION_GATE,
37
22
  },
@@ -1,11 +1,7 @@
1
1
  /* node:coverage ignore file -- AJV schema declaration (data-as-code) */
2
2
 
3
3
  import { MAINTAINABILITY_GATE_DEFAULTS } from '../quality.js';
4
- import {
5
- gateBase,
6
- LIST_OR_EXTENDER_OF_STRINGS,
7
- SAFE_STRING,
8
- } from './shared.js';
4
+ import { gateBase, LIST_OR_EXTENDER_OF_STRINGS } from './shared.js';
9
5
 
10
6
  export const MAINTAINABILITY_GATE = {
11
7
  type: 'object',
@@ -24,21 +20,6 @@ export const MAINTAINABILITY_GATE = {
24
20
  "Directories whose JS sources the maintainability gate scores. Mandrel ships a `src/`-centric default; projects whose executable code lives elsewhere (e.g. this repo's `.agents/scripts/` plus `tests/`) override here. The framework default is intentionally not auto-discovered, so an override is the explicit, auditable signal.",
25
21
  default: [...MAINTAINABILITY_GATE_DEFAULTS.targetDirs],
26
22
  },
27
- // Story #4731 — commit-subject substring that acknowledges a deliberate
28
- // maintainability baseline refresh in the compared range.
29
- refreshTag: {
30
- ...SAFE_STRING,
31
- minLength: 1,
32
- description:
33
- "Commit-subject substring that acknowledges a deliberate maintainability baseline refresh in the compared range. Mirrors the CRAP gate's `refreshTag`; a range commit carrying it that touches the baseline file demotes head-vs-base regressions (floors still enforced).",
34
- },
35
- refreshTimeoutMs: {
36
- type: 'integer',
37
- minimum: 1,
38
- description:
39
- 'Bounded timeout (ms) for `npm run maintainability:update` spawned by the baseline-attribution refresh path. Mirrors `coverage.timeoutMs`: a SIGKILL fired at the budget boundary maps to exit 124 so the close orchestrator can flip the Story to `agent::blocked`. Default 60000 (Story #2165).',
40
- default: MAINTAINABILITY_GATE_DEFAULTS.refreshTimeoutMs,
41
- },
42
23
  ignoreGlobs: {
43
24
  type: 'array',
44
25
  items: { type: 'string', minLength: 1 },
@@ -1,6 +1,6 @@
1
1
  /* node:coverage ignore file -- AJV schema declaration (data-as-code) */
2
2
 
3
- import { gateBase, NULLABLE_NONEMPTY_SAFE_STRING } from './shared.js';
3
+ import { gateBase } from './shared.js';
4
4
 
5
5
  export const MUTATION_GATE = {
6
6
  type: 'object',
@@ -13,12 +13,6 @@ export const MUTATION_GATE = {
13
13
  tolerance: { kind: 'percent', value: 0 },
14
14
  floors: { '*': { score: 60 } },
15
15
  }),
16
- strykerConfigPath: {
17
- ...NULLABLE_NONEMPTY_SAFE_STRING,
18
- description:
19
- 'Repo-relative path to the Stryker config. `null` lets Stryker resolve its own default.',
20
- default: null,
21
- },
22
16
  },
23
17
  additionalProperties: false,
24
18
  };