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,7 +1,7 @@
1
1
  ---
2
2
  description: >-
3
3
  Shared include for the bounded acceptance self-eval loop run during Story
4
- delivery (`helpers/deliver-story`). Defines the per-round critic mechanic;
4
+ delivery (`helpers/deliver-story`). Defines the per-round verdict mechanic;
5
5
  the caller supplies its gate-decision wrapper (label transitions).
6
6
  ---
7
7
 
@@ -9,181 +9,103 @@ description: >-
9
9
 
10
10
  > **Include module.** Not a slash command. Referenced from
11
11
  > [`deliver-story.md`](deliver-story.md) at Step 1a. This file is the
12
- > **single prose home** for the per-round critic mechanic; the caller layers
12
+ > **single prose home** for the per-round verdict mechanic; the caller layers
13
13
  > only its wrapper (Story label transitions).
14
14
 
15
15
  After the implementation commits land and **before** the Story proceeds to
16
- close, run an explicit, **independent** eval pass that scores the change set
17
- computed once for this Story and injected into the critic — never one the
18
- critic re-derives — against **each** `acceptance[]` item
19
- individually. This is the acceptance gate
20
- the close-validation chain does not provide: that chain (lint / test / format /
16
+ close, run an explicit eval pass that scores the change set computed once for
17
+ this Story — never one the evaluator re-derives — against **each**
18
+ `acceptance[]` item individually. This is the acceptance gate the
19
+ close-validation chain does not provide: that chain (lint / test / format /
21
20
  maintainability / coverage / crap) proves the code is *healthy*, not that it
22
21
  satisfies *this Story's* acceptance criteria.
23
22
 
24
23
  The loop is **always on** (a hard cutover — there is no flag to disable it) and
25
24
  **bounded** by `delivery.acceptanceEval.maxRounds` (default 2; `0` means the
26
25
  verdict is scored once with no redraft round). It is **distinct from** the
27
- per-run `sibling-coherence` epilogue
28
- step (`planRunEpilogue` for N>1): this loop is per-Story, per-criterion,
29
- mid-delivery, and evaluates the actual work product.
26
+ per-run epilogue (`planRunEpilogue` for N>1): this loop is per-Story,
27
+ per-criterion, mid-delivery, and evaluates the actual work product.
30
28
 
31
29
  ## Per round
32
30
 
33
- 1. **Eval pass — one verdict-owner per cluster.** Exactly
34
- **one** pass authors each cluster's verdict: the **fresh-context critic**
35
- when the ceremony routing below resolves `fresh` (a sub-agent via the
36
- `Agent` tool, *not* a continuation of your implementing turn — the
37
- evaluator does not grade its own homework), or the **inline self-eval**
38
- when it resolves `inline`. The resolved decision names the owner
39
- explicitly (`verdictOwner: 'fresh-critic' | 'inline-self-eval'` from
40
- `resolveCeremonyForRisk`). **Never run both**, and never run a
41
- preliminary self-assessment pass before dispatching the fresh critic —
42
- the redundant pre-pass buys no measurable quality and roughly triples
43
- the acceptance-block cost. Step 3's gate is the deterministic **scorer**
44
- of the one merged verdict, not a second (or third) pass over the
45
- criteria.
31
+ 1. **Eval pass — one verdict owner, one verdict file.** Exactly **one** pass
32
+ authors the Story's verdict, and it covers **every** `acceptance[]` item in
33
+ one file. Which pass is named by the ceremony decision
34
+ (`verdictOwner: 'fresh-critic' | 'inline-self-eval'` from
35
+ `resolveCeremonyForRisk`), and since Story #5343 that follows the
36
+ **ceremony profile alone**:
46
37
 
47
- > **Sub-agent type + derived-level ceremony.** When
48
- > `delivery.routing.roleScopedAgents` is enabled (the **default**), dispatch
49
- > the critic with `subagent_type: acceptance-critic` — it boots on the
50
- > role-scoped [`acceptance-critic`](../../agents/acceptance-critic.md) context
51
- > (its own system prompt, no `CLAUDE.md` @-closure) that carries the
52
- > maker-blind invariant and the verdict schema standalone. When the
53
- > kill-switch is **off** (`roleScopedAgents: false`), fall back to
54
- > `subagent_type: general-purpose`.
55
- >
56
- > **Whether to spawn fresh at all is routed off the derived change level**
57
- > — the same signal `review-depth.js` resolves depth from, so the two
58
- > decisions cannot disagree. Derive it with one script over the Story
59
- > branch (Story #5313) — never a hand-carried import block:
60
- >
61
38
  > ```bash
62
39
  > node <main-repo>/.agents/scripts/ceremony-derive.js --story <storyId> --cwd <workCwd>
63
40
  > ```
64
41
  >
65
- > It computes the change set once (`files`), derives the level and
66
- > classes, and resolves the ceremony per cluster (`mode`, `reason`,
67
- > `verdictOwner`): **`high` (the diff touches a sensitive path registered
68
- > in `audit-rules.json`) → `fresh`** (spawn the critic); **`low` (it
69
- > touches none) → `inline`** (the contract-identical inline fallback
70
- > below); **`null` / unknown (the diff could not be enumerated) → `fresh`
71
- > + full ceremony** (fail-safe). This chooses fresh-vs-inline **per
72
- > cluster only — it never changes the cluster count**.
73
- >
74
- > The routing signal is deliberately **not** a planner-authored risk
75
- > verdict: a level the plan asserted about itself was exactly the signal
76
- > that could *reduce* independent checking, and nothing verified it
77
- > against the diff.
78
- >
79
- > **Inline-critic path (low-level-routed OR nesting-absent harness).** The
80
- > verdict is authored **inline** whenever the risk router above resolves to
81
- > `inline` (a low-risk cluster), and also as
82
- > a **fallback** on any harness that cannot spawn the fresh critic.
83
- > Dispatching the critic as a nested `Agent` is the fresh-context shape and
84
- > works on any harness that carries `Agent` into sub-agents (Claude Code ≥
85
- > 2.1.202). This eval loop itself runs inside a Story delivery
86
- > sub-agent, so the nested
87
- > critic sits at nesting depth 2. If the host does **not** support nested
88
- > `Agent` dispatch at that depth — the tool is absent, or a spawn attempt
89
- > returns an unsupported-capability error — do **not** stall the Story
90
- > regardless of the risk verdict. Author the verdict **inline**: in a
91
- > deliberately scoped,
92
- > self-critical pass (re-read only the diff, the `acceptance[]` /
93
- > `verify[]` arrays, and the `verify[]` command output — treat the
94
- > implementation reasoning as untrusted and score against the criteria
95
- > afresh), write the same verdict file described below and hand it to the
96
- > same `acceptance-eval.js` gate. The fresh-context isolation is weaker in
97
- > the inline path, but the gate, the schema, the round cap, and the
98
- > proceed / redraft / block decision are identical — a Story is **never**
99
- > stranded on a nesting-absent harness. Note in the blocked/friction
100
- > comment (if you block) that the inline fallback was used.
42
+ > One call computes the change set once (`files`), derives the level and
43
+ > classes **for review depth**, and resolves the owner (`mode`, `reason`,
44
+ > `verdictOwner`): **`minimal` / `standard` → `inline`** (the default — you
45
+ > author the verdict yourself), **`strict` → `fresh`** (dispatch the
46
+ > maker-blind critic). The derived level no longer routes this decision;
47
+ > it escalates `review-depth.js` instead, which still resolves `deep` for
48
+ > any sensitive path.
49
+
50
+ **Never run both**, and never run a preliminary self-assessment before
51
+ dispatching a fresh critic — the redundant pre-pass buys no measurable
52
+ quality and roughly triples the acceptance-block cost. Step 3's gate is the
53
+ deterministic **scorer** of that one verdict, not a second pass over the
54
+ criteria.
101
55
 
102
- The critic:
103
- + Inspects the **change set handed to it in its spawn context** — the one
104
- list computed above — and the Story's inline `acceptance[]` / `verify[]`
105
- arrays. Pass the file list explicitly when you dispatch the critic; it
106
- does not re-enumerate the diff for itself, so a commit
107
- landing mid-ceremony cannot leave the critic scoring a different change
108
- than the one that routed it.
56
+ > **Inline owner (the default).** Author the verdict in a deliberately
57
+ > scoped, self-critical pass: re-read only the diff, the `acceptance[]` /
58
+ > `verify[]` arrays, and the `verify[]` command output — treat your own
59
+ > implementation reasoning as untrusted and score each criterion afresh
60
+ > from the evidence. Write one verdict file covering every item and hand it
61
+ > to the gate. This is also the **fallback** on any harness that cannot
62
+ > spawn the fresh critic, so a Story is never stranded: the gate, the
63
+ > schema, the round cap and the proceed / redraft / block decision are
64
+ > identical either way. Note in the friction comment (if you block) when
65
+ > the fallback was used in place of a `strict` critic.
66
+ >
67
+ > **Fresh critic (`strict` only).** Dispatch a sub-agent via the `Agent`
68
+ > tool — *not* a continuation of your implementing turn. When
69
+ > `delivery.routing.roleScopedAgents` is enabled (the **default**), use
70
+ > `subagent_type: acceptance-critic`: it boots on the role-scoped
71
+ > [`acceptance-critic`](../../agents/acceptance-critic.md) context (its own
72
+ > system prompt, no `CLAUDE.md` @-closure) carrying the maker-blind
73
+ > invariant and the verdict schema standalone. With the kill-switch off
74
+ > (`roleScopedAgents: false`), fall back to
75
+ > `subagent_type: general-purpose`. This loop already runs inside a Story
76
+ > delivery sub-agent, so the critic sits at nesting depth 2 — supported by
77
+ > any harness that carries `Agent` into sub-agents (Claude Code ≥ 2.1.202).
78
+
79
+ Whichever pass owns it, the verdict:
80
+ + Inspects the **change set it was handed** — the one `files` list above —
81
+ and the Story's inline `acceptance[]` / `verify[]` arrays. Pass the file
82
+ list explicitly when dispatching a fresh critic; it does not re-enumerate
83
+ the diff for itself, so a commit landing mid-ceremony cannot leave it
84
+ scoring a different change than the one that routed it.
109
85
  + **Runs the `verify[]` commands** and consumes their output as **required
110
- evidence** when scoring the relevant acceptance items. `verify[]` is not
111
- optional advisory pre-flight — a criterion cannot be scored `met` without
112
- the supporting `verify[]` evidence where a `verify[]` command is relevant
113
- to it.
86
+ evidence**. `verify[]` is not optional advisory pre-flight — a criterion
87
+ cannot be scored `met` without the supporting `verify[]` evidence where a
88
+ `verify[]` command is relevant to it.
114
89
  + **Reuses the credited full-suite run instead of re-paying for it.**
115
90
  Before spawning a `verify[]` entry, classify it with `resolveVerifyCredit`
116
91
  from
117
92
  [`verify-credit.js`](../../scripts/lib/orchestration/verify-credit.js): an
118
- entry that is itself a full-suite command (`npm test`, `pnpm run test`,
119
- a bare `node --test`) is consulted against the **same stamp close reads**
120
- and, when that stamp is fresh, recorded as `pass` with a `detail` naming
121
- the credit — **never respawned**. A stale or absent stamp reports
122
- `spawn: true` and the command runs for real, so the credit can never
123
- manufacture a pass. The gate warns on any such entry: the intended shape
124
- is scoped `verify[]` entries **plus** the one credited run
125
- ([`deliver-digest.md`](deliver-digest.md) § 5).
126
- + **Shares `lint` / `typecheck` evidence with close.** When a
127
- `verify[]` command is **byte-identical** to a close-validation gate — in
128
- practice only the cheap, command-identical `lint` and `typecheck` gates
129
- (`npm run lint` and the resolved `project.commands.typecheck`) — the
130
- critic MUST run it through `evidence-gate.js` so a passing run records an
131
- evidence entry in the **same keyspace** `close-validation/runner.js`
132
- consults. Run it in the **same Story worktree** the close validates (the
133
- HEAD-sha key enforces "unchanged HEAD") and pass the exact gate name:
134
-
135
- ```bash
136
- node <main-repo>/.agents/scripts/evidence-gate.js \
137
- --standalone --scope-id <storyId> --gate lint \
138
- --worktree <worktree> -- npm run lint
139
- ```
140
-
141
- Close's `shouldSkip` then short-circuits that gate when HEAD is
142
- unchanged; a redraft round (HEAD moves) correctly busts it. **Never**
143
- run the coverage / CRAP suite through `evidence-gate.js` to stamp it
144
- fresh — a false-fresh coverage record without `coverage-final.json`
145
- silently weakens the floor. Limit the evidence-share to `lint` and
146
- `typecheck`.
147
- + Emits a **cluster** verdict file under `temp/` conforming to
93
+ entry that is itself a full-suite command is consulted against the same
94
+ stamp close reads and, when that stamp is fresh, recorded as `pass`
95
+ without being respawned; a stale or absent stamp reports `spawn: true` and
96
+ the command runs for real. The credited run itself is stated once, in
97
+ [`deliver-digest.md`](deliver-digest.md) § 5.
98
+ + Emits **one** verdict file under `temp/` conforming to
148
99
  [`acceptance-eval-verdict.schema.json`](../../schemas/acceptance-eval-verdict.schema.json):
149
100
  one `{ index, criterion, verdict: met|partial|unmet, evidence,
150
- verifyEvidence[] }` record per acceptance item **in that cluster**, each
151
- `index` being the item's position in the Story's full `acceptance[]`
152
- array. A fresh critic **returns that path to you** rather than calling the
153
- gate itself.
154
- 2. **Dispatch the round's clusters in parallel, then merge into one verdict
155
- (fresh critics only).** When the verdict owner is the **inline self-eval**,
156
- author **one** verdict file covering every `acceptance[]` item and score it
157
- in one gate call — the cluster merge below does not apply (Story #5313).
158
- For fresh critics, the clusters of a round are independent, so dispatch
159
- **all** of the round's critics as N `Agent` calls **in a single assistant
160
- turn** — [`parallel-tooling.md`](parallel-tooling.md) **Rule 3** — never
161
- serially, and never one round per cluster.
162
-
163
- Then **merge** the cluster verdicts into **one** verdict file under `temp/`:
164
- concatenate every cluster's `criteria[]` records and order the merged array
165
- by `index`, so it holds exactly one record per `acceptance[]` item in
166
- **acceptance-array order**, under a single top-level `storyId`,
167
- `schemaVersion`, `round` and `commitSha`. The verdict schema deliberately
168
- carries **no `clusterId`** — the round's artifact is the merged verdict, and
169
- which critic scored which record is not part of the contract.
170
-
171
- > **Why one gate call and not N.** The round counter is **Story-scoped** —
172
- > derived by counting `acceptance-eval` signals in the Story's
173
- > `signals.ndjson` — and each cluster verdict has a distinct fingerprint, so
174
- > the replay guard never collapses them. A gate call per cluster would spend
175
- > one of the (default 2) rounds *per cluster*, so a Story with more than 8
176
- > acceptance criteria would exhaust its redraft budget on cluster arithmetic
177
- > alone; N concurrent calls would also race that same ledger. Cluster-scoped
178
- > round counting exists in
179
- > [`acceptance-eval-decision.js`](../../scripts/lib/orchestration/acceptance-eval-decision.js)
180
- > but requires an integer `epicId`, which v2 pins `null` — it is not a way
181
- > around the merge.
182
- 3. **Decide — exactly one gate call per round.** Run the gate against the
183
- **merged** verdict (the caller's Step 1a names the exact invocation — omit
184
- `--epic`). The gate **scores the single verdict the round produced** —
185
- schema validation, round cap, decision — and never re-scores the criteria
186
- itself:
101
+ verifyEvidence[] }` record per `acceptance[]` item, in acceptance-array
102
+ order, under a single top-level `storyId`, `schemaVersion`, `round` and
103
+ `commitSha`. A fresh critic **returns that path to you** rather than
104
+ calling the gate itself.
105
+ 2. **Decide — exactly one gate call per round.** Run the gate against that one
106
+ verdict file (the caller's Step 1a names the exact invocation — omit
107
+ `--epic`). The gate **scores the verdict the round produced** — schema
108
+ validation, round cap, decision — and never re-scores the criteria itself:
187
109
 
188
110
  ```bash
189
111
  node <main-repo>/.agents/scripts/acceptance-eval.js \
@@ -191,10 +113,16 @@ mid-delivery, and evaluates the actual work product.
191
113
  ```
192
114
 
193
115
  The gate reads the Story's `acceptance[]` count itself (Story #5313): a
194
- verdict whose `criteria[]` length differs — a single cluster's verdict
195
- handed over unmerged — is rejected **before scoring**, with an error naming
196
- the merge contract and consuming **no round**. `--expected-criteria` is
197
- still accepted but redundant; when passed it must agree with that count.
116
+ verdict whose `criteria[]` length differs — one covering only part of the
117
+ Story — is rejected **before scoring**, with an error naming the count and
118
+ consuming **no round**. `--expected-criteria` is still accepted but
119
+ redundant; when passed it must agree with that count.
120
+
121
+ > **Why one call per round and not several.** The round counter is
122
+ > **Story-scoped** — derived by counting `acceptance-eval` signals in the
123
+ > Story's `signals.ndjson` — so a second call in the same round spends one
124
+ > of the (default 2) rounds for nothing, and concurrent calls race that
125
+ > ledger.
198
126
 
199
127
  The gate validates the verdict against the schema, applies the round cap,
200
128
  emits the per-criterion `acceptance-eval` signal into the retro / feedback
@@ -209,5 +137,4 @@ mid-delivery, and evaluates the actual work product.
209
137
  (transition to `agent::blocked`) and post a `friction` comment naming the
210
138
  unmet criteria and their evidence. Never silently proceed to close.
211
139
 
212
- Write both the per-cluster verdicts and the merged verdict under `temp/` only —
213
- they are scratch artifacts.
140
+ Write the verdict under `temp/` only — it is a scratch artifact.
@@ -152,7 +152,7 @@ Treat the following as **out of scope by construction** and drop any finding
152
152
  that rests on one of them:
153
153
 
154
154
  - **Sanctioned test seams** — exports consumed only by tests, and other
155
- patterns the `test-seams` rule blesses. Never a production defect.
155
+ deliberate test-only patterns. Never a production defect.
156
156
  - **Entry points & public API surface** — CLI mains, `bin/` scripts, declared
157
157
  `exports` / `bin` / `main`, and barrel contracts consumed out-of-tree. A
158
158
  zero in-repo consumer count is not death.
@@ -5,11 +5,11 @@ this framework cites. Reviewers, prescriptive auditors, and writing agents all
5
5
  read the same numbers from here so a "high cyclomatic complexity" finding in
6
6
  `/audit-clean-code` and a pre-commit refusal cite the same threshold.
7
7
 
8
- > Tunable via `delivery.quality.codingGuardrails` in `.agentrc.json` —
9
- > see [`agentrc-reference.json`](../../docs/agentrc-reference.json) for the framework
10
- > defaults and [`schemas/agentrc.schema.json`](../../schemas/agentrc.schema.json)
11
- > for the validated shape. Override per-project; never fork this helper to
12
- > change a number.
8
+ > The cyclomatic thresholds are fixed framework constants (Story #5382 folded
9
+ > the never-set `delivery.quality.codingGuardrails` block); the MI tolerance
10
+ > is `delivery.quality.gates.maintainability.tolerance` — see
11
+ > [`agentrc-reference.json`](../../docs/agentrc-reference.json). Never fork
12
+ > this helper to change a number.
13
13
 
14
14
  ## At-keyboard verification
15
15
 
@@ -28,14 +28,14 @@ hook calls the same script.
28
28
 
29
29
  Cyclomatic complexity (CC) is measured per function by `escomplex` (the same
30
30
  engine the maintainability axis of `check-baselines.js` runs). Two
31
- thresholds — the advisory `delivery.quality.codingGuardrails.cyclomaticFlag`
32
- and the fixed ceiling of 12 (`cyclomaticMustFix` was retired as a config
33
- key in Story #5313):
31
+ thresholds — the advisory flag of 8 and the fixed ceiling of 12, both
32
+ constants (`cyclomaticMustFix` was retired as a config key in Story #5313,
33
+ `cyclomaticFlag` in Story #5382):
34
34
 
35
35
  | CC range | Action |
36
36
  | --- | --- |
37
37
  | ≤ 8 | Pass — no annotation required. |
38
- | > 8 (default `cyclomaticFlag`) | **Flag** — `quality:preview` counts the function in its `new-method count over c=<flag>` column. The function is allowed to land but the report names it. |
38
+ | > 8 (the advisory flag) | **Flag** — `quality:preview` counts the function in its `new-method count over c=<flag>` column. The function is allowed to land but the report names it. |
39
39
  | ≥ 12 | **Advisory in `quality:preview`** — listed by file, method and reading; the preview exits 0 on it. **Ratchet in `check-cyclomatic.js`**: fails when a file gains a function above 12, or when its worst function gets worse than the recorded baseline. |
40
40
 
41
41
  `check-cyclomatic.js` is a **ratchet**, not a cliff: `baselines/cyclomatic.json`
@@ -57,11 +57,8 @@ source under `tests/<mirrored-path>/<basename>.test.js`. Same-commit pairing
57
57
  keeps the bisect honest — a regression and the test that would have caught
58
58
  it land or revert together.
59
59
 
60
- When `delivery.quality.codingGuardrails.requireSiblingTest` is `true`,
61
- the pre-commit hook refuses to commit a staged new source file that
62
- lacks a sibling test. Default is `false` so legacy repos opt in
63
- deliberately; once enabled, the structural check replaces the
64
- review-time prose rule.
60
+ No structural check enforces the pairing — it is a review-time rule
61
+ (Story #5382 removed the never-read `requireSiblingTest` switch).
65
62
 
66
63
  ## Maintainability-Index drop refactor rule
67
64
 
@@ -84,7 +81,7 @@ the commit lands (scoped to `HEAD` by default — the alias passes no
84
81
  Renaming a file (or moving it across `src/` directories) detaches its MI and
85
82
  CRAP history from the baseline keys. The correct response is a **baseline
86
83
  refresh**, not a regression entry: include `baseline-refresh:` (the
87
- `delivery.quality.crap.refreshTag` default) in the commit subject so the
84
+ fixed refresh tag) in the commit subject so the
88
85
  ratchet treats the new key as a clean entry instead of comparing it to
89
86
  nothing.
90
87
 
@@ -87,8 +87,10 @@ review yourself, honor the `depth` semantics above directly.
87
87
  1. Resolve `[TICKET_ID]` from `ticketId` (the Story for live `scope: story`).
88
88
  2. Resolve `[BASE_REF]` from `baseRef` and `[HEAD_REF]` from `headRef`.
89
89
  3. Fetch the Story ticket and resolve the planning context from its own
90
- body: folded `## Spec` / `## Slicing`, acceptance criteria, and the
91
- `story-plan-state` structured comment when present.
90
+ body: folded `## Spec` / `## Slicing`, and acceptance criteria. The
91
+ `story-plan-state` comment beside it carries the operator's plan summary
92
+ (story set, delivery order, deliver command), not planning context — it
93
+ holds no machine payload to read.
92
94
  4. Read that Spec fully to understand the intended scope, architectural
93
95
  decisions, and acceptance criteria. Do **not** look for a parent Epic.
94
96
 
@@ -25,18 +25,19 @@ rule produces it:
25
25
  shape — sub-agent isolation only matters against a *concurrent* sibling
26
26
  racing the same checkout, and a one-Story run has none.
27
27
  2. **Every other run is `subagent`.** A multi-Story run dispatches every Story
28
- as a sub-agent however trivial its shape. Shape still sets ceremony; the
29
- `route::lite` label is a human-visible hint, never the control signal.
28
+ as a sub-agent however trivial its shape — the run's size is the whole
29
+ premise, and nothing about a Story's own shape enters it.
30
30
 
31
- `inline` removes model-side fan-out only — no `story-worker` boot, no fresh
32
- acceptance-critic spawn. **`subagent` and `inline` run the same engine**: same
33
- gates, same PR to `main`, same terminal envelope, byte for byte.
31
+ `inline` removes the `story-worker` boot and nothing else. It does **not**
32
+ change the acceptance verdict owner — that is § 3's decision, and the profile
33
+ alone makes it. **`subagent` and `inline` run the same engine**: same gates,
34
+ same PR to `main`, same terminal envelope, byte for byte.
34
35
 
35
36
  ## 2. Engine invariants
36
37
 
37
38
  | Trait | Contract |
38
39
  | --- | --- |
39
- | Ticket type | `type::story` only; an `Epic: #N` footer means **stop and re-plan** |
40
+ | Ticket type | `type::story` only — `resolve-stories.js` validates it |
40
41
  | Branch | `story-<id>`, seeded from `project.baseBranch` (`main`) |
41
42
  | Merge target | `main` via PR (squash + required checks) — never a direct push |
42
43
  | Gates | Every close gate runs regardless of route; no route bypasses one |
@@ -57,38 +58,44 @@ import block:
57
58
  node <main-repo>/.agents/scripts/ceremony-derive.js --story <storyId> --cwd <workCwd>
58
59
  ```
59
60
 
60
- It prints one JSON object: `files` — the one change set every critic is
61
+ It prints one JSON object: `files` — the one change set the verdict owner is
61
62
  handed (`null` when the diff could not be enumerated) — plus `level` and
62
63
  `classes` from `review-depth.js`, and `mode`, `reason` and `verdictOwner`
63
64
  from `ceremony-routing.js`. Level rules: a sensitive path registered in
64
65
  `audit-rules.json` → `high`, none → `low`, an unenumerable diff → `null`.
65
- Ceremony rules: `minimal` → always inline, `strict` → always fresh,
66
- `standard` → `high`/`null` → fresh and `low` → inline. An `inline` dispatch
67
- mode overrides all of it to inline critics. Close's `review-depth.js` reads
68
- the same derived level, so the two cannot disagree. `--base <ref>` overrides
69
- `project.baseBranch`.
66
+ The level drives **review depth** only; close's `review-depth.js` reads the
67
+ same derived level, so the two cannot disagree. A sensitive footprint
68
+ therefore buys a **deep review**, not a fresh acceptance critic.
69
+
70
+ > **The ceremony rule, stated once.** The **profile alone** names the verdict
71
+ > owner (Story #5343, narrowed to that one input by #5366): `minimal` /
72
+ > `standard` → `inline`, `strict` → `fresh`. Nothing else moves it — not the
73
+ > derived change level, not the footprint's sensitivity, and **not the
74
+ > dispatch mode**: an `inline` Story under `strict` still spawns the fresh
75
+ > maker-blind critic, one nesting level shallower than a dispatched one. The
76
+ > only sanctioned inline authoring under `strict` is the harness fallback in
77
+ > [`acceptance-self-eval.md`](acceptance-self-eval.md) — a host that cannot
78
+ > spawn the critic at all, noted in the friction comment if you block.
79
+
80
+ `--base <ref>` overrides `project.baseBranch`.
70
81
 
71
82
  ## 4. Acceptance self-eval (Step 1a, required)
72
83
 
73
- **One verdict-owner per cluster** — the fresh critic *or* the inline
74
- self-eval, named by `verdictOwner`, never both and never a warm-up pass. Each
75
- scores its cluster's `acceptance[]` items against the change set above, with
76
- `verify[]` output as evidence. Bounded by `delivery.acceptanceEval.maxRounds`
84
+ **One verdict owner per Story** — named by `verdictOwner`: the inline
85
+ self-eval under `minimal` / `standard` (the default), a fresh maker-blind
86
+ critic under `strict`. Never both, and never a warm-up pass. The owner
87
+ authors **one** verdict file covering every `acceptance[]` item, scored
88
+ against the change set above with `verify[]` output as evidence, and it is
89
+ scored in **one** gate call. Bounded by `delivery.acceptanceEval.maxRounds`
77
90
  (default 2; `0` scores once with no redraft).
78
91
 
79
- **Inline owner:** author **one** verdict file covering every `acceptance[]`
80
- item and score it in **one** gate call — there is no cluster merge.
81
- **Fresh critics:** one round = N cluster critics → ONE merged verdict → ONE
82
- gate call. Merge every cluster's records into a single `criteria[]` in
83
- `acceptance[]` order and score that once; a gate call per cluster spends a
84
- round *per cluster* and races the round ledger.
85
-
86
92
  `node <main-repo>/.agents/scripts/acceptance-eval.js --story <storyId>
87
93
  --verdict <verdict-path>`
88
94
 
89
95
  The gate reads the Story's `acceptance[]` count itself and rejects a verdict
90
96
  whose `criteria[]` length differs **before** scoring, consuming no round;
91
- `--expected-criteria` is accepted but redundant.
97
+ `--expected-criteria` is accepted but redundant. A second gate call in the
98
+ same round spends a round for nothing and races the Story-scoped ledger.
92
99
 
93
100
  `proceed` → close. `redraft` → one more round inside the cap. `block` → **do
94
101
  not close**: post a `friction` comment and flip `agent::blocked`.
@@ -96,10 +103,12 @@ Per-round mechanics: [`acceptance-self-eval.md`](acceptance-self-eval.md).
96
103
 
97
104
  ## 5. The one credited suite run
98
105
 
99
- After the self-eval loop's last fix commit, run the suite **once** in the
100
- worktree through the depositor — it spawns the project's own `npm test`,
101
- whatever that resolves to, and stamps the result, so any runner earns the
102
- credit:
106
+ After the self-eval loop's last fix commit, fetch and merge
107
+ `origin/<baseBranch>` into the Story branch **first**, ahead of this run and
108
+ the push: close's base-sync then no-ops, so neither stamp goes stale. Then
109
+ run the suite **once** in the worktree through the depositor — it spawns the
110
+ project's own `npm test`, whatever that resolves to, and stamps the result,
111
+ so any runner earns the credit:
103
112
 
104
113
  ```bash
105
114
  node <main-repo>/.agents/scripts/evidence-gate.js --standalone \