mandrel 2.59.0 → 2.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (678) hide show
  1. package/.agents/README.md +21 -19
  2. package/.agents/agents/acceptance-critic.md +24 -43
  3. package/.agents/agents/story-worker.md +20 -21
  4. package/.agents/docs/agentrc-reference.json +5 -84
  5. package/.agents/docs/configuration.md +48 -132
  6. package/.agents/docs/workflows.md +2 -2
  7. package/.agents/instructions.md +5 -8
  8. package/.agents/rules/ci-remediation.md +41 -8
  9. package/.agents/rules/gherkin-standards.md +4 -0
  10. package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
  11. package/.agents/schemas/agentrc.schema.json +16 -496
  12. package/.agents/schemas/story-deliver-terminal.schema.json +13 -3
  13. package/.agents/schemas/validation-evidence.schema.json +2 -1
  14. package/.agents/scripts/README.md +23 -13
  15. package/.agents/scripts/acceptance-eval.js +35 -169
  16. package/.agents/scripts/agents-bootstrap-github.js +27 -129
  17. package/.agents/scripts/apply-quality-bootstrap.js +4 -40
  18. package/.agents/scripts/audit-baselines.js +6 -27
  19. package/.agents/scripts/audit-labels-bootstrap.js +5 -29
  20. package/.agents/scripts/audit-to-stories.js +91 -361
  21. package/.agents/scripts/boot-sweep.js +19 -72
  22. package/.agents/scripts/bootstrap.js +74 -395
  23. package/.agents/scripts/ceremony-derive.js +10 -41
  24. package/.agents/scripts/check-arch-cycles.js +14 -64
  25. package/.agents/scripts/check-baselines.js +8 -48
  26. package/.agents/scripts/check-context-budget.js +105 -311
  27. package/.agents/scripts/check-cyclomatic.js +12 -44
  28. package/.agents/scripts/check-dead-exports.js +13 -64
  29. package/.agents/scripts/check-doc-links.js +38 -186
  30. package/.agents/scripts/check-gherkin-corpus.js +24 -127
  31. package/.agents/scripts/check-test-temp-hygiene.js +28 -169
  32. package/.agents/scripts/coverage-capture.js +34 -98
  33. package/.agents/scripts/deliver-light.js +25 -171
  34. package/.agents/scripts/deliver-recover.js +6 -42
  35. package/.agents/scripts/deliver-run.js +534 -0
  36. package/.agents/scripts/diagnose-friction.js +24 -116
  37. package/.agents/scripts/drain-pending-cleanup.js +1 -1
  38. package/.agents/scripts/evidence-gate.js +23 -85
  39. package/.agents/scripts/file-ci-gap.js +57 -49
  40. package/.agents/scripts/generate-config-docs.js +30 -170
  41. package/.agents/scripts/generate-lens-checklists.js +8 -52
  42. package/.agents/scripts/generate-skills-index.js +14 -112
  43. package/.agents/scripts/generate-workflows-doc.js +10 -70
  44. package/.agents/scripts/git-cleanup.js +2 -34
  45. package/.agents/scripts/lib/Graph.js +24 -81
  46. package/.agents/scripts/lib/ITicketingProvider.js +47 -143
  47. package/.agents/scripts/lib/Logger.js +14 -76
  48. package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
  49. package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
  50. package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
  51. package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
  52. package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
  53. package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
  54. package/.agents/scripts/lib/audit-baselines/read.js +3 -16
  55. package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
  56. package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
  57. package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
  58. package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
  59. package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
  60. package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
  61. package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
  62. package/.agents/scripts/lib/audit-suite/findings.js +12 -52
  63. package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
  64. package/.agents/scripts/lib/audit-suite/index.js +1 -15
  65. package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
  66. package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
  67. package/.agents/scripts/lib/audit-suite/runner.js +13 -43
  68. package/.agents/scripts/lib/audit-suite/selector.js +49 -349
  69. package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
  70. package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
  71. package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
  72. package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
  73. package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
  74. package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
  75. package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
  76. package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
  77. package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
  78. package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
  79. package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
  80. package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
  81. package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
  82. package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
  83. package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
  84. package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
  85. package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
  86. package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
  87. package/.agents/scripts/lib/baseline-loader.js +12 -51
  88. package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
  89. package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
  90. package/.agents/scripts/lib/baselines/components.js +10 -61
  91. package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
  92. package/.agents/scripts/lib/baselines/crap-preview-incremental.js +7 -19
  93. package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
  94. package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
  95. package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
  96. package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
  97. package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
  98. package/.agents/scripts/lib/baselines/envelope.js +13 -129
  99. package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
  100. package/.agents/scripts/lib/baselines/git-base.js +23 -142
  101. package/.agents/scripts/lib/baselines/kernel.js +11 -111
  102. package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
  103. package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
  104. package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
  105. package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
  106. package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
  107. package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
  108. package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
  109. package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
  110. package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
  111. package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
  112. package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
  113. package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
  114. package/.agents/scripts/lib/baselines/path-canon.js +19 -128
  115. package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
  116. package/.agents/scripts/lib/baselines/reader.js +14 -107
  117. package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
  118. package/.agents/scripts/lib/baselines/scope.js +11 -135
  119. package/.agents/scripts/lib/baselines/writer.js +16 -149
  120. package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
  121. package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
  122. package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
  123. package/.agents/scripts/lib/bdd-step-index.js +26 -100
  124. package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
  125. package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
  126. package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
  127. package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
  128. package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
  129. package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
  130. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
  131. package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
  132. package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
  133. package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
  134. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
  135. package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
  136. package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
  137. package/.agents/scripts/lib/bootstrap/summary.js +1 -8
  138. package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
  139. package/.agents/scripts/lib/branch-name-guard.js +4 -23
  140. package/.agents/scripts/lib/changed-files.js +39 -121
  141. package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
  142. package/.agents/scripts/lib/checks/index.js +18 -101
  143. package/.agents/scripts/lib/checks/loop-health.js +11 -53
  144. package/.agents/scripts/lib/checks/state.js +16 -91
  145. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
  146. package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
  147. package/.agents/scripts/lib/child-exec.js +39 -108
  148. package/.agents/scripts/lib/cli/standard-args.js +9 -116
  149. package/.agents/scripts/lib/cli-args.js +31 -146
  150. package/.agents/scripts/lib/cli-usage.js +5 -27
  151. package/.agents/scripts/lib/cli-utils.js +2 -12
  152. package/.agents/scripts/lib/close-validation/commands.js +13 -76
  153. package/.agents/scripts/lib/close-validation/gates.js +92 -331
  154. package/.agents/scripts/lib/close-validation/process.js +121 -151
  155. package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
  156. package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
  157. package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
  158. package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
  159. package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
  160. package/.agents/scripts/lib/close-validation/runner.js +53 -110
  161. package/.agents/scripts/lib/command-header.js +6 -28
  162. package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
  163. package/.agents/scripts/lib/config/baselines.js +3 -14
  164. package/.agents/scripts/lib/config/ci.js +8 -38
  165. package/.agents/scripts/lib/config/commands.js +1 -15
  166. package/.agents/scripts/lib/config/defaults.js +4 -33
  167. package/.agents/scripts/lib/config/delivery-routing.js +6 -34
  168. package/.agents/scripts/lib/config/explain.js +10 -83
  169. package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
  170. package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +3 -31
  171. package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
  172. package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
  173. package/.agents/scripts/lib/config/gates/index.js +2 -17
  174. package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
  175. package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
  176. package/.agents/scripts/lib/config/gates/shared.js +4 -64
  177. package/.agents/scripts/lib/config/github.js +4 -22
  178. package/.agents/scripts/lib/config/limits.js +4 -57
  179. package/.agents/scripts/lib/config/paths.js +2 -21
  180. package/.agents/scripts/lib/config/qa.js +4 -38
  181. package/.agents/scripts/lib/config/quality.js +76 -432
  182. package/.agents/scripts/lib/config/runners.js +12 -56
  183. package/.agents/scripts/lib/config/runtime.js +13 -57
  184. package/.agents/scripts/lib/config/shared.js +2 -16
  185. package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
  186. package/.agents/scripts/lib/config/temp-paths.js +40 -280
  187. package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
  188. package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
  189. package/.agents/scripts/lib/config-resolver.js +11 -52
  190. package/.agents/scripts/lib/config-schema-shared.js +1 -4
  191. package/.agents/scripts/lib/config-settings-schema-delivery.js +16 -291
  192. package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
  193. package/.agents/scripts/lib/config-settings-schema.js +37 -274
  194. package/.agents/scripts/lib/coverage-baseline.js +20 -110
  195. package/.agents/scripts/lib/coverage-capture-fullscope.js +18 -35
  196. package/.agents/scripts/lib/coverage-capture-incremental.js +15 -45
  197. package/.agents/scripts/lib/coverage-capture-usage.js +8 -25
  198. package/.agents/scripts/lib/coverage-capture.js +99 -224
  199. package/.agents/scripts/lib/coverage-utils.js +14 -79
  200. package/.agents/scripts/lib/cpu-pool.js +17 -123
  201. package/.agents/scripts/lib/crap-baseline-join.js +16 -88
  202. package/.agents/scripts/lib/crap-coordinates.js +6 -25
  203. package/.agents/scripts/lib/crap-engine.js +40 -153
  204. package/.agents/scripts/lib/crap-method-identity.js +16 -78
  205. package/.agents/scripts/lib/crap-utils.js +31 -155
  206. package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
  207. package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
  208. package/.agents/scripts/lib/dead-exports-knip.js +18 -56
  209. package/.agents/scripts/lib/dead-exports-mode.js +5 -24
  210. package/.agents/scripts/lib/degraded-mode.js +3 -26
  211. package/.agents/scripts/lib/dependency-parser.js +8 -40
  212. package/.agents/scripts/lib/dependency-version.js +13 -35
  213. package/.agents/scripts/lib/detect-package-manager.js +6 -36
  214. package/.agents/scripts/lib/doc-tiers.js +22 -124
  215. package/.agents/scripts/lib/duplicate-search.js +8 -72
  216. package/.agents/scripts/lib/env-loader.js +5 -27
  217. package/.agents/scripts/lib/error-redactor.js +6 -31
  218. package/.agents/scripts/lib/errors/index.js +2 -22
  219. package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
  220. package/.agents/scripts/lib/escomplex-kernel.js +21 -123
  221. package/.agents/scripts/lib/feedback-loop/graduator-core.js +94 -419
  222. package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
  223. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -149
  224. package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
  225. package/.agents/scripts/lib/findings/classify-finding.js +14 -69
  226. package/.agents/scripts/lib/findings/promote-finding.js +14 -112
  227. package/.agents/scripts/lib/findings/provenance-field.js +11 -52
  228. package/.agents/scripts/lib/findings/route-finding.js +37 -255
  229. package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
  230. package/.agents/scripts/lib/findings/severity.js +18 -104
  231. package/.agents/scripts/lib/format-generated-json.js +12 -44
  232. package/.agents/scripts/lib/full-suite-lock.js +160 -429
  233. package/.agents/scripts/lib/full-suite-queue.js +213 -0
  234. package/.agents/scripts/lib/gates/baseline-store.js +5 -9
  235. package/.agents/scripts/lib/gates/friction.js +1 -3
  236. package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
  237. package/.agents/scripts/lib/gh-exec.js +123 -191
  238. package/.agents/scripts/lib/git/cached-fetch.js +9 -52
  239. package/.agents/scripts/lib/git/sync-from-base.js +15 -107
  240. package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
  241. package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
  242. package/.agents/scripts/lib/git-utils.js +37 -161
  243. package/.agents/scripts/lib/github/framework-repo.js +8 -71
  244. package/.agents/scripts/lib/github-url.js +2 -17
  245. package/.agents/scripts/lib/import-graph.js +11 -38
  246. package/.agents/scripts/lib/install-cmd-parser.js +4 -13
  247. package/.agents/scripts/lib/json-utils.js +3 -18
  248. package/.agents/scripts/lib/label-constants.js +16 -111
  249. package/.agents/scripts/lib/label-taxonomy.js +4 -30
  250. package/.agents/scripts/lib/maintainability-engine.js +12 -80
  251. package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
  252. package/.agents/scripts/lib/maintainability-utils.js +16 -92
  253. package/.agents/scripts/lib/mandrel-catalog.js +12 -70
  254. package/.agents/scripts/lib/notifications/notifier.js +13 -38
  255. package/.agents/scripts/lib/npm-scripts.js +4 -23
  256. package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
  257. package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
  258. package/.agents/scripts/lib/observability/signal-validator.js +5 -37
  259. package/.agents/scripts/lib/observability/signals-writer.js +11 -121
  260. package/.agents/scripts/lib/observability/source-classifier.js +22 -203
  261. package/.agents/scripts/lib/observability/terse-result.js +14 -47
  262. package/.agents/scripts/lib/onboard/init-tail.js +13 -74
  263. package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
  264. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
  265. package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
  266. package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
  267. package/.agents/scripts/lib/orchestration/ceremony-routing.js +28 -156
  268. package/.agents/scripts/lib/orchestration/change-set.js +7 -36
  269. package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
  270. package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
  271. package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
  272. package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
  273. package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
  274. package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
  275. package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
  276. package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
  277. package/.agents/scripts/lib/orchestration/check-state.js +92 -0
  278. package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
  279. package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +121 -157
  280. package/.agents/scripts/lib/orchestration/code-review.js +24 -128
  281. package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
  282. package/.agents/scripts/lib/orchestration/complexity-gate.js +118 -462
  283. package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
  284. package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
  285. package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
  286. package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
  287. package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
  288. package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
  289. package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
  290. package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
  291. package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
  292. package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
  293. package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
  294. package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
  295. package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
  296. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
  297. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
  298. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
  299. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
  300. package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
  301. package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
  302. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
  303. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
  304. package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
  305. package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
  306. package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
  307. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
  308. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
  309. package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
  310. package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
  311. package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
  312. package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
  313. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
  314. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
  315. package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
  316. package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
  317. package/.agents/scripts/lib/orchestration/light-suitability.js +37 -307
  318. package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
  319. package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
  320. package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
  321. package/.agents/scripts/lib/orchestration/plan-context.js +55 -318
  322. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
  323. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
  324. package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
  325. package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
  326. package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
  327. package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
  328. package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +16 -78
  329. package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
  330. package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
  331. package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
  332. package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
  333. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
  334. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
  335. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +71 -289
  336. package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
  337. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +96 -362
  338. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +9 -39
  339. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +60 -186
  340. package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
  341. package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
  342. package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
  343. package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
  344. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
  345. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
  346. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
  347. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
  348. package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
  349. package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
  350. package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
  351. package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
  352. package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
  353. package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
  354. package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
  355. package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
  356. package/.agents/scripts/lib/orchestration/review-depth.js +12 -91
  357. package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
  358. package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
  359. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
  360. package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
  361. package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
  362. package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
  363. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
  364. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
  365. package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
  366. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
  367. package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
  368. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
  369. package/.agents/scripts/lib/orchestration/run-epilogue.js +245 -326
  370. package/.agents/scripts/lib/orchestration/run-scoped-config.js +55 -159
  371. package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
  372. package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
  373. package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
  374. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
  375. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +20 -82
  376. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
  377. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
  378. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
  379. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
  380. package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +96 -0
  381. package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
  382. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
  383. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
  384. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
  385. package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
  386. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
  387. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
  388. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
  389. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
  390. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
  391. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
  392. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
  393. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +180 -273
  394. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
  395. package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
  396. package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
  397. package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
  398. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
  399. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
  400. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
  401. package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
  402. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -200
  403. package/.agents/scripts/lib/orchestration/story-follow-ups.js +167 -252
  404. package/.agents/scripts/lib/orchestration/story-init-envelope.js +52 -0
  405. package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
  406. package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
  407. package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -135
  408. package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
  409. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
  410. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
  411. package/.agents/scripts/lib/orchestration/ticket-validator.js +63 -344
  412. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
  413. package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -261
  414. package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
  415. package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
  416. package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
  417. package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
  418. package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
  419. package/.agents/scripts/lib/path-security.js +3 -6
  420. package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
  421. package/.agents/scripts/lib/preflight-runner.js +13 -69
  422. package/.agents/scripts/lib/process-group.js +143 -0
  423. package/.agents/scripts/lib/project-root.js +2 -8
  424. package/.agents/scripts/lib/provider-factory.js +2 -25
  425. package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
  426. package/.agents/scripts/lib/qa/qa-session.js +15 -69
  427. package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
  428. package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
  429. package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
  430. package/.agents/scripts/lib/reserved-test-ids.js +9 -47
  431. package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
  432. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
  433. package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
  434. package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
  435. package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
  436. package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
  437. package/.agents/scripts/lib/signals/detectors/common.js +12 -38
  438. package/.agents/scripts/lib/signals/index.js +2 -19
  439. package/.agents/scripts/lib/signals/schema.js +14 -109
  440. package/.agents/scripts/lib/signals/write.js +2 -11
  441. package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
  442. package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
  443. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
  444. package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
  445. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
  446. package/.agents/scripts/lib/single-story-sweep.js +14 -97
  447. package/.agents/scripts/lib/skills/parse-skill.js +13 -59
  448. package/.agents/scripts/lib/skills/skills-index.js +8 -29
  449. package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
  450. package/.agents/scripts/lib/source-extensions.js +11 -42
  451. package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
  452. package/.agents/scripts/lib/stdio-flush.js +9 -36
  453. package/.agents/scripts/lib/story-adjacency.js +8 -40
  454. package/.agents/scripts/lib/story-body/body-format-lints.js +51 -66
  455. package/.agents/scripts/lib/story-body/footer-block.js +11 -44
  456. package/.agents/scripts/lib/story-body/story-body.js +123 -344
  457. package/.agents/scripts/lib/temp-retention.js +42 -143
  458. package/.agents/scripts/lib/templates/decomposer-prompts.js +18 -80
  459. package/.agents/scripts/lib/test-env.js +12 -65
  460. package/.agents/scripts/lib/test-run-credit.js +10 -65
  461. package/.agents/scripts/lib/test-runner-contract.js +19 -74
  462. package/.agents/scripts/lib/test-temp.js +38 -184
  463. package/.agents/scripts/lib/test-tiers.js +12 -96
  464. package/.agents/scripts/lib/ticket-body-sections.js +21 -96
  465. package/.agents/scripts/lib/transpile.js +15 -74
  466. package/.agents/scripts/lib/util/concurrent-map.js +6 -25
  467. package/.agents/scripts/lib/util/parse-id-list.js +8 -34
  468. package/.agents/scripts/lib/util/poll-loop.js +8 -28
  469. package/.agents/scripts/lib/util/with-timeout.js +2 -11
  470. package/.agents/scripts/lib/validation-evidence.js +21 -96
  471. package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
  472. package/.agents/scripts/lib/wave-runner/live-probe.js +67 -209
  473. package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
  474. package/.agents/scripts/lib/workers/crap-worker.js +11 -64
  475. package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
  476. package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
  477. package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
  478. package/.agents/scripts/lib/workflow-closure.js +22 -105
  479. package/.agents/scripts/lib/workspace-provisioner.js +16 -54
  480. package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
  481. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
  482. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
  483. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
  484. package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
  485. package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
  486. package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
  487. package/.agents/scripts/lib/worktree-manager.js +15 -40
  488. package/.agents/scripts/lint-issue-body.js +12 -68
  489. package/.agents/scripts/mandrel-update-preflight.js +10 -70
  490. package/.agents/scripts/merge-baseline.js +30 -105
  491. package/.agents/scripts/nav-registry-diff.js +22 -108
  492. package/.agents/scripts/notify.js +12 -69
  493. package/.agents/scripts/plan-context.js +97 -92
  494. package/.agents/scripts/plan-critics.js +12 -66
  495. package/.agents/scripts/plan-persist.js +71 -137
  496. package/.agents/scripts/plan-run-epilogue.js +20 -43
  497. package/.agents/scripts/pr-watch-with-update.js +79 -263
  498. package/.agents/scripts/providers/github/auth.js +3 -8
  499. package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
  500. package/.agents/scripts/providers/github/board-add.js +5 -21
  501. package/.agents/scripts/providers/github/branch-protection.js +11 -43
  502. package/.agents/scripts/providers/github/cache.js +2 -14
  503. package/.agents/scripts/providers/github/comments.js +7 -40
  504. package/.agents/scripts/providers/github/compose.js +3 -19
  505. package/.agents/scripts/providers/github/errors.js +22 -125
  506. package/.agents/scripts/providers/github/issues.js +31 -123
  507. package/.agents/scripts/providers/github/labels.js +24 -124
  508. package/.agents/scripts/providers/github/mappers.js +5 -27
  509. package/.agents/scripts/providers/github/merge-methods.js +3 -22
  510. package/.agents/scripts/providers/github/project-board.js +2 -17
  511. package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
  512. package/.agents/scripts/providers/github/request-helpers.js +5 -32
  513. package/.agents/scripts/providers/github/search-budget.js +9 -39
  514. package/.agents/scripts/providers/github/search-query.js +5 -26
  515. package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
  516. package/.agents/scripts/providers/github/sub-issues.js +7 -36
  517. package/.agents/scripts/providers/github/tickets.js +32 -134
  518. package/.agents/scripts/providers/github.js +18 -59
  519. package/.agents/scripts/prune-plan-run-labels.js +12 -46
  520. package/.agents/scripts/quality-preview.js +35 -220
  521. package/.agents/scripts/resolve-doc-tiers.js +3 -26
  522. package/.agents/scripts/resolve-stories.js +16 -67
  523. package/.agents/scripts/resync-status-column.js +6 -25
  524. package/.agents/scripts/run-tests.js +29 -104
  525. package/.agents/scripts/single-story-close.js +23 -135
  526. package/.agents/scripts/single-story-confirm-merge.js +32 -139
  527. package/.agents/scripts/single-story-init.js +47 -259
  528. package/.agents/scripts/stories-wave-tick.js +179 -415
  529. package/.agents/scripts/sync-agentrc.js +3 -21
  530. package/.agents/scripts/sync-claude-agents.js +9 -55
  531. package/.agents/scripts/sync-claude-commands.js +20 -110
  532. package/.agents/scripts/test-wrapper.js +6 -43
  533. package/.agents/scripts/update-coverage-baseline.js +5 -22
  534. package/.agents/scripts/update-crap-baseline.js +7 -30
  535. package/.agents/scripts/update-duplication-baseline.js +16 -92
  536. package/.agents/scripts/update-maintainability-baseline.js +8 -62
  537. package/.agents/scripts/update-ticket-state.js +1 -7
  538. package/.agents/scripts/validate-skills.js +6 -26
  539. package/.agents/skills/core/gates-and-baselines/reference.md +0 -1
  540. package/.agents/skills/skills.index.json +2 -2
  541. package/.agents/skills/stack/qa/playwright/SKILL.md +26 -0
  542. package/.agents/templates/agent-protocol.md +2 -2
  543. package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
  544. package/.agents/workflows/audit-accessibility.md +4 -7
  545. package/.agents/workflows/audit-adrs.md +3 -6
  546. package/.agents/workflows/audit-architecture.md +3 -11
  547. package/.agents/workflows/audit-baselines.md +6 -9
  548. package/.agents/workflows/audit-clean-code.md +8 -12
  549. package/.agents/workflows/audit-data-model.md +3 -7
  550. package/.agents/workflows/audit-dependencies.md +4 -7
  551. package/.agents/workflows/audit-devops.md +4 -8
  552. package/.agents/workflows/audit-documentation.md +1 -4
  553. package/.agents/workflows/audit-mobile.md +4 -7
  554. package/.agents/workflows/audit-navigability.md +3 -6
  555. package/.agents/workflows/audit-performance.md +2 -4
  556. package/.agents/workflows/audit-privacy.md +4 -7
  557. package/.agents/workflows/audit-quality.md +4 -7
  558. package/.agents/workflows/audit-security.md +4 -7
  559. package/.agents/workflows/audit-seo.md +4 -7
  560. package/.agents/workflows/audit-sre.md +4 -7
  561. package/.agents/workflows/audit-to-stories.md +17 -30
  562. package/.agents/workflows/audit-ux-ui.md +4 -7
  563. package/.agents/workflows/helpers/acceptance-self-eval.md +84 -157
  564. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  565. package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
  566. package/.agents/workflows/helpers/code-review.md +4 -2
  567. package/.agents/workflows/helpers/deliver-digest.md +37 -28
  568. package/.agents/workflows/helpers/deliver-light.md +92 -101
  569. package/.agents/workflows/helpers/deliver-reference.md +162 -220
  570. package/.agents/workflows/helpers/deliver-story-reference.md +197 -607
  571. package/.agents/workflows/helpers/deliver-story.md +17 -18
  572. package/.agents/workflows/helpers/plan-reference.md +125 -167
  573. package/.agents/workflows/helpers/qa-core.md +12 -0
  574. package/.agents/workflows/mandrel-deliver.md +47 -31
  575. package/.agents/workflows/mandrel-plan.md +22 -21
  576. package/.agents/workflows/mandrel-update.md +36 -21
  577. package/.agents/workflows/memory-consolidate.md +1 -1
  578. package/.agents/workflows/qa-assist.md +27 -71
  579. package/.agents/workflows/qa-explore.md +19 -59
  580. package/.agents/workflows/qa-run.md +11 -33
  581. package/README.md +1 -1
  582. package/bin/mandrel.js +5 -46
  583. package/bin/postinstall.js +18 -107
  584. package/docs/CHANGELOG.md +60 -0
  585. package/lib/cli/doctor.js +11 -71
  586. package/lib/cli/init.js +26 -165
  587. package/lib/cli/migrate.js +5 -64
  588. package/lib/cli/registry.js +84 -467
  589. package/lib/cli/sync-agents.js +4 -64
  590. package/lib/cli/sync-commands.js +11 -64
  591. package/lib/cli/sync.js +34 -213
  592. package/lib/cli/uninstall.js +40 -219
  593. package/lib/cli/update.js +326 -523
  594. package/lib/cli/version-check.js +8 -72
  595. package/lib/cli/version-helpers.js +14 -87
  596. package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
  597. package/lib/migrations/index.js +17 -92
  598. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
  599. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
  600. package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
  601. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
  602. package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
  603. package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
  604. package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
  605. package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
  606. package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +21 -0
  607. package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
  608. package/package.json +17 -14
  609. package/.agents/docs/SDLC.md +0 -590
  610. package/.agents/docs/quality-gates.md +0 -1179
  611. package/.agents/rules/known-tooling-behavior.md +0 -150
  612. package/.agents/rules/orchestration-error-handling.md +0 -61
  613. package/.agents/rules/test-seams.md +0 -59
  614. package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
  615. package/.agents/schemas/baselines/lint.schema.json +0 -47
  616. package/.agents/schemas/model-attribution.schema.json +0 -53
  617. package/.agents/scripts/check-action-pinning.js +0 -260
  618. package/.agents/scripts/check-audit-attribution.js +0 -302
  619. package/.agents/scripts/check-baseline-drift.js +0 -211
  620. package/.agents/scripts/check-baseline-scope.js +0 -362
  621. package/.agents/scripts/check-generated-validator.js +0 -202
  622. package/.agents/scripts/check-knip-entries.js +0 -159
  623. package/.agents/scripts/check-lifecycle-lint.js +0 -294
  624. package/.agents/scripts/check-pinned-override-notes.js +0 -102
  625. package/.agents/scripts/check-schema-references.js +0 -366
  626. package/.agents/scripts/check-test-portability.js +0 -512
  627. package/.agents/scripts/check-workflow-citations.js +0 -332
  628. package/.agents/scripts/check-workflow-cli-lint.js +0 -299
  629. package/.agents/scripts/check-workflow-timeouts.js +0 -291
  630. package/.agents/scripts/install-matrix-assert.js +0 -326
  631. package/.agents/scripts/lib/audit-advisories.js +0 -195
  632. package/.agents/scripts/lib/audit-attribution.js +0 -134
  633. package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
  634. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
  635. package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
  636. package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
  637. package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
  638. package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
  639. package/.agents/scripts/lib/c8-cli-path.js +0 -21
  640. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
  641. package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
  642. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
  643. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
  644. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
  645. package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
  646. package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
  647. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
  648. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
  649. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
  650. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
  651. package/.agents/scripts/lib/fs-walk.js +0 -52
  652. package/.agents/scripts/lib/knip-config-resolver.js +0 -181
  653. package/.agents/scripts/lib/knip-entry-sync.js +0 -452
  654. package/.agents/scripts/lib/orchestration/model-attribution.js +0 -418
  655. package/.agents/scripts/lib/orchestration/story-plan-state.js +0 -33
  656. package/.agents/scripts/lib/orchestration/structured-comment-parser.js +0 -67
  657. package/.agents/scripts/lib/pinned-override-notes.js +0 -88
  658. package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
  659. package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
  660. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
  661. package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
  662. package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
  663. package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
  664. package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
  665. package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
  666. package/.agents/scripts/lib/test-isolate/runner.js +0 -483
  667. package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
  668. package/.agents/scripts/lib/test-profile/render-report.js +0 -45
  669. package/.agents/scripts/lint-label-vocabulary.js +0 -214
  670. package/.agents/scripts/post-structured-comment.js +0 -127
  671. package/.agents/scripts/provision-git-hooks.js +0 -85
  672. package/.agents/scripts/prune-baseline-orphans.js +0 -181
  673. package/.agents/scripts/run-coverage.js +0 -197
  674. package/.agents/scripts/run-lint.js +0 -133
  675. package/.agents/scripts/run-test-profile.js +0 -129
  676. package/.agents/scripts/run-verify.js +0 -118
  677. package/.agents/scripts/test-isolate.js +0 -55
  678. package/.agents/scripts/update-dead-exports-baseline.js +0 -321
