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
@@ -6,29 +6,18 @@ description: Agent-led exploratory-QA loop — the agent Plans a surface with an
6
6
 
7
7
  Drive a **bounded, agent-led exploratory-QA session** as a human-in-the-loop
8
8
  (HITL) loop: **Plan → Capture → Triage**. The operator names a single surface;
9
- the agent (acting as the QA engineer) **plans** how it will reach that surface,
10
- **drives** it itself — through the browser MCP by default, or statically as a
11
- documented interim — and records each observation as a structured ledger item
12
- under a strictly read-only capture invariant. Only after explicit operator
13
- confirmation does it triage the ledger into routed, classified, dedup'd
14
- follow-up dispositions.
15
-
16
- This is the **agent-led** front-end of exploratory QA: **the agent drives, the
17
- operator watches and gates.** Its human-led sibling is
18
- [`/qa-assist`](qa-assist.md) — there the *human* drives a single observation and
19
- the agent scribes/enriches. No human-driven flow lives in `/qa-explore`.
20
-
21
- Unlike [`/qa-run`](qa-run.md) (which steps a known set of Gherkin `.feature`
22
- scenarios through a browser), `/qa-explore` is **open-ended exploration**: the
23
- agent probes the surface for product bugs, environment-setup friction,
24
- tooling/DX gaps, missing tests, and enhancement ideas — each captured as a
25
- `QaLedgerItem`.
9
+ the agent drives it itself — **the agent drives, the operator watches and
10
+ gates** — and records each observation as a `QaLedgerItem` under a strictly
11
+ read-only capture invariant. Its human-led sibling is
12
+ [`/qa-assist`](qa-assist.md); no human-driven flow lives in `/qa-explore`.
13
+ Unlike [`/qa-run`](qa-run.md) (a known set of Gherkin `.feature` scenarios),
14
+ this is **open-ended exploration** for product bugs, environment-setup
15
+ friction, tooling/DX gaps, missing tests, and enhancement ideas.
26
16
 
27
17
  The shared machinery — contract resolution + loud failure, the session & ledger
28
18
  contract, redact-first, the `QaLedgerItem` shape, the triage procedure, and the
29
19
  HITL write gate — lives once in [`helpers/qa-core.md`](helpers/qa-core.md); this
30
- workflow states only the `/qa-explore`-specific phases (Plan / Capture) plus a
31
- Constraints delta.
20
+ workflow states only the `/qa-explore`-specific phases (Plan / Capture).
32
21
 
33
22
  > **When to run**: ad-hoc agent-driven exploration of a freshly delivered Story
34
23
  > or Feature, a regression sweep over a risky surface before `/mandrel-deliver`, or a
@@ -69,9 +58,7 @@ the skill owns them.
69
58
  | `surface` | yes | `feature:login`, `area:onboarding` | A human label for the single surface to explore. Recorded as each ledger item's `coverage`. |
70
59
 
71
60
  If no `surface` is supplied, **stop and ask** the operator to name one — do not
72
- invent scope. `/qa-explore` is **bounded to one surface per session**: explore
73
- exactly the named surface, do not wander into adjacent surfaces, and start a
74
- fresh session for a different surface.
61
+ invent scope.
75
62
 
76
63
  ## Contract & session
77
64
 
@@ -171,23 +158,16 @@ For each observation the agent makes while driving:
171
158
 
172
159
  1. **Redact first** (per [`helpers/qa-core.md`](helpers/qa-core.md)) — scrub the
173
160
  evidence string through `redactEvidence` before it touches disk.
