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,26 +1,15 @@
1
1
  // lib/migrations/steps/2.2.0-retire-epic-ac-tags.js
2
2
  /**
3
- * Story #4604 — strip the retired `@epic-<id>-ac-N` Gherkin AC tag namespace
4
- * from consumer feature files.
5
- *
6
- * The v2 Epic removal deleted `acceptance-spec-reconciler.js`, the only
7
- * consumer of the namespaced per-Epic AC tags, and the `/mandrel-plan` authoring
8
- * prompt no longer mandates them. Surviving tags in consumer `.feature`
9
- * files are inert and violate the gherkin-standards tag taxonomy's
10
- * no-ad-hoc-tags rule, so this step removes them: each `@epic-<digits>-ac-<digits>`
11
- * token is deleted from tag lines, a tag line left with no tags is dropped
12
- * entirely, and every other tag and line is preserved byte-for-byte. Files
13
- * with no stale tags are never rewritten.
3
+ * Strip the inert, taxonomy-violating `@epic-<id>-ac-N` tags from consumer
4
+ * feature files; a tag line left empty is dropped, everything else is kept
5
+ * byte-for-byte, and untouched files are never rewritten.
14
6
  */
15
7
 
16
8
  import nodeFs from 'node:fs';
17
9
  import path from 'node:path';
18
10
 
19
11
  /**
20
- * Mirror of `CANONICAL_FEATURE_ROOTS` in
21
- * `.agents/scripts/lib/bdd-runner-detect.js`. Duplicated deliberately:
22
- * `lib/` runs from the installed npm package inside a consumer project and
23
- * must not import from the materialized `.agents/` payload.
12
+ * Mirrors `bdd-runner-detect.js`: `lib/` must not import the `.agents/` payload.
24
13
  */