@@ -1,49 +1,11 @@
1
1
  /**
2
- * update-duplication-baseline.js — manual refresh CLI for the
3
- * code-duplication (DRY) baseline (Story #3664).
4
- *
5
- * Story #4944: this CLI is now a thin wrapper around
6
- * `refreshBaseline({ kind: 'duplication' })` from
7
- * `.agents/scripts/lib/baselines/refresh-service.js`, completing the Epic
8
- * #2173 migration — duplication was the last kind still assembling its own
9
- * writer call via the legacy `buildWriterScopeArgs` path. Scope resolution,
10
- * prior-envelope reading, epsilon damping, envelope assembly, and
11
- * persistence all flow through the unified service.
12
- *
13
- * The migration is what makes this CLI's documented surface true. Before it,
14
- * `--full-scope` was advertised and parsed by nobody, and the no-flag default
15
- * was a full rewrite rather than the diff-scoped refresh the usage text
16
- * described.
17
- *
18
- * Surface:
19
- *
20
- * - `--baseline <path>`: write somewhere other than the configured
21
- * `delivery.quality.gates.duplication.baselinePath`.
22
- * - `--diff-scope <ref>`: scope the refresh to files changed between
23
- * `<ref>` and HEAD. Out-of-scope rows are preserved verbatim from the
24
- * prior on-disk baseline.
25
- * - `--full-scope`: regenerate every row (no out-of-scope merge).
26
- * - With no scope flag: scope is derived from `git diff --name-only
27
- * origin/main..HEAD` (the service's default `baseRef..headRef`), matching
28
- * `update-crap-baseline.js` / `update-maintainability-baseline.js` /
29
- * `update-coverage-baseline.js`.
30
- *
31
- * **Scope is a write-side filter here, not a scan-side one.** jscpd detects
32
- * clones pairwise, so the scan always covers the whole target tree even in
33
- * diff mode — see `buildDefaultDuplicationScorer` in the refresh service for
34
- * why narrowing the scan would drop clones between a changed file and an
35
- * unchanged one. What a scope flag narrows is which rows the refresh is
36
- * allowed to rewrite.
37
- *
38
- * Exits non-zero only when the scanner itself crashes. An empty result (no
39
- * detected clones) still writes an envelope with `rows: []` so downstream
40
- * `check-baselines` can tell "intentional empty baseline" apart from "no
41
- * baseline yet".
2
+ * Refresh the duplication baseline via `refreshBaseline({ kind:
3
+ * 'duplication' })`. Scope is a write-side filter only: clone detection is
4
+ * pairwise, so the scan always covers the whole tree. No clones still writes
5
+ * `rows: []`, so an intentional empty baseline differs from a missing one.
42
6
  */