174
- 2. **Read the coverage tiers** for the surface the observation points at:
175
- gather the tests that exercise it and classify each by path per
176
- [`testing-standards.md` § The Three Tiers](../rules/testing-standards.md#the-three-tiers)
177
- — a `.feature` file is **acceptance**, a path containing `/contract/` or
178
- `.contract.test.` is **contract**, and a path containing `.test.` or
179
- `__tests__/` is **unit**. A skipped test leaves its tier uncovered.
180
- 3. **Name the missing test** (if any): take the lowest tier with no live test
181
- (unit → contract → acceptance) and write one concrete sentence describing
182
- the test that would close it. Every tier covered means no missing test.
183
- Record that sentence as the ledger item's `missingTest` (or `null`).
184
- 4. **Append a `QaLedgerItem`** to the ledger (shape per
161
+ 2. **Read the coverage tiers and name the missing test** per
162
+ [`helpers/qa-core.md`](helpers/qa-core.md) § Coverage tiers, recording the
163
+ sentence as the ledger item's `missingTest` (or `null`).
164
+ 3. **Append a `QaLedgerItem`** to the ledger (shape per
185
165
  [`helpers/qa-core.md`](helpers/qa-core.md)): a stable `id`, the redacted
186
166
  `evidence`, the `coverage` label (the `surface`, or `unknown`), a tentative
187
167
  `class` and `severity`, the `missingTest`, and `disposition` left untriaged.
188
- 5. Continue driving until the agent believes the surface is covered, then
168
+ 4. Continue driving until the agent believes the surface is covered, then
189
169
  propose that exploration is complete.
190
- 6. **Gate:** present the captured ledger (item count, classes, the driving
170
+ 5. **Gate:** present the captured ledger (item count, classes, the driving
191
171
  method used, the rolling backlog) and ask the operator to confirm moving to
192
172
  Triage. Do **not** triage until they confirm.
193
173
 
@@ -212,30 +192,10 @@ resumed session will pick up.
212
192
 
213
193
  ## Constraints
214
194
 
215
- Beyond the shared core ([`helpers/qa-core.md`](helpers/qa-core.md): contract +
216
- loud failure, session/ledger, redact-first, QaLedgerItem, triage, HITL gate)
217
- and the driving conventions
218
- ([`stack/qa/qa-harness`](../skills/stack/qa/qa-harness/SKILL.md)),
219
- the `/qa-explore`-specific deltas are:
220
-
221
- - **Agent-led, bounded per surface.** The agent drives one named surface per
222
- session and proposes when it is covered; the operator gates the boundary. No
223
- human-driven flow lives here — that is [`/qa-assist`](qa-assist.md).
224
- - **Pick the driving method at Plan time** (drive default; static the documented
225
- interim, chosen with a recorded reason, never a silent fallback); do not
226
- switch mid-surface without a new Plan note.
227
- - **Capture is read-only.** The only Capture write is appending ledger lines
228
- under `temp/qa/`. No source edits, ticket mutations, product writes, or
229
- destructive form submissions. Reach an authenticated surface only through the
230
- resolved environment's `signInSeam`; where no seam resolves, record the gap
231
- and fall back to static.
232
- - **Broken navigation is a finding, not a workaround** — never URL-jump around a
233
- missing affordance, a nav 404, or a guard redirect loop.
234
- - **Read tier placement from the rule, not from prose you invent.** The three
235
- path rules in
236
- [`testing-standards.md` § The Three Tiers](../rules/testing-standards.md#the-three-tiers)
237
- decide which tier a test occupies; the missing-test sentence is yours to write
238
- from the lowest uncovered tier.
195
+ The shared core in [`helpers/qa-core.md`](helpers/qa-core.md) and the driving
196
+ conventions in [`stack/qa/qa-harness`](../skills/stack/qa/qa-harness/SKILL.md)
197
+ bind this workflow. The `/qa-explore` deltas are stated once, above: one
198
+ surface per session, the method chosen at Plan time, and a read-only Capture.
239
199
 
240
200
  ## See also
241
201
 
@@ -6,23 +6,17 @@ description: Drive Gherkin scenarios through a real browser as an agent-driven Q
6
6
 
7
7
  Execute a consumer's Gherkin `.feature` scenarios through a **real browser**
8
8
  (the chrome-devtools MCP surface), with the agent acting as the step executor
9
- and a human observing. The sweep resolves a **run envelope** — a target
10
- environment, a concrete scenario set, and an authenticated persona session —
11
- then delegates each scenario to
12
- [`helpers/qa-run-scenario.md`](helpers/qa-run-scenario.md), which drives it
13
- navigation-first and asserts `Then` outcomes semantically against the
14
- accessibility snapshot. Per-surface console and network are captured as
15
- structured findings, recorded as `QaLedgerItem`s on the shared session ledger,
16
- and triaged — after operator sign-off — through the shared classify/route/
17
- dedup/promote core. The harness never files tickets autonomously.
9
+ and a human observing: resolve a run envelope, drive each scenario through
10
+ [`helpers/qa-run-scenario.md`](helpers/qa-run-scenario.md), record findings as
11
+ `QaLedgerItem`s, and triage after operator sign-off.
18
12
 
19
13
  The shared machinery — contract resolution + loud failure, the session & ledger
20
14
  contract, redact-first, the `QaLedgerItem` shape, the triage procedure, and the
21
15
  HITL write gate — lives once in [`helpers/qa-core.md`](helpers/qa-core.md); this
22
16
  workflow states only the `/qa-run`-specific phases (env → scope → sign-in →
23
- drive) plus a Constraints delta. Deterministic Node helpers under
24
- `.agents/scripts/lib/qa/` own contract, environment, and scenario resolution;
25
- the agent never invents those decisions in prose.
17
+ drive). Deterministic Node helpers under `.agents/scripts/lib/qa/` own
18
+ contract, environment, and scenario resolution; the agent never invents those
19
+ decisions in prose.
26
20
 
27
21
  > **When to run**: during sprint testing to exercise a targeted slice of the
28
22
  > acceptance suite (a feature, a tag expression, or a domain), for regression
@@ -99,7 +93,8 @@ The chrome-devtools MCP surface (`navigate_page`, `take_snapshot`, `click`,
99
93
  `list_network_requests`) is **host-provided** — an external runtime dependency,
100
94
  not in-repo code. If the host does not expose it, degrade with a clear error
101
95
  ("the chrome-devtools MCP server is unavailable; the QA harness requires a live
102
- browser surface") and stop. Never attempt a headless fallback.
96
+ browser surface") and stop. Never attempt a headless fallback, and never fall
97
+ back to a retired headless BDD runner.
103
98
 
104
99
  ### Step 1 — Resolve the environment, then the scope
105
100
 
@@ -234,23 +229,6 @@ Then summarize the sweep in chat with:
234
229
 
235
230
  ## Constraints
236
231
 
237
- Beyond the shared core ([`helpers/qa-core.md`](helpers/qa-core.md): contract +
238
- loud failure, session/ledger, redact-first, QaLedgerItem, triage, HITL gate)
239
- and the driving rules ([`helpers/qa-run-scenario.md`](helpers/qa-run-scenario.md):
240
- navigation-first, semantic `Then`, redaction, sequential-only), the
241
- `/qa-run`-specific deltas are:
242
-
243
- - **Always** resolve a target environment (Step 1) — prompt when no `<env>` is
244
- supplied — and **fail loudly** on an unknown name or unmatched URL; never
245
- silently fall back to the default.
246
- - **Always** apply the `allowWrites` guardrail: on a read-only environment,
247
- exclude mutating scenarios and report the exclusion count; include them only
248
- on explicit in-session operator confirmation.
249
- - **Always** sign in per persona through the environment's `signInSeam` and
250
- confirm the authenticated state with a post-sign-in `take_snapshot` before
251
- driving.
252
- - An **empty selection is operator error**, not a passing sweep — report it and
253
- stop.
254
- - **Never** expand `consoleAllowlist` to suppress genuine error signal.
255
- - **Never** file follow-up tickets autonomously, and **never** fall back to a
256
- retired headless BDD runner.
232
+ The shared core in [`helpers/qa-core.md`](helpers/qa-core.md) and the driving
233
+ rules in [`helpers/qa-run-scenario.md`](helpers/qa-run-scenario.md) bind this
234
+ workflow; the `/qa-run` deltas are the MUSTs in Steps 0–5 above.
package/README.md CHANGED
@@ -105,7 +105,7 @@ idempotent — safe to re-run anytime.
105
105
 
106
106
  For the consumer reference and the end-to-end workflow narrative, see
107
107
  [`.agents/README.md`](.agents/README.md) and
108
- [`.agents/docs/SDLC.md`](.agents/docs/SDLC.md). Every `.agentrc.json` key is
108
+ [`docs/SDLC.md`](docs/SDLC.md). Every `.agentrc.json` key is
109
109
  documented in [`.agents/docs/configuration.md`](.agents/docs/configuration.md), and the
110
110
  slash-command index lives in
111
111
  [`.agents/docs/workflows.md`](.agents/docs/workflows.md).
package/bin/mandrel.js CHANGED
@@ -2,17 +2,8 @@
2
2
  // bin/mandrel.js — mandrel CLI entry point
3
3
 
4
4
  /**
5
- * Allowlist-based subcommand dispatcher.
6
- *
7
- * Only modules listed in SUBCOMMANDS are dispatchable. Each entry declares the
8
- * name, a one-line description for help output, and the set of known flags so
9
- * the dispatcher can reject unknown flags before loading the subcommand.
10
- *
11
- * Supported top-level flags:
12
- * --help / -h Print subcommand list and exit 0.
13
- * --version Print installed version and exit 0.
14
- *
15
- * Each subcommand module must export a default function `run(argv)`.
5
+ * Allowlist dispatcher: only SUBCOMMANDS entries load, and unknown flags are
6
+ * rejected before loading. Each module default-exports `run(argv)`.
16
7
  */
17
8
 
18
9
  import { createRequire } from 'node:module';
@@ -21,10 +12,6 @@ import { fileURLToPath, pathToFileURL } from 'node:url';
21
12
 
22
13
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
23
14
 
24
- // ---------------------------------------------------------------------------
25
- // Subcommand registry — the ONLY allowed dispatch targets
26
- // ---------------------------------------------------------------------------
27
-
28
15
  /**
29
16
  * @typedef {{ description: string, knownFlags: Set<string> }} SubcommandMeta
30
17
  * @type {Map<string, SubcommandMeta>}
@@ -108,13 +95,7 @@ const SUBCOMMANDS = new Map([
108
95
  ],
109
96
  ]);
110
97
 
111
- // ---------------------------------------------------------------------------
112
- // Helpers
113
- // ---------------------------------------------------------------------------
114
-
115
98
  /**
116
- * Read the installed mandrel version from the root package.json.
117
- *
118
99
  * @returns {string}
119
100
  */
120
101
  function installedVersion() {
@@ -124,8 +105,6 @@ function installedVersion() {
124
105
  }
125
106
 
126
107
  /**
127
- * Print the help screen listing all subcommands with descriptions.
128
- *
129
108
  * @param {(s: string) => void} [write]
130
109
  */
131
110
  function printHelp(write = (s) => process.stdout.write(s)) {
@@ -144,8 +123,6 @@ function printHelp(write = (s) => process.stdout.write(s)) {
144
123
  }
145
124
 
146
125
  /**
147
- * Suggest the closest known subcommand name for a typo (Levenshtein-1).
148
- *
149
126
  * @param {string} input
150
127
  * @returns {string | undefined}
151
128
  */
@@ -157,8 +134,7 @@ function suggest(input) {
157
134
  }
158
135
 
159
136
  /**
160
- * Compute Levenshtein edit distance between two strings (capped at 3 for
161
- * performance — we only care about small distances).
137
+ * Edit distance; returns 4 early when lengths differ by more than 3.
162
138
  *
163
139
  * @param {string} a
164
140
  * @param {string} b
@@ -182,19 +158,11 @@ function levenshtein(a, b) {
182
158
  return prev[b.length];
183
159
  }
184
160
 
185
- /**
186
- * Universal flags that all subcommands accept and that bypass per-subcommand
187
- * flag validation. Subcommands may handle these themselves internally.
188
- */
161
+ /** Accepted by every subcommand, bypassing per-subcommand validation. */
189
162
  const UNIVERSAL_FLAGS = new Set(['--help', '-h']);
190
163
 
191
164
  /**
192
- * Validate the argv array against the known flags for a subcommand.
193
- * Returns null when all flags are known; an error message string when an
194
- * unknown flag is detected. Values following `=` or the next positional are
195
- * allowed — only the flag name prefix is checked.
196
- *
197
- * Universal flags (--help, -h) are always allowed and bypass this check.
165
+ * Only flag names are checked (`--flag=value` is split).
198
166
  *
199
167
  * @param {string} subName
200
168
  * @param {Set<string>} knownFlags
@@ -204,7 +172,6 @@ const UNIVERSAL_FLAGS = new Set(['--help', '-h']);
204
172
  function findUnknownFlag(subName, knownFlags, argv) {
205
173
  for (const arg of argv) {
206
174
  if (!arg.startsWith('-')) continue;
207
- // Strip value portion for `--flag=value` form.
208
175
  const flagName = arg.includes('=') ? arg.slice(0, arg.indexOf('=')) : arg;
209
176
  if (UNIVERSAL_FLAGS.has(flagName)) continue;
210
177
  if (!knownFlags.has(flagName)) {
@@ -219,14 +186,9 @@ function findUnknownFlag(subName, knownFlags, argv) {
219
186
  return null;
220
187
  }
221
188
 
222
- // ---------------------------------------------------------------------------
223
- // Dispatch
224
- // ---------------------------------------------------------------------------
225
-
226
189
  const args = process.argv.slice(2);
227
190
  const sub = args[0];
228
191
 
229
- // --- Top-level flags (no subcommand) ---
230
192
  if (!sub || sub === '--help' || sub === '-h') {
231
193
  printHelp();
232
194
  process.exit(0);
@@ -237,7 +199,6 @@ if (sub === '--version') {
237
199
  process.exit(0);
238
200
  }
239
201
 
240
- // --- Subcommand lookup ---
241
202
  const meta = SUBCOMMANDS.get(sub);
242
203
  if (!meta) {
243
204
  const subcommandList = [...SUBCOMMANDS.keys()].join(', ');
@@ -250,7 +211,6 @@ if (!meta) {
250
211
  process.exit(1);
251
212
  }
252
213
 
253
- // --- Unknown-flag rejection ---
254
214
  const subArgv = args.slice(1);
255
215
  const unknownFlagError = findUnknownFlag(sub, meta.knownFlags, subArgv);
256
216
  if (unknownFlagError) {
@@ -258,7 +218,6 @@ if (unknownFlagError) {
258
218
  process.exit(1);
259
219
  }
260
220
 
261
- // --- Load and dispatch ---
262
221
  const subFile = path.resolve(__dirname, '..', 'lib', 'cli', `${sub}.js`);
263
222
  const subFileUrl = pathToFileURL(subFile).href;
264
223
 
@@ -2,38 +2,11 @@
2
2
  // bin/postinstall.js — best-effort `.agents/` materializer on install.
3
3
 
4
4
  /**
5
- * Published-package `postinstall` hook.
6
- *
7
- * Runs `mandrel sync` to materialize the package payload into the consumer's
8
- * `./.agents/` working copy. This hook is **best-effort by contract** (Tech
9
- * Spec #3459 "Postinstall safety", Feature #3461): it MUST exit 0 even when
10
- * the sync fails, so that `--ignore-scripts` installs, sandboxed CI, or a
11
- * transient copy error degrade to the `mandrel doctor`-detected
12
- * "not materialized" state rather than failing the consumer's install.
13
- *
14
- * On any failure it logs a single actionable hint — "run `mandrel sync`" —
15
- * and exits 0. It performs nothing beyond the local file copy that
16
- * `mandrel sync` itself does: no network, no shell, no writes outside
17
- * `./.agents/`.
18
- *
19
- * **Source-checkout guard (Story #3489, fixed in #3580).** In the Mandrel
20
- * framework repo itself, `./.agents/` is not a regenerated working copy — it
21
- * *is* the committed product, and `mandrel sync` would clobber that source of
22
- * truth with a copy of `node_modules/mandrel/.agents/`. Today the
23
- * repo `.npmrc` (`ignore-scripts=true`) masks this, but a contributor running
24
- * `npm install --ignore-scripts=false` (or a tool that re-enables scripts)
25
- * would overwrite the source tree. To make the guard intrinsic rather than
26
- * config-dependent, the hook detects the source checkout and no-ops (exit 0)
27
- * without invoking the materializer. Consumer installs (where the package is
28
- * a dependency under `node_modules/`) are unaffected and still materialize
29
- * `.agents/` as before — see `isSourceCheckout` for the two signals used to
30
- * tell them apart.
31
- *
32
- * Injectable seams (used by tests/cli/postinstall.test.js):
33
- * - `sync` — replaces the real `runSync` from lib/cli/sync.js
34
- * - `isSourceCheckout` — replaces the source-checkout detector
35
- * - `writeErr` — replaces process.stderr.write
36
- * - `exit` — replaces process.exit
5
+ * Runs `mandrel sync` on install. Best-effort by contract: always exits 0 so
6
+ * `--ignore-scripts`, sandboxed CI, or a copy error degrade to the
7
+ * doctor-detected "not materialized" state instead of failing the install.
8
+ * In the framework's own source checkout it no-ops, since `.agents/` there is
9
+ * the committed product and a sync would clobber it.
37
10
  */
38
11
 
39
12
  import nodeFs from 'node:fs';
@@ -47,36 +20,13 @@ const HINT =
47
20
  'mandrel: could not materialize ./.agents/ during install — run `mandrel sync` to finish setup.\n';
48
21
 
49
22
  /**
50
- * Detect whether this hook is running inside the Mandrel framework source
51
- * checkout (as opposed to a consumer project that depends on the package).
52
- *
53
- * Two complementary, fail-safe signals — both biased toward running the sync
54
- * (the safe default for a consumer) — tell the two cases apart:
55
- *
56
- * 1. **`node_modules` path guard (primary).** When the package is installed as
57
- * a dependency this module lives at
58
- * `<consumer>/node_modules/mandrel/bin/postinstall.js`, so its own
59
- * resolved path contains a `node_modules` segment. That is true *by
60
- * construction* for every dependency install and needs no env var, so a
61
- * `node_modules` ancestor is treated as an unambiguous consumer install →
62
- * return `false` (run the sync). This is the signal the original guard
63
- * (Story #3489) was missing: it resolved the package's **own**
64
- * `package.json` (always named `mandrel`) instead of the consumer
65
- * root, so it misfired on every consumer install and skipped the sync
66
- * (Story #3580).
67
- *
68
- * 2. **`INIT_CWD`-rooted name check (source-repo signal).** Outside
69
- * `node_modules`, resolve the **invoking project root** and compare its
70
- * `package.json#name` to `mandrel`. npm sets `INIT_CWD` to the
71
- * directory where `npm install` was invoked — the framework repo root when
72
- * a contributor installs the framework itself. When `INIT_CWD` is unset
73
- * (e.g. the hook is run directly via `node`, outside npm), fall back to the
74
- * module-relative repo root (`bin/postinstall.js` sits one directory below
75
- * it), which still resolves to the source repo's own `package.json`.
76
- *
77
- * Fails safe: any read/parse error returns `false` (treat as a consumer
78
- * install and let the best-effort sync run), so a malformed or missing
79
- * `package.json` never strands a consumer without their `.agents/` payload.
23
+ * Two signals, both biased toward running the sync:
24
+ * 1. A `node_modules` segment in this module's own path means a dependency
25
+ * install — never the source repo (reading the package's own
26
+ * `package.json` would always say `mandrel`).
27
+ * 2. Otherwise compare the invoking root's `package.json#name` (`INIT_CWD`,
28
+ * or the module-relative repo root outside npm) to `mandrel`.
29
+ * Any read/parse error returns `false`.
80
30
  *
81
31
  * @param {{ fs?: typeof nodeFs, initCwd?: string, moduleUrl?: string }} [opts]
82
32
  * @returns {boolean} `true` when running in the `mandrel` source repo.
@@ -88,13 +38,8 @@ export function isSourceCheckout({
88
38
  } = {}) {
89
39
  try {
90
40
  const here = path.dirname(fileURLToPath(moduleUrl));
91
- // Installed as a dependency → unambiguously a consumer install, regardless
92
- // of what any package.json#name says. Run the sync.
93
41
  if (here.split(path.sep).includes('node_modules')) return false;
94
42
 
95
- // Source checkout: resolve the invoking project root (the dir where
96
- // `npm install` ran) and compare its package name. Fall back to the
97
- // module-relative repo root when npm did not set INIT_CWD.
98
43
  const root = initCwd || path.join(here, '..');
99
44
  const pkg = JSON.parse(
100
45
  fs.readFileSync(path.join(root, 'package.json'), 'utf8'),
@@ -106,30 +51,10 @@ export function isSourceCheckout({
106
51
  }
107
52
 
108
53
  /**
109
- * Run the materializer, swallowing any failure into an exit-0 hint.
110
- *
111
- * When invoked inside the framework source checkout the hook short-circuits
112
- * to a clean exit 0 *before* touching the materializer (Story #3489), so the
113
- * committed `.agents/` source is never overwritten — even under
114
- * `--ignore-scripts=false`.
115
- *
116
- * `runSync` calls its injected `exit` with a non-zero code when the package
117
- * is not resolvable (the common `--ignore-scripts`-adjacent failure). We
118
- * intercept that here instead of letting it propagate to `process.exit`,
119
- * and we also catch any thrown error (e.g. a mid-copy filesystem fault), so
120
- * the postinstall lifecycle can never fail the consumer's `npm install`.
121
- *
122
- * **Destination root (Story #3584).** `runSync` derives its destination from
123
- * `process.cwd()`, but npm runs a dependency's lifecycle scripts with cwd set
124
- * to the **package's own directory** (`node_modules/mandrel`), not
125
- * the consumer project root. Left unset, the materializer would copy
126
- * `.agents/` back onto the package's own payload and the consumer's project
127
- * root would get nothing. We pass `runSync` a `cwd` resolving to `INIT_CWD` —
128
- * the directory where `npm install` was invoked (the consumer root) — falling
129
- * back to `process.cwd()` only when the hook runs outside npm (`INIT_CWD`
130
- * unset). This is scoped to the postinstall path: the manual `mandrel sync` /
131
- * `mandrel update` paths already run from the project root and keep
132
- * `runSync`'s default `process.cwd()` behaviour.
54
+ * Both a non-zero `exit` from `runSync` and a thrown error become the exit-0
55
+ * hint. The destination is `INIT_CWD` (the consumer root), because npm runs
56
+ * lifecycle scripts with cwd set to `node_modules/mandrel` — syncing there
57
+ * would copy the payload onto itself.
133
58
  *
134
59
  * @param {{
135
60
  * sync?: typeof runSync,
@@ -148,9 +73,7 @@ export function runPostinstall({
148
73
  writeErr = (s) => process.stderr.write(s),
149
74
  exit = (code) => process.exit(code),
150
75
  } = {}) {
151
- // Source-checkout guard (Story #3489): never materialize over the
152
- // framework's own committed `.agents/` source. No hint — this is the
153
- // expected, correct no-op in the framework repo, not a degraded state.
76
+ // Expected no-op in the framework repo, so no hint.
154
77
  if (detectSource()) {
155
78
  exit(0);
156
79
  return { exitCode: 0, hinted: false, skipped: true };
@@ -158,18 +81,8 @@ export function runPostinstall({
158
81
 
159
82
  let syncFailed = false;
160
83
  try {
161
- // No argv is forwarded: the install-time materialization is a plain,
162
- // overwrite-in-place copy. The `mandrel sync` tokens in the package.json
163
- // `postinstall` string document intent (and are what the hint points
164
- // operators at); they are not flags this hook needs to honor.
165
84
  sync({
166
- // Resolve the destination from INIT_CWD (the consumer project root,
167
- // where `npm install` ran), not the package dir npm makes cwd during
168
- // the postinstall lifecycle (Story #3584). Fall back to process.cwd()
169
- // outside npm, when INIT_CWD is unset.
170
85
  cwd: () => initCwd || process.cwd(),
171
- // Best-effort: never let sync's own non-zero exit terminate the
172
- // install. Record the failure and fall through to the exit-0 hint.
173
86
  exit: (code) => {
174
87
  if (code !== 0) syncFailed = true;
175
88
  },
@@ -182,13 +95,11 @@ export function runPostinstall({
182
95
  writeErr(HINT);
183
96
  }
184
97
 
185
- // Always succeed: the install must not fail on a best-effort sync.
186
98
  exit(0);
187
99
  return { exitCode: 0, hinted: syncFailed, skipped: false };
188
100
  }
189
101
 
190
- // Run when invoked directly as the postinstall hook (not when imported by a
191
- // test). `process.argv[1]` is the resolved path to this file under npm.
102
+ // Only when run as the hook, not when imported by a test.
192
103
  const invokedDirectly = process.argv[1]?.endsWith('postinstall.js');
193
104
  if (invokedDirectly) {
194
105
  runPostinstall();
package/docs/CHANGELOG.md CHANGED
@@ -15,6 +15,38 @@ All notable changes to this project will be documented in this file.
15
15
  -->
16
16
  <!-- markdownlint-disable-file MD004 MD012 MD037 -->
17
17
 
18
+ ## [2.62.0](https://github.com/dsj1984/mandrel/compare/mandrel-v2.61.0...mandrel-v2.62.0) (2026-09-18)
19
+
20
+
21
+ ### Fixed
22
+
23
+ * **close:** arm auto-merge on a merge-queue-protected base ([#5395](https://github.com/dsj1984/mandrel/issues/5395)) ([#5396](https://github.com/dsj1984/mandrel/issues/5396)) ([6d739ea](https://github.com/dsj1984/mandrel/commit/6d739eadb8ae00bedeb7279b1a765c3e0cc5791e))
24
+
25
+ ## [2.61.0](https://github.com/dsj1984/mandrel/compare/mandrel-v2.60.0...mandrel-v2.61.0) (2026-09-18)
26
+
27
+
28
+ ### ⚠ BREAKING CHANGES
29
+
30
+ * these .agentrc keys are removed and now fail validation (mandrel update strips them first): delivery.quality.gates.lint, delivery.quality.gates.lighthouse, delivery.quality.gateScoping, delivery.quality.formatAutofix, delivery.quality.codingGuardrails, delivery.quality.baselineEpsilon, delivery.quality.autoRefresh.crapJumpCap, delivery.quality.autoRefresh.scope, delivery.quality.gates.crap.friction, delivery.quality.gates.crap.refreshTag, delivery.quality.gates.crap.refreshTimeoutMs, delivery.quality.gates.crap.incrementalCoverage.enabled, delivery.quality.gates.maintainability.refreshTag, delivery.quality.gates.maintainability.refreshTimeoutMs, delivery.quality.gates.duplication.refreshTimeoutMs, delivery.quality.gates.coverage.timeoutMs, delivery.quality.gates.mutation.strykerConfigPath, delivery.ci.watch, delivery.execution.timeoutMs, delivery.execution.requireCreditedCapture, delivery.tempRetention.staleDays, delivery.mergeWatch.intervalSeconds, delivery.mergeWatch.updateAttempts, delivery.review, delivery.feedbackLoop.frictionWindowDays, delivery.auditToStories, delivery.codeReview.providerConfig, delivery.codeReview.maxFixAttempts, github.defaultTimeoutMs, planning.memoryPool. The lint and lighthouse baseline kinds are gone from check-baselines.
31
+ * removed from the shipped payload (now repo-root scripts/, not distributed): .agents/scripts/test-isolate.js, .agents/scripts/check-test-portability.js, .agents/scripts/install-matrix-assert.js, .agents/scripts/check-audit-attribution.js, .agents/scripts/check-pinned-override-notes.js, .agents/scripts/check-action-pinning.js, .agents/scripts/check-baseline-drift.js, .agents/scripts/check-baseline-scope.js, .agents/scripts/check-generated-validator.js, .agents/scripts/check-knip-entries.js, .agents/scripts/check-lifecycle-lint.js, .agents/scripts/check-schema-references.js, .agents/scripts/check-workflow-citations.js, .agents/scripts/check-workflow-cli-lint.js, .agents/scripts/check-workflow-timeouts.js, .agents/scripts/lint-label-vocabulary.js, .agents/scripts/provision-git-hooks.js, .agents/scripts/run-coverage.js, .agents/scripts/run-lint.js, .agents/scripts/run-test-profile.js, .agents/scripts/run-verify.js, .agents/scripts/update-dead-exports-baseline.js, .agents/scripts/prune-baseline-orphans.js, .agents/scripts/post-structured-comment.js, plus .agents/scripts/lib/test-isolate/, .agents/scripts/lib/test-profile/, .agents/scripts/lib/dynamic-workflow/ and the rules .agents/rules/known-tooling-behavior.md, .agents/rules/test-seams.md and .agents/rules/orchestration-error-handling.md (now docs/contributing/).
32
+
33
+ ### Added
34
+
35
+ * adopt a contract-once comment policy and trim source comments to it ([#5384](https://github.com/dsj1984/mandrel/issues/5384)) ([#5391](https://github.com/dsj1984/mandrel/issues/5391)) ([13b98de](https://github.com/dsj1984/mandrel/commit/13b98de474019fd61935f8e95b855b8c6f923d7d))
36
+ * cut the unused .agentrc config surface and migrate consumers off it ([#5382](https://github.com/dsj1984/mandrel/issues/5382)) ([#5389](https://github.com/dsj1984/mandrel/issues/5389)) ([660a71c](https://github.com/dsj1984/mandrel/commit/660a71cf5b1acd77a44a4460c4424e43746bf738))
37
+ * stop close re-running the suite after base-sync and failing at pre-push on CRAP scope ([#5378](https://github.com/dsj1984/mandrel/issues/5378)) ([#5379](https://github.com/dsj1984/mandrel/issues/5379)) ([83bda93](https://github.com/dsj1984/mandrel/commit/83bda93942a909bd18307ae0dedabf3c814768af))
38
+
39
+
40
+ ### Fixed
41
+
42
+ * make the full-suite lock and close's suite spawns signal-safe, bounded and visible ([#5377](https://github.com/dsj1984/mandrel/issues/5377)) ([#5387](https://github.com/dsj1984/mandrel/issues/5387)) ([e3a32cb](https://github.com/dsj1984/mandrel/commit/e3a32cb6f773892b8cbfd0d4b9bbc81256038777))
43
+ * move contributor-only tooling out of the .agents payload ([#5381](https://github.com/dsj1984/mandrel/issues/5381)) ([#5388](https://github.com/dsj1984/mandrel/issues/5388)) ([984352b](https://github.com/dsj1984/mandrel/commit/984352b0cdcdd5707c8ed0c49e728bc9875634c6))
44
+
45
+
46
+ ### Changed
47
+
48
+ * make each close-path merge decision once ([#5383](https://github.com/dsj1984/mandrel/issues/5383)) ([#5390](https://github.com/dsj1984/mandrel/issues/5390)) ([027da2e](https://github.com/dsj1984/mandrel/commit/027da2efe4719c0dc2a6a5065afc710bd0f796a0))
49
+
18
50
  ## [2.60.0](https://github.com/dsj1984/mandrel/compare/mandrel-v2.59.0...mandrel-v2.60.0) (2026-09-18)
19
51
 
20
52