mandrel 2.60.0 → 2.62.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (662) hide show
  1. package/.agents/README.md +10 -10
  2. package/.agents/agents/story-worker.md +1 -1
  3. package/.agents/docs/agentrc-reference.json +4 -82
  4. package/.agents/docs/configuration.md +20 -87
  5. package/.agents/docs/workflows.md +1 -1
  6. package/.agents/instructions.md +1 -3
  7. package/.agents/rules/gherkin-standards.md +4 -0
  8. package/.agents/schemas/agentrc.schema.json +11 -486
  9. package/.agents/schemas/story-deliver-terminal.schema.json +10 -0
  10. package/.agents/schemas/validation-evidence.schema.json +2 -1
  11. package/.agents/scripts/README.md +14 -14
  12. package/.agents/scripts/acceptance-eval.js +32 -164
  13. package/.agents/scripts/agents-bootstrap-github.js +27 -129
  14. package/.agents/scripts/apply-quality-bootstrap.js +4 -40
  15. package/.agents/scripts/audit-baselines.js +6 -27
  16. package/.agents/scripts/audit-labels-bootstrap.js +5 -29
  17. package/.agents/scripts/audit-to-stories.js +91 -361
  18. package/.agents/scripts/boot-sweep.js +19 -72
  19. package/.agents/scripts/bootstrap.js +74 -395
  20. package/.agents/scripts/ceremony-derive.js +9 -45
  21. package/.agents/scripts/check-arch-cycles.js +14 -64
  22. package/.agents/scripts/check-baselines.js +8 -48
  23. package/.agents/scripts/check-context-budget.js +46 -172
  24. package/.agents/scripts/check-cyclomatic.js +12 -44
  25. package/.agents/scripts/check-dead-exports.js +13 -64
  26. package/.agents/scripts/check-doc-links.js +38 -186
  27. package/.agents/scripts/check-gherkin-corpus.js +24 -127
  28. package/.agents/scripts/check-test-temp-hygiene.js +28 -169
  29. package/.agents/scripts/coverage-capture.js +32 -99
  30. package/.agents/scripts/deliver-light.js +14 -101
  31. package/.agents/scripts/deliver-recover.js +6 -42
  32. package/.agents/scripts/deliver-run.js +36 -133
  33. package/.agents/scripts/diagnose-friction.js +24 -116
  34. package/.agents/scripts/drain-pending-cleanup.js +1 -1
  35. package/.agents/scripts/evidence-gate.js +23 -85
  36. package/.agents/scripts/file-ci-gap.js +10 -50
  37. package/.agents/scripts/generate-config-docs.js +30 -170
  38. package/.agents/scripts/generate-lens-checklists.js +8 -52
  39. package/.agents/scripts/generate-skills-index.js +14 -112
  40. package/.agents/scripts/generate-workflows-doc.js +10 -70
  41. package/.agents/scripts/git-cleanup.js +2 -34
  42. package/.agents/scripts/lib/Graph.js +24 -81
  43. package/.agents/scripts/lib/ITicketingProvider.js +47 -143
  44. package/.agents/scripts/lib/Logger.js +14 -76
  45. package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
  46. package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
  47. package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
  48. package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
  49. package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
  50. package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
  51. package/.agents/scripts/lib/audit-baselines/read.js +3 -16
  52. package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
  53. package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
  54. package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
  55. package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
  56. package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
  57. package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
  58. package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
  59. package/.agents/scripts/lib/audit-suite/findings.js +12 -52
  60. package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
  61. package/.agents/scripts/lib/audit-suite/index.js +1 -15
  62. package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
  63. package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
  64. package/.agents/scripts/lib/audit-suite/runner.js +13 -43
  65. package/.agents/scripts/lib/audit-suite/selector.js +49 -349
  66. package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
  67. package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
  68. package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
  69. package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
  70. package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
  71. package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
  72. package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
  73. package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
  74. package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
  75. package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
  76. package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
  77. package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
  78. package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
  79. package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
  80. package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
  81. package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
  82. package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
  83. package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
  84. package/.agents/scripts/lib/baseline-loader.js +12 -51
  85. package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
  86. package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
  87. package/.agents/scripts/lib/baselines/components.js +10 -61
  88. package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
  89. package/.agents/scripts/lib/baselines/crap-preview-incremental.js +5 -21
  90. package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
  91. package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
  92. package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
  93. package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
  94. package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
  95. package/.agents/scripts/lib/baselines/envelope.js +13 -129
  96. package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
  97. package/.agents/scripts/lib/baselines/git-base.js +23 -142
  98. package/.agents/scripts/lib/baselines/kernel.js +11 -111
  99. package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
  100. package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
  101. package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
  102. package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
  103. package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
  104. package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
  105. package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
  106. package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
  107. package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
  108. package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
  109. package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
  110. package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
  111. package/.agents/scripts/lib/baselines/path-canon.js +19 -128
  112. package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
  113. package/.agents/scripts/lib/baselines/reader.js +14 -107
  114. package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
  115. package/.agents/scripts/lib/baselines/scope.js +11 -135
  116. package/.agents/scripts/lib/baselines/writer.js +16 -149
  117. package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
  118. package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
  119. package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
  120. package/.agents/scripts/lib/bdd-step-index.js +26 -100
  121. package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
  122. package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
  123. package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
  124. package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
  125. package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
  126. package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
  127. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
  128. package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
  129. package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
  130. package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
  131. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
  132. package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
  133. package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
  134. package/.agents/scripts/lib/bootstrap/summary.js +1 -8
  135. package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
  136. package/.agents/scripts/lib/branch-name-guard.js +4 -23
  137. package/.agents/scripts/lib/changed-files.js +31 -143
  138. package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
  139. package/.agents/scripts/lib/checks/index.js +18 -101
  140. package/.agents/scripts/lib/checks/loop-health.js +11 -53
  141. package/.agents/scripts/lib/checks/state.js +16 -91
  142. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
  143. package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
  144. package/.agents/scripts/lib/child-exec.js +39 -108
  145. package/.agents/scripts/lib/cli/standard-args.js +9 -116
  146. package/.agents/scripts/lib/cli-args.js +31 -146
  147. package/.agents/scripts/lib/cli-usage.js +5 -27
  148. package/.agents/scripts/lib/cli-utils.js +2 -12
  149. package/.agents/scripts/lib/close-validation/commands.js +13 -76
  150. package/.agents/scripts/lib/close-validation/gates.js +92 -331
  151. package/.agents/scripts/lib/close-validation/process.js +121 -151
  152. package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
  153. package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
  154. package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
  155. package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
  156. package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
  157. package/.agents/scripts/lib/close-validation/runner.js +53 -110
  158. package/.agents/scripts/lib/command-header.js +6 -28
  159. package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
  160. package/.agents/scripts/lib/config/baselines.js +3 -14
  161. package/.agents/scripts/lib/config/ci.js +8 -38
  162. package/.agents/scripts/lib/config/commands.js +1 -15
  163. package/.agents/scripts/lib/config/defaults.js +4 -33
  164. package/.agents/scripts/lib/config/delivery-routing.js +6 -35
  165. package/.agents/scripts/lib/config/explain.js +9 -80
  166. package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
  167. package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +2 -30
  168. package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
  169. package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
  170. package/.agents/scripts/lib/config/gates/index.js +2 -17
  171. package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
  172. package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
  173. package/.agents/scripts/lib/config/gates/shared.js +4 -64
  174. package/.agents/scripts/lib/config/github.js +4 -22
  175. package/.agents/scripts/lib/config/limits.js +4 -57
  176. package/.agents/scripts/lib/config/paths.js +2 -21
  177. package/.agents/scripts/lib/config/qa.js +4 -38
  178. package/.agents/scripts/lib/config/quality.js +76 -432
  179. package/.agents/scripts/lib/config/runners.js +12 -56
  180. package/.agents/scripts/lib/config/runtime.js +13 -57
  181. package/.agents/scripts/lib/config/shared.js +2 -16
  182. package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
  183. package/.agents/scripts/lib/config/temp-paths.js +40 -280
  184. package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
  185. package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
  186. package/.agents/scripts/lib/config-resolver.js +10 -52
  187. package/.agents/scripts/lib/config-schema-shared.js +1 -4
  188. package/.agents/scripts/lib/config-settings-schema-delivery.js +12 -294
  189. package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
  190. package/.agents/scripts/lib/config-settings-schema.js +37 -274
  191. package/.agents/scripts/lib/coverage-baseline.js +20 -110
  192. package/.agents/scripts/lib/coverage-capture-fullscope.js +12 -37
  193. package/.agents/scripts/lib/coverage-capture-incremental.js +12 -43
  194. package/.agents/scripts/lib/coverage-capture-usage.js +4 -24
  195. package/.agents/scripts/lib/coverage-capture.js +99 -224
  196. package/.agents/scripts/lib/coverage-utils.js +14 -79
  197. package/.agents/scripts/lib/cpu-pool.js +17 -123
  198. package/.agents/scripts/lib/crap-baseline-join.js +16 -88
  199. package/.agents/scripts/lib/crap-coordinates.js +6 -25
  200. package/.agents/scripts/lib/crap-engine.js +40 -153
  201. package/.agents/scripts/lib/crap-method-identity.js +16 -78
  202. package/.agents/scripts/lib/crap-utils.js +31 -155
  203. package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
  204. package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
  205. package/.agents/scripts/lib/dead-exports-knip.js +18 -56
  206. package/.agents/scripts/lib/dead-exports-mode.js +5 -24
  207. package/.agents/scripts/lib/degraded-mode.js +3 -26
  208. package/.agents/scripts/lib/dependency-parser.js +8 -40
  209. package/.agents/scripts/lib/dependency-version.js +13 -35
  210. package/.agents/scripts/lib/detect-package-manager.js +6 -36
  211. package/.agents/scripts/lib/doc-tiers.js +22 -126
  212. package/.agents/scripts/lib/duplicate-search.js +8 -72
  213. package/.agents/scripts/lib/env-loader.js +5 -27
  214. package/.agents/scripts/lib/error-redactor.js +6 -31
  215. package/.agents/scripts/lib/errors/index.js +2 -22
  216. package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
  217. package/.agents/scripts/lib/escomplex-kernel.js +21 -123
  218. package/.agents/scripts/lib/feedback-loop/graduator-core.js +93 -419
  219. package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
  220. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -151
  221. package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
  222. package/.agents/scripts/lib/findings/classify-finding.js +14 -69
  223. package/.agents/scripts/lib/findings/promote-finding.js +14 -112
  224. package/.agents/scripts/lib/findings/provenance-field.js +11 -52
  225. package/.agents/scripts/lib/findings/route-finding.js +37 -255
  226. package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
  227. package/.agents/scripts/lib/findings/severity.js +18 -104
  228. package/.agents/scripts/lib/format-generated-json.js +12 -44
  229. package/.agents/scripts/lib/full-suite-lock.js +160 -429
  230. package/.agents/scripts/lib/full-suite-queue.js +213 -0
  231. package/.agents/scripts/lib/gates/baseline-store.js +5 -9
  232. package/.agents/scripts/lib/gates/friction.js +1 -3
  233. package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
  234. package/.agents/scripts/lib/gh-exec.js +31 -259
  235. package/.agents/scripts/lib/git/cached-fetch.js +9 -52
  236. package/.agents/scripts/lib/git/sync-from-base.js +15 -107
  237. package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
  238. package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
  239. package/.agents/scripts/lib/git-utils.js +37 -161
  240. package/.agents/scripts/lib/github/framework-repo.js +8 -71
  241. package/.agents/scripts/lib/github-url.js +2 -17
  242. package/.agents/scripts/lib/import-graph.js +11 -38
  243. package/.agents/scripts/lib/install-cmd-parser.js +4 -13
  244. package/.agents/scripts/lib/json-utils.js +3 -18
  245. package/.agents/scripts/lib/label-constants.js +16 -111
  246. package/.agents/scripts/lib/label-taxonomy.js +4 -30
  247. package/.agents/scripts/lib/maintainability-engine.js +12 -80
  248. package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
  249. package/.agents/scripts/lib/maintainability-utils.js +16 -92
  250. package/.agents/scripts/lib/mandrel-catalog.js +12 -70
  251. package/.agents/scripts/lib/notifications/notifier.js +13 -38
  252. package/.agents/scripts/lib/npm-scripts.js +4 -23
  253. package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
  254. package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
  255. package/.agents/scripts/lib/observability/signal-validator.js +5 -37
  256. package/.agents/scripts/lib/observability/signals-writer.js +11 -121
  257. package/.agents/scripts/lib/observability/source-classifier.js +21 -203
  258. package/.agents/scripts/lib/observability/terse-result.js +14 -47
  259. package/.agents/scripts/lib/onboard/init-tail.js +13 -74
  260. package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
  261. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
  262. package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
  263. package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
  264. package/.agents/scripts/lib/orchestration/ceremony-routing.js +5 -75
  265. package/.agents/scripts/lib/orchestration/change-set.js +7 -36
  266. package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
  267. package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
  268. package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
  269. package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
  270. package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
  271. package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
  272. package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
  273. package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
  274. package/.agents/scripts/lib/orchestration/check-state.js +92 -0
  275. package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
  276. package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +42 -189
  277. package/.agents/scripts/lib/orchestration/code-review.js +24 -128
  278. package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
  279. package/.agents/scripts/lib/orchestration/complexity-gate.js +42 -214
  280. package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
  281. package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
  282. package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
  283. package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
  284. package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
  285. package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
  286. package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
  287. package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
  288. package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
  289. package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
  290. package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
  291. package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
  292. package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
  293. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
  294. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
  295. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
  296. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
  297. package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
  298. package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
  299. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
  300. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
  301. package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
  302. package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
  303. package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
  304. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
  305. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
  306. package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
  307. package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
  308. package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
  309. package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
  310. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
  311. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
  312. package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
  313. package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
  314. package/.agents/scripts/lib/orchestration/light-suitability.js +26 -231
  315. package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
  316. package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
  317. package/.agents/scripts/lib/orchestration/merge-queue.js +158 -0
  318. package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
  319. package/.agents/scripts/lib/orchestration/plan-context.js +52 -303
  320. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
  321. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
  322. package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
  323. package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
  324. package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
  325. package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
  326. package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +14 -78
  327. package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
  328. package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
  329. package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
  330. package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
  331. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
  332. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
  333. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +49 -248
  334. package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
  335. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +85 -368
  336. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +8 -38
  337. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +30 -190
  338. package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
  339. package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
  340. package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
  341. package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
  342. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
  343. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
  344. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
  345. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
  346. package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
  347. package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
  348. package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
  349. package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
  350. package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
  351. package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
  352. package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
  353. package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
  354. package/.agents/scripts/lib/orchestration/review-depth.js +12 -94
  355. package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
  356. package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
  357. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
  358. package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
  359. package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
  360. package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
  361. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
  362. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
  363. package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
  364. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
  365. package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
  366. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
  367. package/.agents/scripts/lib/orchestration/run-epilogue.js +40 -199
  368. package/.agents/scripts/lib/orchestration/run-scoped-config.js +13 -81
  369. package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
  370. package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
  371. package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
  372. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +190 -280
  373. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +18 -80
  374. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
  375. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
  376. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +183 -485
  377. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
  378. package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +9 -50
  379. package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
  380. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
  381. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
  382. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
  383. package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
  384. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
  385. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
  386. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
  387. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
  388. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
  389. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
  390. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
  391. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +110 -290
  392. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
  393. package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
  394. package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
  395. package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
  396. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
  397. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
  398. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
  399. package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
  400. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -201
  401. package/.agents/scripts/lib/orchestration/story-follow-ups.js +43 -245
  402. package/.agents/scripts/lib/orchestration/story-init-envelope.js +4 -23
  403. package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
  404. package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
  405. package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -126
  406. package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
  407. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
  408. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
  409. package/.agents/scripts/lib/orchestration/ticket-validator.js +39 -181
  410. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
  411. package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -250
  412. package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
  413. package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
  414. package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
  415. package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
  416. package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
  417. package/.agents/scripts/lib/path-security.js +3 -6
  418. package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
  419. package/.agents/scripts/lib/preflight-runner.js +13 -69
  420. package/.agents/scripts/lib/process-group.js +143 -0
  421. package/.agents/scripts/lib/project-root.js +2 -8
  422. package/.agents/scripts/lib/provider-factory.js +2 -25
  423. package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
  424. package/.agents/scripts/lib/qa/qa-session.js +15 -69
  425. package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
  426. package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
  427. package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
  428. package/.agents/scripts/lib/reserved-test-ids.js +9 -47
  429. package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
  430. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
  431. package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
  432. package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
  433. package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
  434. package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
  435. package/.agents/scripts/lib/signals/detectors/common.js +12 -38
  436. package/.agents/scripts/lib/signals/index.js +2 -19
  437. package/.agents/scripts/lib/signals/schema.js +14 -109
  438. package/.agents/scripts/lib/signals/write.js +2 -11
  439. package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
  440. package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
  441. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
  442. package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
  443. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
  444. package/.agents/scripts/lib/single-story-sweep.js +14 -97
  445. package/.agents/scripts/lib/skills/parse-skill.js +13 -59
  446. package/.agents/scripts/lib/skills/skills-index.js +8 -29
  447. package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
  448. package/.agents/scripts/lib/source-extensions.js +11 -42
  449. package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
  450. package/.agents/scripts/lib/stdio-flush.js +9 -36
  451. package/.agents/scripts/lib/story-adjacency.js +8 -40
  452. package/.agents/scripts/lib/story-body/body-format-lints.js +22 -83
  453. package/.agents/scripts/lib/story-body/footer-block.js +11 -44
  454. package/.agents/scripts/lib/story-body/story-body.js +83 -358
  455. package/.agents/scripts/lib/temp-retention.js +42 -143
  456. package/.agents/scripts/lib/templates/decomposer-prompts.js +11 -65
  457. package/.agents/scripts/lib/test-env.js +12 -65
  458. package/.agents/scripts/lib/test-run-credit.js +10 -65
  459. package/.agents/scripts/lib/test-runner-contract.js +19 -74
  460. package/.agents/scripts/lib/test-temp.js +38 -184
  461. package/.agents/scripts/lib/test-tiers.js +12 -96
  462. package/.agents/scripts/lib/ticket-body-sections.js +21 -96
  463. package/.agents/scripts/lib/transpile.js +15 -74
  464. package/.agents/scripts/lib/util/concurrent-map.js +6 -25
  465. package/.agents/scripts/lib/util/parse-id-list.js +8 -34
  466. package/.agents/scripts/lib/util/poll-loop.js +8 -28
  467. package/.agents/scripts/lib/util/with-timeout.js +2 -11
  468. package/.agents/scripts/lib/validation-evidence.js +21 -96
  469. package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
  470. package/.agents/scripts/lib/wave-runner/live-probe.js +53 -221
  471. package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
  472. package/.agents/scripts/lib/workers/crap-worker.js +11 -64
  473. package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
  474. package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
  475. package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
  476. package/.agents/scripts/lib/workflow-closure.js +22 -105
  477. package/.agents/scripts/lib/workspace-provisioner.js +16 -54
  478. package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
  479. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
  480. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
  481. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
  482. package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
  483. package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
  484. package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
  485. package/.agents/scripts/lib/worktree-manager.js +15 -40
  486. package/.agents/scripts/lint-issue-body.js +12 -68
  487. package/.agents/scripts/mandrel-update-preflight.js +10 -70
  488. package/.agents/scripts/merge-baseline.js +30 -104
  489. package/.agents/scripts/nav-registry-diff.js +22 -108
  490. package/.agents/scripts/notify.js +12 -69
  491. package/.agents/scripts/plan-context.js +27 -111
  492. package/.agents/scripts/plan-critics.js +12 -66
  493. package/.agents/scripts/plan-persist.js +31 -148
  494. package/.agents/scripts/plan-run-epilogue.js +11 -37
  495. package/.agents/scripts/pr-watch-with-update.js +76 -267
  496. package/.agents/scripts/providers/github/auth.js +3 -8
  497. package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
  498. package/.agents/scripts/providers/github/board-add.js +5 -21
  499. package/.agents/scripts/providers/github/branch-protection.js +11 -43
  500. package/.agents/scripts/providers/github/cache.js +2 -14
  501. package/.agents/scripts/providers/github/comments.js +7 -40
  502. package/.agents/scripts/providers/github/compose.js +3 -19
  503. package/.agents/scripts/providers/github/errors.js +22 -125
  504. package/.agents/scripts/providers/github/issues.js +31 -123
  505. package/.agents/scripts/providers/github/labels.js +24 -124
  506. package/.agents/scripts/providers/github/mappers.js +5 -27
  507. package/.agents/scripts/providers/github/merge-methods.js +3 -22
  508. package/.agents/scripts/providers/github/project-board.js +2 -17
  509. package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
  510. package/.agents/scripts/providers/github/request-helpers.js +5 -32
  511. package/.agents/scripts/providers/github/search-budget.js +9 -39
  512. package/.agents/scripts/providers/github/search-query.js +5 -26
  513. package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
  514. package/.agents/scripts/providers/github/sub-issues.js +7 -36
  515. package/.agents/scripts/providers/github/tickets.js +32 -134
  516. package/.agents/scripts/providers/github.js +18 -59
  517. package/.agents/scripts/prune-plan-run-labels.js +12 -46
  518. package/.agents/scripts/quality-preview.js +35 -220
  519. package/.agents/scripts/resolve-doc-tiers.js +3 -26
  520. package/.agents/scripts/resolve-stories.js +16 -67
  521. package/.agents/scripts/resync-status-column.js +6 -25
  522. package/.agents/scripts/run-tests.js +29 -104
  523. package/.agents/scripts/single-story-close.js +23 -135
  524. package/.agents/scripts/single-story-confirm-merge.js +32 -139
  525. package/.agents/scripts/single-story-init.js +47 -209
  526. package/.agents/scripts/stories-wave-tick.js +102 -472
  527. package/.agents/scripts/sync-agentrc.js +3 -21
  528. package/.agents/scripts/sync-claude-agents.js +9 -55
  529. package/.agents/scripts/sync-claude-commands.js +20 -110
  530. package/.agents/scripts/test-wrapper.js +6 -43
  531. package/.agents/scripts/update-coverage-baseline.js +5 -22
  532. package/.agents/scripts/update-crap-baseline.js +7 -30
  533. package/.agents/scripts/update-duplication-baseline.js +16 -92
  534. package/.agents/scripts/update-maintainability-baseline.js +8 -62
  535. package/.agents/scripts/update-ticket-state.js +1 -7
  536. package/.agents/scripts/validate-skills.js +6 -26
  537. package/.agents/templates/agent-protocol.md +2 -2
  538. package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
  539. package/.agents/workflows/audit-accessibility.md +4 -7
  540. package/.agents/workflows/audit-adrs.md +3 -6
  541. package/.agents/workflows/audit-architecture.md +3 -11
  542. package/.agents/workflows/audit-baselines.md +6 -9
  543. package/.agents/workflows/audit-clean-code.md +8 -12
  544. package/.agents/workflows/audit-data-model.md +3 -7
  545. package/.agents/workflows/audit-dependencies.md +4 -7
  546. package/.agents/workflows/audit-devops.md +4 -8
  547. package/.agents/workflows/audit-documentation.md +1 -4
  548. package/.agents/workflows/audit-mobile.md +4 -7
  549. package/.agents/workflows/audit-navigability.md +3 -6
  550. package/.agents/workflows/audit-performance.md +2 -4
  551. package/.agents/workflows/audit-privacy.md +4 -7
  552. package/.agents/workflows/audit-quality.md +4 -7
  553. package/.agents/workflows/audit-security.md +4 -7
  554. package/.agents/workflows/audit-seo.md +4 -7
  555. package/.agents/workflows/audit-sre.md +4 -7
  556. package/.agents/workflows/audit-to-stories.md +17 -30
  557. package/.agents/workflows/audit-ux-ui.md +4 -7
  558. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  559. package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
  560. package/.agents/workflows/helpers/deliver-digest.md +6 -4
  561. package/.agents/workflows/helpers/deliver-reference.md +114 -188
  562. package/.agents/workflows/helpers/deliver-story-reference.md +189 -533
  563. package/.agents/workflows/helpers/plan-reference.md +86 -139
  564. package/.agents/workflows/helpers/qa-core.md +12 -0
  565. package/.agents/workflows/memory-consolidate.md +1 -1
  566. package/.agents/workflows/qa-assist.md +27 -71
  567. package/.agents/workflows/qa-explore.md +19 -59
  568. package/.agents/workflows/qa-run.md +11 -33
  569. package/README.md +1 -1
  570. package/bin/mandrel.js +5 -46
  571. package/bin/postinstall.js +18 -107
  572. package/docs/CHANGELOG.md +32 -0
  573. package/lib/cli/doctor.js +11 -71
  574. package/lib/cli/init.js +26 -165
  575. package/lib/cli/migrate.js +5 -64
  576. package/lib/cli/registry.js +84 -467
  577. package/lib/cli/sync-agents.js +4 -64
  578. package/lib/cli/sync-commands.js +11 -64
  579. package/lib/cli/sync.js +34 -213
  580. package/lib/cli/uninstall.js +40 -219
  581. package/lib/cli/update.js +105 -661
  582. package/lib/cli/version-check.js +8 -72
  583. package/lib/cli/version-helpers.js +14 -87
  584. package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
  585. package/lib/migrations/index.js +15 -92
  586. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
  587. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
  588. package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
  589. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
  590. package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
  591. package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
  592. package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
  593. package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
  594. package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +2 -21
  595. package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
  596. package/package.json +16 -14
  597. package/.agents/docs/SDLC.md +0 -590
  598. package/.agents/docs/quality-gates.md +0 -1183
  599. package/.agents/rules/known-tooling-behavior.md +0 -200
  600. package/.agents/rules/orchestration-error-handling.md +0 -61
  601. package/.agents/rules/test-seams.md +0 -59
  602. package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
  603. package/.agents/schemas/baselines/lint.schema.json +0 -47
  604. package/.agents/scripts/check-action-pinning.js +0 -260
  605. package/.agents/scripts/check-audit-attribution.js +0 -302
  606. package/.agents/scripts/check-baseline-drift.js +0 -211
  607. package/.agents/scripts/check-baseline-scope.js +0 -362
  608. package/.agents/scripts/check-generated-validator.js +0 -202
  609. package/.agents/scripts/check-knip-entries.js +0 -159
  610. package/.agents/scripts/check-lifecycle-lint.js +0 -294
  611. package/.agents/scripts/check-pinned-override-notes.js +0 -102
  612. package/.agents/scripts/check-schema-references.js +0 -368
  613. package/.agents/scripts/check-test-portability.js +0 -512
  614. package/.agents/scripts/check-workflow-citations.js +0 -218
  615. package/.agents/scripts/check-workflow-cli-lint.js +0 -299
  616. package/.agents/scripts/check-workflow-timeouts.js +0 -291
  617. package/.agents/scripts/install-matrix-assert.js +0 -326
  618. package/.agents/scripts/lib/audit-advisories.js +0 -195
  619. package/.agents/scripts/lib/audit-attribution.js +0 -134
  620. package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
  621. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
  622. package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
  623. package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
  624. package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
  625. package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
  626. package/.agents/scripts/lib/c8-cli-path.js +0 -21
  627. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
  628. package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
  629. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
  630. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
  631. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
  632. package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
  633. package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
  634. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
  635. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
  636. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
  637. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
  638. package/.agents/scripts/lib/fs-walk.js +0 -52
  639. package/.agents/scripts/lib/knip-config-resolver.js +0 -181
  640. package/.agents/scripts/lib/knip-entry-sync.js +0 -452
  641. package/.agents/scripts/lib/pinned-override-notes.js +0 -88
  642. package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
  643. package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
  644. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
  645. package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
  646. package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
  647. package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
  648. package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
  649. package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
  650. package/.agents/scripts/lib/test-isolate/runner.js +0 -483
  651. package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
  652. package/.agents/scripts/lib/test-profile/render-report.js +0 -45
  653. package/.agents/scripts/lint-label-vocabulary.js +0 -214
  654. package/.agents/scripts/post-structured-comment.js +0 -127
  655. package/.agents/scripts/provision-git-hooks.js +0 -85
  656. package/.agents/scripts/prune-baseline-orphans.js +0 -181
  657. package/.agents/scripts/run-coverage.js +0 -197
  658. package/.agents/scripts/run-lint.js +0 -133
  659. package/.agents/scripts/run-test-profile.js +0 -129
  660. package/.agents/scripts/run-verify.js +0 -125
  661. package/.agents/scripts/test-isolate.js +0 -55
  662. package/.agents/scripts/update-dead-exports-baseline.js +0 -321
@@ -1,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.62.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",