43
7
 
44
- // Fail-fast if the framework's runtime deps are not installed — must be the
45
- // first import so the check runs before any third-party-importing sibling
46
- // module is evaluated (Story #3432).
8
+ // Must be the first import: fails fast before any third-party import loads.
47
9
  import './lib/runtime-deps/ensure-installed.js';
48
10
  import path from 'node:path';
49
11
  import { parseDiffScopeFlag } from './lib/baselines/diff-scope-cli.js';
@@ -53,12 +15,7 @@ import { getBaselineEpsilon } from './lib/config/quality.js';
53
15
  import { getQuality, resolveConfig } from './lib/config-resolver.js';
54
16
  import { Logger } from './lib/Logger.js';
55
17
 
56
- /**
57
- * Usage block for `--help`. This CLI *writes* on invocation, so the help
58
- * branch must short-circuit before `main` runs rather than inside it —
59
- * `runAsCli` answers help first, which makes "a usage probe never mutates a
60
- * baseline" structural instead of a check `main` has to remember.
61
- */
18
+ /** `runAsCli` answers `--help` before `main`, so a usage probe never writes. */
62
19
  const USAGE = {
63
20
  invocation:
64
21
  'node .agents/scripts/update-duplication-baseline.js [--baseline <path>] [--full-scope | --diff-scope <ref>]',
@@ -85,10 +42,6 @@ const USAGE = {
85
42
  };
86
43
 
87
44
  /**
88
- * Parse `--baseline <path>` — the one flag this CLI does not share with its
89
- * siblings. The scope flags are parsed by the shared helpers so their
90
- * contract stays identical across the four update CLIs.
91
- *
92
45
  * @param {string[]} argv
93
46
  * @returns {{ baselinePath: string | undefined }}
94
47
  */
@@ -104,8 +57,6 @@ function parseCliArgs(argv = process.argv.slice(2)) {
104
57
  }
105
58
 
106
59
  /**
107
- * Parse `--full-scope` (boolean opt-out flag).
108
- *
109
60
  * @param {string[]} argv
110
61
  * @returns {boolean}
111
62
  */
@@ -114,12 +65,8 @@ function parseFullScopeFlag(argv = []) {
114
65
  }
115
66
 
116
67
  /**
117
- * Resolve the duplication gate block from the merged quality config. The
118
- * flattened legacy bag does not expose a `duplication` accessor (the kind
119
- * post-dates the bag), so read it off the resolved `gates` map directly.
120
- *
121
- * @param {object} config resolved config
122
- * @returns {object} the duplication gate block (possibly empty)
68
+ * @param {object} config
69
+ * @returns {object}
123
70
  */
124
71
  function resolveDuplicationGate(config) {
125
72
  const gates = getQuality(config).gates ?? {};
@@ -127,14 +74,8 @@ function resolveDuplicationGate(config) {
127
74
  }
128
75
 
129
76
  /**
130
- * Resolve the mutually-exclusive scope selection from argv.
131
- *
132
- * Split out of `main` deliberately: nothing in this file is reachable from a
133
- * test (the CLI is only ever spawned with `--help`, which `runAsCli`
134
- * short-circuits), so every function here scores CRAP at zero coverage —
135
- * `c² + c`. A single `main` carrying all the branching lands at c=8 → 72,
136
- * well over the 30 ceiling. Small single-purpose helpers keep each row far
137
- * below it without hiding any logic.
77
+ * Split out of `main` because nothing here is covered by tests, so CRAP is
78
+ * `c² + c`; small helpers keep each row under the ceiling.
138
79
  *
139
80
  * @param {string[]} argv
140
81
  * @returns {{ fullScope: boolean, diffScopeRef: string | null }}
@@ -152,13 +93,9 @@ function resolveScopeSelection(argv) {
152
93
  }
153
94
 
154
95
  /**
155
- * Resolve the absolute path the refreshed envelope is written to:
156
- * `--baseline <path>` wins, then the configured gate path, then the
157
- * framework default.
158
- *
159
96
  * @param {string[]} argv
160
- * @param {object} gate resolved duplication gate block
161
- * @returns {string} absolute path
97
+ * @param {object} gate
98
+ * @returns {string}
162
99
  */
163
100
  function resolveAbsBaselinePath(argv, gate) {
164
101
  const baselinePath =
@@ -171,9 +108,6 @@ function resolveAbsBaselinePath(argv, gate) {
171
108
  }
172
109
 
173
110
  /**
174
- * Announce which scope the refresh resolved to, so an operator reading the
175
- * log can tell a narrowed refresh from a full rewrite without re-deriving it.
176
- *
177
111
  * @param {{ fullScope: boolean, diffScopeRef: string | null }} selection
178
112
  */
179
113
  function logScopeDecision({ fullScope, diffScopeRef }) {
@@ -189,14 +123,8 @@ function logScopeDecision({ fullScope, diffScopeRef }) {
189
123
  }
190
124
 
191
125
  /**
192
- * Assemble the `refreshBaseline` option bag for the resolved selection.
193
- *
194
- * No `scorer` is injected — the service resolves the canonical default
195
- * duplication scorer, which reads `gates.duplication.targetDirs` /
196
- * `ignoreGlobs` off the same resolved config this CLI reads.
197
- *
198
126
  * @param {{ fullScope: boolean, diffScopeRef: string | null, absBaselinePath: string, epsilon: number }} args
199
- * @returns {object} options for `refreshBaseline`
127
+ * @returns {object}
200
128
  */
201
129
  function buildRefreshOpts({
202
130
  fullScope,
@@ -212,14 +140,10 @@ function buildRefreshOpts({
212
140
  if (fullScope) {
213
141
  refreshOpts.fullScope = true;
214
142
  } else if (diffScopeRef) {
215
- // The CLI's documented `--diff-scope <ref>` semantics are `<ref>...HEAD`
216
- // (three-dot). The service derives via two-dot `baseRef..headRef`; pass
217
- // the ref as `baseRef` so the derivation runs through the same execFile
218
- // seam the sibling CLIs use.
143
+ // The service derives two-dot `baseRef..headRef`, like the sibling CLIs.
219
144
  refreshOpts.baseRef = diffScopeRef;
220
145
  }
221
- // No flag → scopeFiles=null + fullScope=false → service derives the diff
222
- // via `origin/main..HEAD` (its default baseRef/headRef).
146
+ // No flag: the service derives the diff from `origin/main..HEAD`.
223
147
  return refreshOpts;
224
148
  }
225
149
 
@@ -239,7 +163,7 @@ async function main() {
239
163
  buildRefreshOpts({
240
164
  ...selection,
241
165
  absBaselinePath,
242
- epsilon: getBaselineEpsilon('duplication', config),
166
+ epsilon: getBaselineEpsilon('duplication'),
243
167
  }),
244
168
  );
245
169
 
@@ -1,44 +1,10 @@
1
1
  /**
2
- * update-maintainability-baseline.js — manual refresh CLI for the
3
- * maintainability baseline.
4
- *
5
- * Story #2202 / Task #2215 (Epic #2173): this CLI is now a thin wrapper
6
- * around `refreshBaseline({ kind: 'maintainability' })` from
7
- * `.agents/scripts/lib/baselines/refresh-service.js`. All scoring, scope
8
- * resolution, envelope assembly, and persistence flows through the unified
9
- * service.
10
- *
11
- * Story #4293: the CLI no longer injects a bespoke maintainability scorer.
12
- * It now lets `refreshBaseline` resolve the canonical default scorer
13
- * (`buildDefaultMaintainabilityScorer`) the same way `update-crap-baseline.js`
14
- * and `update-coverage-baseline.js` route through their canonical defaults.
15
- * The previously-injected `buildMaintainabilityScorer` was a stale copy of the
16
- * canonical scorer that never received the `ignoreGlobs` fix on its diff-scope
17
- * branch, so an ignored-but-changed file (e.g. one matched by
18
- * `config-settings-schema*.js` or a consumer's `seed.mjs`) leaked into `rows`
19
- * and dragged `rollup["*"].min` below the maintainability floor. The canonical
20
- * default scorer applies the ignore filter on BOTH the full-scope walk and the
21
- * diff-scope branch, eliminating the divergence at the source.
22
- *
23
- * Surface:
24
- *
25
- * - `--diff-scope <ref>` (or `--diff-scope=<ref>`): explicitly scope the
26
- * refresh to files changed between `<ref>` and HEAD. Out-of-scope rows
27
- * are preserved byte-for-byte from the prior on-disk baseline.
28
- * - With no flag: scope is derived from `git diff --name-only
29
- * origin/main..HEAD` (the service's default `baseRef..headRef`).
30
- * Operators wanting a full rewrite must pass `--full-scope` (added by
31
- * Task #2214; see that Task's notes for the cut-over).
32
- *
33
- * Full-scope refreshes (`scope.mode === 'full'`) walk every configured
34
- * target directory; diff/explicit refreshes score only the files the
35
- * service hands in. Both paths drop `ignoreGlobs`-listed files via the
36
- * canonical default scorer.
2
+ * Refresh the maintainability baseline via `refreshBaseline({ kind:
3
+ * 'maintainability' })`. No scorer is injected: the service's default applies
4
+ * `ignoreGlobs` on both the full walk and the diff-scope branch.
37
5
  */
38
6
 
39
- // Fail-fast if the framework's runtime deps are not installed — must be the
40
- // first import so the check runs before any third-party-importing sibling
41
- // module is evaluated (Story #3432).
7
+ // Must be the first import: fails fast before any third-party import loads.
42
8
  import './lib/runtime-deps/ensure-installed.js';
43
9
  import path from 'node:path';
44
10
  import { parseDiffScopeFlag } from './lib/baselines/diff-scope-cli.js';
@@ -48,12 +14,7 @@ import { getBaselineEpsilon } from './lib/config/quality.js';
48
14
  import { getBaselines, resolveConfig } from './lib/config-resolver.js';
49
15
  import { Logger } from './lib/Logger.js';
50
16
 
51
- /**
52
- * Usage block for `--help` (Story #4872). This CLI *writes* on invocation, so
53
- * the help branch must short-circuit before `main` runs rather than inside it —
54
- * `runAsCli` answers help first, which makes "a usage probe never mutates a
55
- * baseline" structural instead of a check `main` has to remember.
56
- */
17
+ /** `runAsCli` answers `--help` before `main`, so a usage probe never writes. */
57
18
  const USAGE = {
58
19
  invocation:
59
20
  'node .agents/scripts/update-maintainability-baseline.js [--full-scope | --diff-scope <ref>]',
@@ -72,8 +33,6 @@ const USAGE = {
72
33
  };
73
34
 
74
35
  /**
75
- * Parse `--full-scope` (boolean opt-out flag).
76
- *
77
36
  * @param {string[]} argv
78
37
  * @returns {boolean}
79
38
  */
@@ -97,7 +56,7 @@ async function main() {
97
56
  const absBaselinePath = path.isAbsolute(baselinePath)
98
57
  ? baselinePath
99
58
  : path.resolve(process.cwd(), baselinePath);
100
- const epsilon = getBaselineEpsilon('maintainability', config);
59
+ const epsilon = getBaselineEpsilon('maintainability');
101
60
 
102
61
  Logger.info('[Maintainability] Updating baseline...');
103
62
  if (fullScope) {
@@ -110,14 +69,6 @@ async function main() {
110
69
  );
111
70
  }
112
71
 
113
- // Task #2214 (Epic #2173, AC-2): flag-omission now defaults to
114
- // diff-scope. The pre-migration default was a full regenerate; operators
115
- // wanting that behaviour must now pass `--full-scope` explicitly. This is
116
- // a deliberate breaking CLI behaviour change — see docs/CHANGELOG.md.
117
- //
118
- // Story #4293: no `scorer` is injected — the service resolves the canonical
119
- // default maintainability scorer, which applies `ignoreGlobs` on both the
120
- // full-scope walk and the diff-scope branch.
121
72
  const refreshOpts = {
122
73
  kind: 'maintainability',
123
74
  writePath: absBaselinePath,
@@ -126,15 +77,10 @@ async function main() {
126
77
  if (fullScope) {
127
78
  refreshOpts.fullScope = true;
128
79
  } else if (diffScopeRef) {
129
- // The CLI's documented `--diff-scope <ref>` semantics are
130
- // `<ref>...HEAD` (three-dot). The service derives via two-dot
131
- // `baseRef..headRef`; pass the ref as `baseRef` so the service's
132
- // diff-derivation does the heavy lifting through the same execFile
133
- // seam that auto-refresh uses.
80
+ // The service derives two-dot `baseRef..headRef`, like auto-refresh.
134
81
  refreshOpts.baseRef = diffScopeRef;
135
82
  }
136
- // No flag → scopeFiles=null + fullScope=false → service derives the
137
- // diff via `origin/main..HEAD` (its default baseRef/headRef).
83
+ // No flag: the service derives the diff from `origin/main..HEAD`.
138
84
 
139
85
  const result = await refreshBaseline(refreshOpts);
140
86
 
@@ -80,13 +80,7 @@ if (
80
80
  Logger.info(
81
81
  `[State-Sync] Transitioning ticket #${ticketId} to ${state}...`,
82
82
  );
83
- // Story #4545 — no second cascade here. `transitionTicketState` already
84
- // fires the upward cascade on every transition (bulk.js registers
85
- // `cascadeParentState` as transition.js's cascade runner, and the DONE
86
- // branch delegates to `cascadeCompletion`), so the explicit call this
87
- // used to make re-walked the same parents and re-spent the same API
88
- // calls a second time on every done transition — under a Story-only
89
- // model where no orchestration parent exists to find.
83
+ // No explicit cascade: `transitionTicketState` already runs it.
90
84
  await transitionTicketState(provider, ticketId, state);
91
85
 
92
86
  // Optional secondary label removal alongside the state transition
@@ -1,30 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  // .agents/scripts/validate-skills.js
3
3
  //
4
- // Walk `SKILL.md` under both skills roots — the package payload
5
- // (`.agents/skills/{core,stack}/`) and the consumer-writable local zone
6
- // (`.agents/local/skills/{core,stack}/`, Story #5135) — via the shared parser
7
- // helper, validate each frontmatter block against
8
- // `.agents/schemas/skill.schema.json`, enforce Policy Capsule presence
9
- // (5–12 bullets), and verify membership in each root's own manifest when it
10
- // exists. A consumer-authored skill is held to exactly the same bar as a
11
- // shipped one; the roots are validated separately because each carries its
12
- // own index (the shipped manifest is a payload file and must stay
13
- // payload-only — see generate-skills-index.js). All findings are batched into a single
14
- // human-readable report; the process exits non-zero when any finding is
15
- // surfaced.
16
4
  //
17
- // CLI surface:
18
- //
19
- // node validate-skills.js [--root <dir>]
20
- //
21
- // --root <dir> Use <dir> as the repo root (defaults to the project
22
- // root containing `.agents/skills`). Useful for tests
23
- // staging fixture trees outside the real repo.
24
- //
25
- // Honors AGENT_LOG_LEVEL via the shared `Logger`. The findings report is
26
- // written to stdout when any finding is present, so callers can capture
27
- // it for ticket comments or CI logs.
5
+ // Validate every `SKILL.md` in the payload and local skills roots: schema
6
+ // frontmatter, a 5–12 bullet Policy Capsule, and membership in that root's
7
+ // own index (the shipped index is a payload file and stays payload-only).
8
+ // Local skills meet the same bar. Findings are batched; any finding exits
9
+ // non-zero. `--root <dir>` overrides the repo root (for fixtures).
28
10
 
29
11
  import fs from 'node:fs';
30
12
  import path from 'node:path';
@@ -56,9 +38,7 @@ function defaultRepoRoot() {
56
38
  }
57
39
 
58
40
  export function parseArgs(argv) {
59
- // `--help` / `-h` is a side-channel signal handled before the shared
60
- // parser sees it: the shared parser does not (yet) model help flags as
61
- // first-class output, and pre-stripping keeps the legacy parsed shape.
41
+ // Help is handled before the shared parser, which does not model it.
62
42
  if (argv.some((t) => t === '--help' || t === '-h')) {
63
43
  return { root: null, help: true };
64
44
  }
@@ -19,7 +19,6 @@ file is the roster, the per-kind command table, and the procedure.
19
19
  | `arch-cycles.json` | `npm run check:arch` |
20
20
  | `cyclomatic.json` | `npm run check:cyclomatic` |
21
21
  | `context-budget.json` | `npm run check:context-budget` |
22
- | `workflow-citations.json` | `npm run check:workflow-citations` |
23
22
  | `agents-loc.csv` | `npm run baseline:agents-loc` |
24
23
 
25
24
  A refresh is **not** a regression entry — it tells the ratchet that the new
@@ -1,5 +1,5 @@
1
1
  {
2
- "generatedAt": "2026-09-14T11:57:26.498Z",
2
+ "generatedAt": "2026-09-17T13:37:08.250Z",
3
3
  "generator": "generate-skills-index.js@1",
4
4
  "skills": [
5
5
  {
@@ -87,7 +87,7 @@
87
87
  "tier": "stack",
88
88
  "category": "qa",
89
89
  "path": ".agents/skills/stack/qa/playwright/SKILL.md",
90
- "description": "Robust E2E browser testing with Playwright. Use when writing browser-driven tests — leverage auto-waiting (no `waitForTimeout`), prefer user-visible locators (`getByRole`, `getByText`, `getByLabel`) over CSS/XPath, reuse `storageState` for auth, and enable trace-on-first-retry for CI debugging.",
90
+ "description": "Robust E2E browser testing with Playwright. Use when writing browser-driven tests — leverage auto-waiting (no `waitForTimeout`), prefer user-visible locators (`getByRole`, `getByText`, `getByLabel`) over CSS/XPath, reuse `storageState` for auth, and enable trace-on-first-retry for CI debugging. Also carries the `data-testid` contract a UI change states in its acceptance criteria.",
91
91
  "policyCapsuleBullets": 8,
92
92
  "allowedTools": null,
93
93
  "vendor": "playwright"
@@ -5,6 +5,8 @@ description:
5
5
  tests — leverage auto-waiting (no `waitForTimeout`), prefer user-visible
6
6
  locators (`getByRole`, `getByText`, `getByLabel`) over CSS/XPath, reuse
7
7
  `storageState` for auth, and enable trace-on-first-retry for CI debugging.
8
+ Also carries the `data-testid` contract a UI change states in its acceptance
9
+ criteria.
8
10
  vendor: playwright
9
11
  ---
10
12
 
@@ -21,6 +23,30 @@ vendor: playwright
21
23
  - Use a unique data set per test run, or tear down state explicitly, to prevent cross-test contamination.
22
24
  - Never let Playwright own the lifetime of a dev server it did not start: boot the server out-of-band, point the suite at the running origin, and set `reuseExistingServer` so `webServer` only probes readiness.
23
25
 
26
+ ## The testid contract
27
+
28
+ A `data-testid` is a selector two artifacts share: the component that renders
29
+ it and the spec that queries it. Renaming one without the other is a silent
30
+ break — the suite still compiles, and the failure arrives as a missing element
31
+ at run time, in CI, attributed to whichever change happened to land next.
32
+
33
+ So a change touching UI (`*.tsx`, `*.astro`, `*.svelte`, `*.vue`, a components
34
+ folder) states which side of that contract it is on, in its own acceptance
35
+ criteria, as one of:
36
+
37
+ - **`data-testid invariance: <the testids that MUST be preserved>`** — the
38
+ change reshapes markup and renames nothing, and the list says what the
39
+ reshape may not touch.
40
+ - **`data-testid changes: <old> -> <new>, with the matching
41
+ tests/e2e/*.spec.ts selector updated`** — the rename is deliberate, and the
42
+ spec file that queries it is edited in the same change (or in one ordered
43
+ ahead of it, when the work is split).
44
+
45
+ Renaming a testid without the matching spec edit is forbidden either way. When
46
+ a change deliberately renames nothing, say so in its negative-scope prose too:
47
+ a preserved set stated only once reads as an omission the next author is free
48
+ to revise.
49
+
24
50
  ## Running a `webServer`-backed suite outside CI
25
51
 
26
52
  Playwright's `webServer` block **watches the process it spawned**. That
@@ -65,7 +65,7 @@ sibling-test convention, the per-file Maintainability-Index drop ceiling
65
65
  (refactor when > 1.5pt), and the rename = baseline-refresh rule. Verify
66
66
  at-keyboard with `npm run quality:preview` (the same diff-scoped MI + CRAP
67
67
  preview the `.husky/pre-commit` hook runs) **before** committing. The
68
- thresholds are tunable via `agentSettings.quality.codingGuardrails` in
69
- `.agentrc.json` — never fork the helper to change a number.
68
+ thresholds are fixed framework constants — never fork the helper to change
69
+ a number.
70
70
 
71
71
  ---
@@ -23,7 +23,7 @@ has to be settled here instead.
23
23
  | --- | --- |
24
24
  | Cadence | _e.g. weekly, Sunday 02:00_ |
25
25
  | Lenses in scope | _e.g. security, clean-code, quality, dependencies_ |
26
- | Severity floor | _`delivery.auditToStories.severityFloor`, default `high`_ |
26
+ | Severity floor | _`--severity`, default `high`_ |
27
27
  | Ledger reviewer | _e.g. @your-handle_ |
28
28
  | Story triage owner | _e.g. the on-call maintainer_ |
29
29
 
@@ -88,9 +88,8 @@ to every finding.
88
88
  `--dry-run` performs zero GitHub writes and skips the ledger write, printing
89
89
  only the run summary. Read `totals.create` before you let the sweep file
90
90
  anything: a first full-scope run over an un-audited repository can propose more
91
- Stories than your team can triage in a quarter. Raise `--severity` (or
92
- `delivery.auditToStories.severityFloor`) until the create count is a batch you
93
- would actually take on, then go live.
91
+ Stories than your team can triage in a quarter. Raise `--severity` until the
92
+ create count is a batch you would actually take on, then go live.
94
93
 
95
94
  ## Step 4 — Go live, and persist the ledger
96
95
 
@@ -9,9 +9,7 @@ conformance** — semantic structure, ARIA correctness, keyboard operability, fo
9
9
  labelling, media alternatives, and contrast — grounding every finding in a
10
10
  concrete element and the success criterion it violates. Default to **static**
11
11
  detection over source; escalate to a **runtime** pass only when a live target is
12
- configured. The shared lens machinery — read-only constraint, scope
13
- interpretation, report envelope + finding-block skeleton, severity scale,
14
- self-cross-check, and execution strategy — lives in
12
+ configured. The shared lens machinery lives in
15
13
  [`helpers/audit-lens-core.md`](helpers/audit-lens-core.md). Write the report to
16
14
  `{{auditOutputDir}}/audit-accessibility-results.md`. Extra finding fields:
17
15
  **WCAG:** (the violated success criterion, e.g. `1.1.1 Non-text Content (A)`)
@@ -55,7 +53,7 @@ the token-adherence note to ux-ui.
55
53
 
56
54
  ## Scope
57
55
 
58
- Interpret this lens's change-set fence per the core's Scope interpretation:
56
+ Per the core's Scope interpretation:
59
57
 
60
58
  ```text
61
59
  {{changedFiles}}
@@ -63,9 +61,8 @@ Interpret this lens's change-set fence per the core's Scope interpretation:
63
61
 
64
62
  ## Execution strategy
65
63
 
66
- Run this lens as a single `subagent_type: auditor` dispatch returning the report
67
- path + Executive Summary; sequential inline execution is the fallback (see the
68
- core's Execution strategy).
64
+ Run this lens as one `subagent_type: auditor` dispatch per the core's
65
+ Execution strategy.
69
66
 
70
67
  ## Step 0: Discover the frontend surface and config (run first)
71
68
 
@@ -16,9 +16,7 @@ Accepted ADR the tree has outgrown is worse than no ADR at all — it actively
16
16
  teaches a wrong contract, and it keeps teaching it until someone supersedes it.
17
17
  That is this lens's central target; structural tidiness is the cheap part.
18
18
 
19
- The shared lens machinery — read-only constraint, scope interpretation, report
20
- envelope + finding-block skeleton, severity scale, self-cross-check, and
21
- execution strategy — lives in
19
+ The shared lens machinery lives in
22
20
  [`helpers/audit-lens-core.md`](helpers/audit-lens-core.md). Write the report to
23
21
  `{{auditOutputDir}}/audit-adrs-results.md`. Dimension values:
24
22
  `Decision Drift | Supersede-Chain Integrity | Structure & Status Hygiene |
@@ -91,9 +89,8 @@ only; the guard is not weakened for any other lens.
91
89
 
92
90
  ## Execution strategy
93
91
 
94
- Run this lens as a single `subagent_type: auditor` dispatch returning the report
95
- path + Executive Summary; sequential inline execution is the fallback (see the
96
- core's Execution strategy). On a large log, the Decision Drift claim-check
92
+ Run this lens as one `subagent_type: auditor` dispatch per the core's
93
+ Execution strategy. On a large log, the Decision Drift claim-check
97
94
  (Step 2.1) is the one dimension worth fanning out per batch of entries under
98
95
  parallel-tooling Rule 3 — merge under the shared self-cross-check.
99
96
 
@@ -6,9 +6,7 @@ description: Audit architectural boundaries, module coupling, layering violation
6
6
 
7
7
  You are a Staff Software Engineer & Architecture Reviewer performing a read-only
8
8
  review that prioritizes maintainability and readability without altering
9
- external APIs or business logic. The shared lens machinery — read-only
10
- constraint, scope interpretation, report envelope + finding-block skeleton,
11
- severity scale, self-cross-check, and execution strategy — lives in
9
+ external APIs or business logic. The shared lens machinery lives in
12
10
  [`helpers/audit-lens-core.md`](helpers/audit-lens-core.md). Write the report to
13
11
  `{{auditOutputDir}}/audit-architecture-results.md`. Each finding carries an
14
12
  **Impact:** and a **Category:** (`Quick Win | Structural Change`); the report
@@ -17,7 +15,7 @@ adds a **Triage Summary** (Quick Wins / Structural Changes) and an
17
15
 
18
16
  ## Scope
19
17
 
20
- Interpret this lens's change-set fence per the core's Scope interpretation:
18
+ Per the core's Scope interpretation:
21
19
 
22
20
  ```text
23
21
  {{changedFiles}}
@@ -183,13 +181,7 @@ Evaluate the gathered context against the following architecture dimensions:
183
181
 
184
182
  For each finding, name the module/function, identify the trapped logic and
185
183
  the I/O it is bound to, and propose the concrete seam (the pure function or
186
- port to extract, and where the I/O adapter should call into it). This repo
187
- already practices a related seam discipline at the error-handling boundary:
188
- [`rules/orchestration-error-handling.md`](../rules/orchestration-error-handling.md)
189
- requires orchestration scripts to `throw` rather than `Logger.fatal` so the
190
- thin `runAsCli` shell — not the logic — owns the `process.exit` side effect,
191
- keeping the wrapped logic exercisable under a stubbed `process.exit`. Cite
192
- that precedent where it applies rather than restating it.
184
+ port to extract, and where the I/O adapter should call into it).
193
185
  2. **Automated Architecture Guardrails:** Assess whether the project encodes
194
186
  its architectural boundaries as **deterministic, automated checks** rather
195
187
  than relying on convention or reviewer memory. When relevant to the
@@ -10,9 +10,7 @@ repository's **committed baseline surface**: the ratchet artifacts under
10
10
  `.agentrc.json`. Those instruments only prevent **regression** — nothing owns
11
11
  the loop that burns the measured debt **down** and tightens the floors behind
12
12
  it, so a repo can hold a floor it cleared years ago and never notice. This lens
13
- is that loop's read-only entry point. The shared lens machinery — read-only
14
- constraint, scope interpretation, report envelope + finding-block skeleton,
15
- severity scale, self-cross-check, and execution strategy — lives in
13
+ is that loop's read-only entry point. The shared lens machinery lives in
16
14
  [`helpers/audit-lens-core.md`](helpers/audit-lens-core.md). Write the report to
17
15
  `{{auditOutputDir}}/audit-baselines-results.md`. Dimension values:
18
16
  `Dead Instrument | Staleness | Hotspot Cluster | Trend Drift | Tightening Headroom`.
@@ -26,7 +24,7 @@ severity scale, self-cross-check, and execution strategy — lives in
26
24
 
27
25
  ## Scope
28
26
 
29
- Interpret this lens's change-set fence per the core's Scope interpretation:
27
+ Per the core's Scope interpretation:
30
28
 
31
29
  ```text
32
30
  {{changedFiles}}
@@ -51,9 +49,8 @@ This lens **refines** the core's read-only constraint; it never relaxes it.
51
49
 
52
50
  ## Execution strategy
53
51
 
54
- Run this lens as a single `subagent_type: auditor` dispatch returning the report
55
- path + Executive Summary; sequential inline execution is the fallback (see the
56
- core's Execution strategy).
52
+ Run this lens as one `subagent_type: auditor` dispatch per the core's
53
+ Execution strategy.
57
54
 
58
55
  ## Step 0: Run the engine (mandatory — measure before you judge)
59
56
 
@@ -155,8 +152,8 @@ Two envelope-level reads come **before** any finding:
155
152
  The acknowledgment is the kind upper-snaked. It demotes that kind's
156
153
  head-vs-base regressions to unchanged **for one run only** — floors stay
157
154
  enforced, so a genuine breach is still caught. The durable equivalent is a
158
- commit in the compared range whose subject carries the gate's `refreshTag`
159
- (default `baseline-refresh:`) **and** whose diff touches that kind's
155
+ commit in the compared range whose subject carries the fixed refresh tag
156
+ `baseline-refresh:` **and** whose diff touches that kind's
160
157
  baseline file. Confirm both against
161
158
  `node .agents/scripts/check-baselines.js --help` before writing the prompt,
162
159
  and never invent an acknowledgment for a kind that ships no regeneration