25
14
  const CANONICAL_FEATURE_ROOTS = Object.freeze([
26
15
  'tests/features',
@@ -30,18 +19,11 @@ const CANONICAL_FEATURE_ROOTS = Object.freeze([
30
19
 
31
20
  const EPIC_AC_TAG_RE = /@epic-\d+-ac-\d+/;
32
21
 
33
- /**
34
- * A Gherkin tag line: optional indentation followed by one or more
35
- * whitespace-separated `@tag` tokens and nothing else.
36
- */
37
22
  const TAG_LINE_RE = /^(\s*)(@\S+(?:\s+@\S+)*)\s*$/;
38
23
 
39
24
  /**
40
- * Recursively collect `.feature` file paths under `root`.
41
- *
42
25
  * @param {string} root
43
- * @param {typeof nodeFs} [fsImpl] Filesystem seam; defaults to the real
44
- * `node:fs` per `.agents/rules/test-seams.md` rule 1.
26
+ * @param {typeof nodeFs} [fsImpl]
45
27
  * @returns {string[]}
46
28
  */
47
29
  function collectFeatureFiles(root, fsImpl = nodeFs) {
@@ -72,11 +54,8 @@ function collectFeatureFiles(root, fsImpl = nodeFs) {
72
54
 
73
55
  /**
74
56
  * @param {unknown} ctx
75
- * @param {typeof nodeFs} [fsImpl] Filesystem seam; forwarded to
76
- * {@link collectFeatureFiles} rather than re-acquired there
77
- * (`.agents/rules/test-seams.md` rule 4).
78
- * @returns {string[]} Absolute paths of every `.feature` file under the
79
- * canonical feature roots that exist in the consumer tree.
57
+ * @param {typeof nodeFs} [fsImpl]
58
+ * @returns {string[]}
80
59
  */
81
60
  function resolveFeatureFiles(ctx, fsImpl = nodeFs) {
82
61
  const projectRoot = ctx?.projectRoot ?? process.cwd();
@@ -86,10 +65,6 @@ function resolveFeatureFiles(ctx, fsImpl = nodeFs) {
86
65
  }
87
66
 
88
67
  /**
89
- * Strip retired `@epic-<id>-ac-<n>` tokens from one file's content.
90
- * Only tag lines are touched; a tag line whose every tag was retired is
91
- * dropped. Returns the original string when nothing matched.
92
- *
93
68
  * @param {string} content
94
69
  * @returns {string}
95
70
  */
@@ -122,9 +97,7 @@ export const retireEpicAcTags = {
122
97
  '(their reconciler consumer was deleted in the v2 Epic removal)',
123
98
  /**
124
99
  * @param {{ projectRoot?: string, fs?: typeof nodeFs }} [ctx]
125
- * @param {typeof nodeFs} [fsImpl] Optional final filesystem seam; defaults
126
- * to `ctx.fs` when the migration runner threads one, else the real
127
- * `node:fs` (`.agents/rules/test-seams.md` rule 1).
100
+ * @param {typeof nodeFs} [fsImpl]
128
101
  * @returns {boolean}
129
102
  */
130
103
  detect(ctx, fsImpl = ctx?.fs ?? nodeFs) {
@@ -138,9 +111,7 @@ export const retireEpicAcTags = {
138
111
  },
139
112
  /**
140
113
  * @param {{ projectRoot?: string, fs?: typeof nodeFs }} [ctx]
141
- * @param {typeof nodeFs} [fsImpl] Optional final filesystem seam; defaults
142
- * to `ctx.fs` when the migration runner threads one, else the real
143
- * `node:fs` (`.agents/rules/test-seams.md` rule 1).
114
+ * @param {typeof nodeFs} [fsImpl]
144
115
  * @returns {void}
145
116
  */
146
117
  apply(ctx, fsImpl = ctx?.fs ?? nodeFs) {
@@ -1,17 +1,5 @@
1
1
  // lib/migrations/steps/2.20.0-retire-codebase-snapshot.js
2
- /**
3
- * Story #4811 — strip the retired `planning.codebaseSnapshot` block from a
4
- * consumer's `.agentrc.json` and from the `.agentrc.local.json` overlay an
5
- * operator pins in `.agentrc.local.json`.
6
- *
7
- * Spec authoring is grounded by targeted retrieval plus the Phase 8
8
- * file-assumption gate, so the snapshot block has no consumer; the block
9
- * carries `additionalProperties: false`, so a config still setting it fails
10
- * validation on upgrade rather than warning.
11
- *
12
- * `planning` is optional, so a config that carried nothing but the snapshot
13
- * does not keep an orphan `planning: {}`.
14
- */
2
+ /** Strip the reader-less `planning.codebaseSnapshot` block. */
15
3
 
16
4
  import { createRetireAgentrcKeyStep } from '../helpers/retire-agentrc-key.js';
17
5
 
@@ -1,32 +1,7 @@
1
1
  // lib/migrations/steps/2.32.0-retire-lint-baseline-command.js
2
2
  /**
3
- * Story #5004 — strip the retired `project.commands.lintBaseline` from a
4
- * consumer's config. The framework-owned lint-baseline capture CLI is gone,
5
- * and the `commands` block carries `additionalProperties: false`, so a
6
- * config still naming the command fails validation on upgrade.
7
- *
8
- * It sweeps **both** config surfaces. `config-resolver.js` deep-merges
9
- * `.agentrc.local.json` over `.agentrc.json` and validates the result, so a
10
- * key surviving in the operator's overlay fails exactly as a base one would.
11
- * Sweeping only the base would report "nothing to migrate" and leave that
12
- * consumer hard-broken with no self-service remedy — re-running
13
- * `mandrel update` would keep reporting clean — while this commit's
14
- * `BREAKING CHANGE:` footer promises the upgrade deletes the key for them.
15
- *
16
- * The `lint` baseline KIND survives for consumers whose own linter writes
17
- * `baselines/lint.json`; only the framework-owned capture shell is gone, so
18
- * nothing here touches the baseline file or the gate config.
19
- *
20
- * An emptied `commands` block is deliberately left in place (`pruneDepth: 0`):
21
- * unlike `planning.complexityGate`, `project` is a required block and an empty
22
- * `commands` object is valid against the schema, so pruning it would be a
23
- * cosmetic edit to a config the consumer owns.
24
- *
25
- * This step is also the carrier for the release note #5004 never emitted: its
26
- * commit ships the `BREAKING CHANGE:` footer that the squash subject on `main`
27
- * (`227e1af4`) lacks, and which release-please therefore could not surface.
28
- * See `single-story-close/phases/conventional-subject.js` for the close-side
29
- * fix that stops the next one being lost.
3
+ * Strip `project.commands.lintBaseline` (its capture CLI is gone). An emptied
4
+ * `commands` is kept: `project` is required and `{}` is valid.
30
5
  */
31
6
 
32
7
  import { createRetireAgentrcKeyStep } from '../helpers/retire-agentrc-key.js';
@@ -1,28 +1,7 @@
1
1
  // lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js
2
2
  /**
3
- * Story #5313 — the delivery diet. Strip the retired `delivery.*` keys from a
4
- * consumer's config:
5
- *
6
- * - `delivery.routing.freshCriticSampleRate` — the maker-checker sampling
7
- * floor is gone; the standard profile routes purely off the derived
8
- * change level (high or underivable → fresh critic, low → inline).
9
- * - `delivery.codeReview.maxFixScopeFiles` — the auto-fix file-count
10
- * ceiling bounded remediation by count rather than by risk.
11
- * - `delivery.signals` (`rework.editsPerFile`, `retry.repeatCount`) — the
12
- * detector thresholds and `SIGNALS_DEFAULTS` are retired wholesale.
13
- * - `delivery.quality.codingGuardrails.cyclomaticMustFix` — the cyclomatic
14
- * ratchet keeps its fixed ceiling of 12; `cyclomaticFlag` stays advisory.
15
- *
16
- * Every affected block carries `additionalProperties: false`, so a config
17
- * still setting any of them fails validation on upgrade rather than warning.
18
- * It sweeps **both** config surfaces (`.agentrc.json` and the gitignored
19
- * `.agentrc.local.json`), because `config-resolver.js` deep-merges the
20
- * overlay before the AJV gate runs.
21
- *
22
- * Pruning: `delivery.signals` is removed whole (`pruneDepth: 1` prunes an
23
- * emptied `delivery`); the nested keys prune their emptied ancestors up to
24
- * `delivery` itself. `delivery` is optional, so an emptied block is removed
25
- * rather than left as `{}`. A sibling key that survives keeps its block.
3
+ * Strip the retired `delivery.*` limit knobs; `delivery` is optional, so
4
+ * emptied ancestors are pruned up to it.
26
5
  */
27
6
 
28
7
  import { createRetireAgentrcKeyStep } from '../helpers/retire-agentrc-key.js';
@@ -1,32 +1,7 @@
1
1
  // lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js
2
2
  /**
3
- * Story #5312 — the planning diet. Strip the ten retired `planning.*` keys
4
- * from a consumer's config:
5
- *
6
- * - `planning.complexityGate` — the plan-side lite claim and its persist
7
- * backstop are gone; nothing reads the switch.
8
- * - `planning.riskHeuristics` — the phrase list was empty in every consumer
9
- * that resolved it, and the critic trigger that matched it went with the
10
- * consolidation critic.
11
- * - `planning.failOnSharedEditors`, `planning.requireExplicitCrossStoryDeps`,
12
- * `planning.failOnRegistryConflicts`, `planning.failOnLargeFanOut`,
13
- * `planning.largeFanOutThreshold`, `planning.crossCuttingRegistries` —
14
- * every conflict finding is advisory now, and the registry and fan-out
15
- * findings no longer exist.
16
- * - `planning.memoryPool.staleAfterDays`, `planning.memoryPool.growthDelta`
17
- * — the memory-hygiene advisory keeps only its index-byte arm.
18
- *
19
- * The `planning` block carries `additionalProperties: false`, so a config
20
- * still setting any of them fails validation on upgrade rather than warning.
21
- * It sweeps **both** config surfaces (`.agentrc.json` and the gitignored
22
- * `.agentrc.local.json`), because `config-resolver.js` deep-merges the
23
- * overlay before the AJV gate runs.
24
- *
25
- * Pruning: the two `memoryPool` keys prune the `memoryPool` object when it
26
- * empties and then `planning` itself (`pruneDepth: 2`); the top-level keys
27
- * prune `planning` (`pruneDepth: 1`). `planning` is optional, so an emptied
28
- * block is removed rather than left as `{}`. A `memoryPool` that still
29
- * carries `indexByteCeiling` survives untouched.
3
+ * Strip the retired `planning.*` limit knobs; `planning` is optional, so
4
+ * emptied blocks are pruned.
30
5
  */
31
6
 
32
7
  import { createRetireAgentrcKeyStep } from '../helpers/retire-agentrc-key.js';
@@ -1,26 +1,7 @@
1
1
  // lib/migrations/steps/2.60.0-retire-audit-results-autofile.js
2
2
  /**
3
- * Story #5366 — strip the retired `delivery.feedbackLoop.auditResultsAutoFile`
4
- * key from a consumer's config.
5
- *
6
- * The audit-results graduator this toggle switched was deleted two releases
7
- * ago, so the key had no runtime reader left: Story #5341's flip of its
8
- * default from `true` to `false` changed nothing at all, because nothing read
9
- * either value. A toggle with no reader is worse than no toggle — it reads as
10
- * a live control, and a consumer that set it was configuring nothing.
11
- *
12
- * `delivery.feedbackLoop` carries `additionalProperties: false`, so a config
13
- * that still sets the key fails AJV validation outright on upgrade rather than
14
- * warning. That is what makes this a migration rather than a docs change.
15
- *
16
- * Both config surfaces are swept: `config-resolver.js` deep-merges
17
- * `.agentrc.local.json` over `.agentrc.json` **before** the AJV gate runs, so
18
- * a key surviving in the gitignored overlay fails exactly as a base one would.
19
- *
20
- * Pruning: `pruneDepth: 2` prunes an emptied `feedbackLoop` and then an
21
- * emptied `delivery`, both of which are optional. The sibling `retroProposals`
22
- * toggle is deliberately untouched — it has a live reader — so a consumer who
23
- * set both keeps its block.
3
+ * Strip `delivery.feedbackLoop.auditResultsAutoFile`: it had no reader. The
4
+ * sibling `retroProposals` is live and stays.
24
5
  */
25
6
 
26
7
  import { createRetireAgentrcKeyStep } from '../helpers/retire-agentrc-key.js';
@@ -0,0 +1,333 @@
1
+ // lib/migrations/steps/strip-removed-agentrc-keys.js
2
+ /**
3
+ * Strip the `.agentrc` keys the config-surface cut removed (removed gates,
4
+ * zero-reader keys, tuning keys folded into constants) from both config
5
+ * surfaces, reporting each one's replacement — and a `behaviour change` line
6
+ * when the consumer's value differed, so the upgrade never silently changes
7
+ * delivery. Only `delivery`/`planning` (optional) ancestors are pruned.
8
+ */
9
+
10
+ import nodeFs from 'node:fs';
11
+ import path from 'node:path';
12
+
13
+ const AGENTRC_FILENAMES = Object.freeze([
14
+ '.agentrc.json',
15
+ '.agentrc.local.json',
16
+ ]);
17
+
18
+ const PRUNABLE_ROOTS = new Set(['delivery', 'planning']);
19
+
20
+ /**
21
+ * @param {string} dotted
22
+ * @param {string} constant
23
+ * @param {unknown} value
24
+ */
25
+ const folded = (dotted, constant, value) => ({
26
+ path: dotted.split('.'),
27
+ constant,
28
+ value,
29
+ });
30
+
31
+ /**
32
+ * `alwaysChanges`: removal changes behaviour for anyone who had it on.
33
+ *
34
+ * @param {string} dotted
35
+ * @param {string} reason
36
+ * @param {{ alwaysChanges?: boolean }} [opts]
37
+ */
38
+ const removed = (dotted, reason, { alwaysChanges = false } = {}) => ({
39
+ path: dotted.split('.'),
40
+ reason,
41
+ alwaysChanges,
42
+ });
43
+
44
+ const REMOVED_AGENTRC_KEYS = Object.freeze([
45
+ removed(
46
+ 'delivery.quality.gates.lint',
47
+ 'the lint baseline gate was removed (npm run lint still runs as a close gate)',
48
+ { alwaysChanges: true },
49
+ ),
50
+ removed(
51
+ 'delivery.quality.gates.lighthouse',
52
+ 'the lighthouse baseline gate was removed',
53
+ { alwaysChanges: true },
54
+ ),
55
+ removed('delivery.quality.baselineEpsilon.lint', 'its gate was removed'),
56
+ removed(
57
+ 'delivery.quality.baselineEpsilon.lighthouse',
58
+ 'its gate was removed',
59
+ ),
60
+ removed('delivery.quality.gates.mutation.strykerConfigPath', 'no reader'),
61
+ removed('delivery.auditToStories.autoComment', 'no reader'),
62
+ removed('delivery.codeReview.providerConfig', 'no reader'),
63
+ removed('delivery.quality.gates.crap.friction', 'no reader'),
64
+ removed('delivery.quality.gates.crap.refreshTimeoutMs', 'no reader'),
65
+ removed(
66
+ 'delivery.quality.gates.maintainability.refreshTimeoutMs',
67
+ 'no reader',
68
+ ),
69
+ removed('delivery.quality.gates.duplication.refreshTimeoutMs', 'no reader'),
70
+ removed(
71
+ 'delivery.quality.gates.crap.incrementalCoverage.enabled',
72
+ 'deprecated alias — set skipWhenUnchanged / baselineJoin instead',
73
+ { alwaysChanges: true },
74
+ ),
75
+ folded('delivery.quality.gateScoping.scope', 'GATE_SCOPING.scope', 'diff'),
76
+ folded(
77
+ 'delivery.quality.gateScoping.diffRef',
78
+ 'GATE_SCOPING.diffRef',
79
+ 'main',
80
+ ),
81
+ folded(
82
+ 'delivery.quality.gates.crap.refreshTag',
83
+ 'BASELINE_REFRESH_TAG',
84
+ 'baseline-refresh:',
85
+ ),
86
+ folded(
87
+ 'delivery.quality.gates.maintainability.refreshTag',
88
+ 'BASELINE_REFRESH_TAG',
89
+ 'baseline-refresh:',
90
+ ),
91
+ folded(
92
+ 'delivery.quality.gates.coverage.timeoutMs',
93
+ 'COVERAGE_GATE_DEFAULTS.timeoutMs',
94
+ 600000,
95
+ ),
96
+ folded(
97
+ 'delivery.quality.formatAutofix.timeoutMs',
98
+ 'FORMAT_AUTOFIX_TIMEOUT_MS',
99
+ 60000,
100
+ ),
101
+ folded(
102
+ 'delivery.quality.codingGuardrails.cyclomaticFlag',
103
+ 'CODING_GUARDRAILS.cyclomaticFlag',
104
+ 8,
105
+ ),
106
+ folded(
107
+ 'delivery.quality.codingGuardrails.requireSiblingTest',
108
+ 'CODING_GUARDRAILS.requireSiblingTest',
109
+ false,
110
+ ),
111
+ folded(
112
+ 'delivery.quality.autoRefresh.crapJumpCap',
113
+ 'AUTO_REFRESH_DEFAULTS.crapJumpCap',
114
+ 5,
115
+ ),
116
+ folded(
117
+ 'delivery.quality.autoRefresh.scope',
118
+ 'AUTO_REFRESH_DEFAULTS.scope',
119
+ 'diff',
120
+ ),
121
+ ...Object.entries({
122
+ maintainability: 0.5,
123
+ crap: 0.5,
124
+ coverage: 0.1,
125
+ mutation: 0.5,
126
+ 'bundle-size': 1024,
127
+ duplication: 0.5,
128
+ }).map(([kind, value]) =>
129
+ folded(
130
+ `delivery.quality.baselineEpsilon.${kind}`,
131
+ `BASELINE_EPSILON.${kind}`,
132
+ value,
133
+ ),
134
+ ),
135
+ folded('delivery.codeReview.maxFixAttempts', 'none (no reader)', 3),
136
+ folded('github.defaultTimeoutMs', 'GH_DEFAULT_TIMEOUT_MS', 60000),
137
+ folded(
138
+ 'delivery.ci.watch.pollIntervalMs',
139
+ 'WATCH_DEFAULTS.pollIntervalMs (--poll-interval-ms)',
140
+ 10000,
141
+ ),
142
+ folded(
143
+ 'delivery.ci.watch.maxPolls',
144
+ 'WATCH_DEFAULTS.maxPolls (--max-polls)',
145
+ 180,
146
+ ),
147
+ folded(
148
+ 'delivery.ci.watch.maxResumes',
149
+ 'WATCH_DEFAULTS.maxResumes (--max-resumes)',
150
+ 3,
151
+ ),
152
+ folded(
153
+ 'delivery.ci.watch.attachWindowMs',
154
+ 'WATCH_DEFAULTS.attachWindowMs (--attach-window-ms)',
155
+ 1200000,
156
+ ),
157
+ folded(
158
+ 'delivery.execution.timeoutMs',
159
+ 'LIMITS_DEFAULTS.executionTimeoutMs',
160
+ 600000,
161
+ ),
162
+ folded(
163
+ 'delivery.execution.requireCreditedCapture',
164
+ 'off (coverage-capture --require-credited)',
165
+ false,
166
+ ),
167
+ folded(
168
+ 'delivery.tempRetention.staleDays',
169
+ 'TEMP_RETENTION_DEFAULTS.staleDays',
170
+ 7,
171
+ ),
172
+ folded('delivery.mergeWatch.intervalSeconds', 'DEFAULT_INTERVAL_SECONDS', 30),
173
+ folded('delivery.mergeWatch.updateAttempts', 'DEFAULT_UPDATE_ATTEMPTS', 3),
174
+ folded('delivery.review.lensDiffFloor', 'DEFAULT_LENS_DIFF_FLOOR', 40),
175
+ folded(
176
+ 'delivery.feedbackLoop.frictionWindowDays',
177
+ 'FRICTION_WINDOW_DAYS',
178
+ 30,
179
+ ),
180
+ folded(
181
+ 'delivery.auditToStories.severityFloor',
182
+ 'DEFAULT_SEVERITY_FLOOR (--severity)',
183
+ 'high',
184
+ ),
185
+ folded('planning.memoryPool.indexByteCeiling', 'INDEX_BYTE_CEILING', 24576),
186
+ ]);
187
+
188
+ /**
189
+ * @param {object | null} config
190
+ * @param {string[]} keyPath
191
+ * @returns {object[] | null}
192
+ */
193
+ function containersFor(config, keyPath) {
194
+ if (!config || typeof config !== 'object') return null;
195
+ const chain = [config];
196
+ for (const segment of keyPath.slice(0, -1)) {
197
+ const next = chain[chain.length - 1][segment];
198
+ if (!next || typeof next !== 'object' || Array.isArray(next)) return null;
199
+ chain.push(next);
200
+ }
201
+ return chain;
202
+ }
203
+
204
+ /**
205
+ * @param {object | null} config
206
+ * @param {string[]} keyPath
207
+ * @returns {{ present: boolean, value?: unknown }}
208
+ */
209
+ function lookup(config, keyPath) {
210
+ const chain = containersFor(config, keyPath);
211
+ const leaf = keyPath[keyPath.length - 1];
212
+ if (!chain || !Object.hasOwn(chain[chain.length - 1], leaf)) {
213
+ return { present: false };
214
+ }
215
+ return { present: true, value: chain[chain.length - 1][leaf] };
216
+ }
217
+
218
+ /**
219
+ * @param {object} config
220
+ * @param {string[]} keyPath
221
+ * @returns {void}
222
+ */
223
+ function deleteAndPrune(config, keyPath) {
224
+ const chain = containersFor(config, keyPath);
225
+ if (!chain) return;
226
+ delete chain[chain.length - 1][keyPath[keyPath.length - 1]];
227
+ if (!PRUNABLE_ROOTS.has(keyPath[0])) return;
228
+ for (let index = chain.length - 1; index > 0; index -= 1) {
229
+ if (Object.keys(chain[index]).length > 0) break;
230
+ delete chain[index - 1][keyPath[index - 1]];
231
+ }
232
+ }
233
+
234
+ /**
235
+ * @param {object} entry
236
+ * @param {unknown} value
237
+ * @returns {boolean}
238
+ */
239
+ function changesBehaviour(entry, value) {
240
+ if ('constant' in entry) {
241
+ return JSON.stringify(value) !== JSON.stringify(entry.value);
242
+ }
243
+ if (!entry.alwaysChanges) return false;
244
+ return !(value && typeof value === 'object' && value.enabled === false);
245
+ }
246
+
247
+ /**
248
+ * @param {string} filename
249
+ * @param {object} entry
250
+ * @param {unknown} value
251
+ * @returns {string}
252
+ */
253
+ function reportLine(filename, entry, value) {
254
+ const dotted = entry.path.join('.');
255
+ const replacement =
256
+ 'constant' in entry
257
+ ? `now ${entry.constant} = ${JSON.stringify(entry.value)}`
258
+ : entry.reason;
259
+ const prefix = changesBehaviour(entry, value)
260
+ ? ` behaviour change: ${filename} set ${dotted} = ${JSON.stringify(value)};`
261
+ : ` removed ${filename} ${dotted};`;
262
+ return `${prefix} ${replacement}`;
263
+ }
264
+
265
+ /**
266
+ * Mutates `config`.
267
+ *
268
+ * @param {object} config
269
+ * @param {string} filename
270
+ * @returns {string[]}
271
+ */
272
+ function stripRemovedKeys(config, filename) {
273
+ const lines = [];
274
+ for (const entry of REMOVED_AGENTRC_KEYS) {
275
+ const { present, value } = lookup(config, entry.path);
276
+ if (!present) continue;
277
+ lines.push(reportLine(filename, entry, value));
278
+ deleteAndPrune(config, entry.path);
279
+ }
280
+ return lines;
281
+ }
282
+
283
+ /**
284
+ * @param {{ projectRoot?: string }} ctx
285
+ * @param {string} filename
286
+ * @param {typeof nodeFs} fsImpl
287
+ * @returns {object | null}
288
+ */
289
+ function readConfig(ctx, filename, fsImpl) {
290
+ try {
291
+ const file = path.join(ctx?.projectRoot ?? process.cwd(), filename);
292
+ return JSON.parse(fsImpl.readFileSync(file, 'utf8'));
293
+ } catch {
294
+ return null;
295
+ }
296
+ }
297
+
298
+ /**
299
+ * @param {object | null} config
300
+ * @returns {boolean}
301
+ */
302
+ function carriesRemovedKey(config) {
303
+ return REMOVED_AGENTRC_KEYS.some(
304
+ (entry) => lookup(config, entry.path).present,
305
+ );
306
+ }
307
+
308
+ export const stripRemovedAgentrcKeys = {
309
+ version: '2.61.0',
310
+ description:
311
+ 'strip the .agentrc keys the config-surface cut removed — the lint and ' +
312
+ 'lighthouse gates, zero-reader keys, and never-set tuning keys now ' +
313
+ 'fixed as constants (Story #5382)',
314
+ detect(ctx) {
315
+ const fsImpl = ctx?.fs ?? nodeFs;
316
+ return AGENTRC_FILENAMES.some((filename) =>
317
+ carriesRemovedKey(readConfig(ctx, filename, fsImpl)),
318
+ );
319
+ },
320
+ apply(ctx) {
321
+ const fsImpl = ctx?.fs ?? nodeFs;
322
+ const log = ctx?.log ?? console.log;
323
+ for (const filename of AGENTRC_FILENAMES) {
324
+ const config = readConfig(ctx, filename, fsImpl);
325
+ if (!carriesRemovedKey(config)) continue;
326
+ for (const line of stripRemovedKeys(config, filename)) log(line);
327
+ fsImpl.writeFileSync(
328
+ path.join(ctx?.projectRoot ?? process.cwd(), filename),
329
+ `${JSON.stringify(config, null, 2)}\n`,
330
+ );
331
+ }
332
+ },
333
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mandrel",
3
- "version": "2.60.0",
3
+ "version": "2.61.0",
4
4
  "description": "Claude Code-first opinionated workflow framework: instructions, skills, rules, and SDLC workflows that govern AI coding assistants.",
5
5
  "files": [
6
6
  ".agents/",
@@ -20,21 +20,21 @@
20
20
  "test:quick": "node .agents/scripts/run-tests.js --tier quick",
21
21
  "test:integration": "node .agents/scripts/run-tests.js --tier integration",
22
22
  "test:e2e": "node .agents/scripts/run-tests.js --tier e2e",
23
- "test:profile": "node .agents/scripts/run-test-profile.js",
23
+ "test:profile": "node scripts/run-test-profile.js",
24
24
  "test:census": "SPAWN_CENSUS_OUT=\"${SPAWN_CENSUS_OUT:-temp/census.json}\" NODE_OPTIONS=\"--require $PWD/tests/fixtures/spawn-census.cjs\" node .agents/scripts/run-tests.js",
25
- "test:isolate": "node .agents/scripts/test-isolate.js",
26
- "verify": "node .agents/scripts/run-verify.js",
25
+ "test:isolate": "node scripts/test-isolate.js",
26
+ "verify": "node scripts/run-verify.js",
27
27
  "typecheck": "node -e \"process.exit(0)\"",
28
- "test:coverage": "node .agents/scripts/run-coverage.js",
28
+ "test:coverage": "node scripts/run-coverage.js",
29
29
  "coverage:check": "node .agents/scripts/check-baselines.js --gate coverage",
30
30
  "coverage:update": "node .agents/scripts/update-coverage-baseline.js",
31
31
  "coverage:reanchor": "node .agents/scripts/update-coverage-baseline.js --full-scope",
32
32
  "baseline:agents-loc": "node baselines/agents-loc-baseline.mjs",
33
- "baselines:scope": "node .agents/scripts/check-baseline-scope.js",
34
- "baselines:prune": "node .agents/scripts/prune-baseline-orphans.js",
33
+ "baselines:scope": "node scripts/check-baseline-scope.js",
34
+ "baselines:prune": "node scripts/prune-baseline-orphans.js",
35
35
  "baselines:merge-driver": "node .agents/scripts/merge-baseline.js --install",
36
36
  "lint:md": "markdownlint-cli2 \".agents/**/*.md\" \"*.md\" \"!node_modules/**\" \"!.worktrees/**\"",
37
- "lint": "node .agents/scripts/run-lint.js && node .agents/scripts/check-generated-validator.js --check && node .agents/scripts/check-pinned-override-notes.js && npm run docs:check",
37
+ "lint": "node scripts/run-lint.js && node scripts/check-generated-validator.js --check && node scripts/check-pinned-override-notes.js && npm run docs:check",
38
38
  "docs:gen": "node .agents/scripts/generate-config-docs.js && node .agents/scripts/generate-workflows-doc.js && node .agents/scripts/generate-lens-checklists.js",
39
39
  "docs:check": "node .agents/scripts/generate-config-docs.js --check && node .agents/scripts/generate-workflows-doc.js --check && node .agents/scripts/generate-lens-checklists.js --check && node .agents/scripts/check-doc-links.js && npm run skills:check",
40
40
  "skills:index": "node .agents/scripts/generate-skills-index.js",
@@ -49,12 +49,14 @@
49
49
  "check:context-budget": "node .agents/scripts/check-context-budget.js",
50
50
  "check:cyclomatic": "node .agents/scripts/check-cyclomatic.js",
51
51
  "cyclomatic:update": "node .agents/scripts/check-cyclomatic.js --update",
52
- "dead-exports:update": "node .agents/scripts/update-dead-exports-baseline.js && node .agents/scripts/update-dead-exports-baseline.js --production",
53
- "check:knip-entries": "node .agents/scripts/check-knip-entries.js",
54
- "validator:gen": "node .agents/scripts/check-generated-validator.js",
55
- "validator:check": "node .agents/scripts/check-generated-validator.js --check",
56
- "check:schema-refs": "node .agents/scripts/check-schema-references.js",
57
- "check:workflow-citations": "node .agents/scripts/check-workflow-citations.js",
52
+ "dead-exports:update": "node scripts/update-dead-exports-baseline.js && node scripts/update-dead-exports-baseline.js --production",
53
+ "check:knip-entries": "node scripts/check-knip-entries.js",
54
+ "validator:gen": "node scripts/check-generated-validator.js",
55
+ "validator:check": "node scripts/check-generated-validator.js --check",
56
+ "config:ceiling": "node scripts/check-agentrc-key-ceiling.js",
57
+ "check:comment-policy": "node scripts/check-comment-policy.js",
58
+ "check:schema-refs": "node scripts/check-schema-references.js",
59
+ "check:workflow-citations": "node scripts/check-workflow-citations.js",
58
60
  "crap:check": "node .agents/scripts/check-baselines.js --gate crap",
59
61
  "crap:update": "node .agents/scripts/update-crap-baseline.js",
60
62
  "crap:reanchor": "node .agents/scripts/update-crap-baseline.js --full-scope",