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,29 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  // .agents/scripts/lint-issue-body.js
3
3
  /**
4
- * Issue-body conformance lint (Story #4227).
5
- *
6
- * Runs the canonical `story-body.parse()` against a human-opened
7
- * `type::story` issue body and reports whether the body
8
- * round-trips. This is the drift guard between the generated GitHub Issue
9
- * Forms (`lib/bootstrap/issue-forms-template.js`) and the parser: if a
10
- * human files a ticket whose body `parse()` rejects (or which lacks the
11
- * binding `goal` / `acceptance` / `verify` sections), the lint surfaces a
12
- * **comment** on the issue rather than failing silently — the supported
13
- * human entry points (`/mandrel-plan` from an existing Epic ID, the qa-assist →
14
- * `/mandrel-plan` handoff) depend on a parseable body.
15
- *
16
- * ## Design
17
- *
18
- * - `evaluateIssueBody(body)` is **pure** (no I/O): it parses the body and
19
- * returns a structured conformance verdict. This is the unit-tested core.
20
- * - The CLI wrapper reads the issue body + labels (via `gh` or env), runs
21
- * the evaluator, and posts/updates a single marker comment when the body
22
- * is non-conformant. Network-touching, exercised in CI.
23
- *
24
- * GitHub Issue Forms render a skipped optional field as the literal
25
- * `_No response_`; the evaluator strips that sentinel so an empty optional
26
- * section does not masquerade as content.
4
+ * Drift guard between the generated Issue Forms and the Story-body parser:
5
+ * a human-filed Story whose body does not round-trip gets an informational
6
+ * marker comment (never a CI failure).
27
7
  *
28
8
  * @module lint-issue-body
29
9
  */
@@ -32,17 +12,9 @@ import { spawnSync } from 'node:child_process';
32
12
  import { runAsCli } from './lib/cli-utils.js';
33
13
  import { parse, StoryBodyParseError } from './lib/story-body/story-body.js';
34
14
 
35
- /**
36
- * Marker that identifies the lint's own comment so re-runs update rather
37
- * than duplicate it.
38
- */
39
15
  export const LINT_COMMENT_MARKER = '<!-- mandrel:issue-body-conformance -->';
40
16
 
41
- /**
42
- * The binding sections every conformant ticket body MUST carry. `changes`
43
- * and `references` are advisory (per the Engineer persona's implementation
44
- * latitude), so they are not required here.
45
- */
17
+ /** `changes` and `references` are advisory, so not required. */
46
18
  const REQUIRED_SECTIONS = [
47
19
  { field: 'goal', label: 'Goal' },
48
20
  { field: 'acceptance', label: 'Acceptance' },
@@ -50,9 +22,7 @@ const REQUIRED_SECTIONS = [
50
22
  ];
51
23
 
52
24
  /**
53
- * Strip the GitHub Issue Form empty-field sentinel so a skipped optional
54
- * field is treated as absent rather than literal content.
55
- *
25
+ * Issue Forms render a skipped field as `_No response_`; treat it as absent.
56
26
  * @param {string} body
57
27
  * @returns {string}
58
28
  */
@@ -65,22 +35,16 @@ function stripNoResponseSentinel(body) {
65
35
 
66
36
  /**
67
37
  * @typedef {object} ConformanceVerdict
68
- * @property {boolean} conformant - True when the body parses AND carries
69
- * every required section with non-empty content.
70
- * @property {string[]} problems - Human-readable problem statements
71
- * (empty when conformant).
72
- * @property {string[]} warnings - Non-fatal parser warnings surfaced for
73
- * transparency (e.g. legacy-path-entry).
74
- * @property {boolean} parseFailed - True when `parse()` threw (fail-closed).
38
+ * @property {boolean} conformant
39
+ * @property {string[]} problems
40
+ * @property {string[]} warnings
41
+ * @property {boolean} parseFailed
75
42
  */
76
43
 
77
44
  /**
78
- * Evaluate an issue body for conformance with the canonical Story-body
79
- * schema. Pure — no I/O. Fail-closed parse errors are caught and reported
80
- * as a non-conformant verdict (never thrown), because the caller's job is
81
- * to *comment*, not to crash CI.
82
- *
83
- * @param {string} body - Raw issue-body markdown.
45
+ * Pure. Parse errors become a non-conformant verdict, never a throw: the
46
+ * caller's job is to comment, not crash CI.
47
+ * @param {string} body
84
48
  * @returns {ConformanceVerdict}
85
49
  */
86
50
  export function evaluateIssueBody(body) {
@@ -114,8 +78,6 @@ export function evaluateIssueBody(body) {
114
78
 
115
79
  const problems = [];
116
80
 
117
- // An unstructured body parses but carries no structured sections — that
118
- // is exactly the human-filed shape this lint exists to catch.
119
81
  if (result.info.isUnstructuredBody) {
120
82
  problems.push(
121
83
  'The body has no recognised `## Goal` / `## Acceptance` / `## Verify` sections. ' +
@@ -145,9 +107,6 @@ export function evaluateIssueBody(body) {
145
107
  }
146
108
 
147
109
  /**
148
- * Render the markdown comment body the lint posts on a non-conformant
149
- * issue. Carries {@link LINT_COMMENT_MARKER} so re-runs update in place.
150
- *
151
110
  * @param {ConformanceVerdict} verdict
152
111
  * @returns {string}
153
112
  */
@@ -179,9 +138,6 @@ export function renderConformanceComment(verdict) {
179
138
  }
180
139
 
181
140
  /**
182
- * Thin `gh` wrapper. Returns the trimmed stdout, throwing on a non-zero
183
- * exit so the CLI surfaces the failure (orchestration-error-handling rule).
184
- *
185
141
  * @param {string[]} args
186
142
  * @returns {string}
187
143
  */
@@ -196,8 +152,6 @@ function gh(args) {
196
152
  }
197
153
 
198
154
  /**
199
- * Stage 5: only `type::story` tickets are in scope (type::epic retired).
200
- *
201
155
  * @param {string[]} labelNames
202
156
  * @returns {boolean}
203
157
  */
@@ -206,10 +160,6 @@ export function isStoryTicket(labelNames) {
206
160
  }
207
161
 
208
162
  /**
209
- * Evaluate an issue payload and optionally post a conformance comment.
210
- * Pure with respect to GitHub when `ghFn` is injected — the CLI `main`
211
- * is a thin argv wrapper around this helper.
212
- *
213
163
  * @param {{
214
164
  * issue: string|number,
215
165
  * repo?: string,
@@ -266,12 +216,6 @@ export function runLintIssueBody({
266
216
  return { conformant: false, problems: verdict.problems };
267
217
  }
268
218
 
269
- /**
270
- * CLI entry. Reads the target issue (number from `--issue` or the
271
- * `ISSUE_NUMBER` env), fetches its body + labels, and — when the body is
272
- * non-conformant — upserts a single marker comment. Always exits 0 (the
273
- * lint *informs*, it does not block), unless an unexpected I/O error occurs.
274
- */
275
219
  async function main() {
276
220
  const args = process.argv.slice(2);
277
221
  const get = (flag) => {
@@ -1,42 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  /**
4
- * mandrel-update-preflight.js — Story #4170
5
- * (feat(mandrel-update): add a first-run preflight before the updater)
6
- *
7
- * A first-run preflight for the `/mandrel-update` workflow. The workflow
8
- * otherwise jumps straight to `npx mandrel update` with no guard rails;
9
- * this preflight catches three day-0 failure modes *before* the version
10
- * bump:
11
- *
12
- * 1. **Wrong project (hard stop).** Running the updater in the framework
13
- * repo itself or in a non-consumer (no `mandrel` dependency in
14
- * `package.json`, or no materialized `.agents/` directory) silently
15
- * does the wrong thing. The consumer-shape check is a BLOCKER: it
16
- * exits non-zero so the workflow halts before bumping anything.
17
- * 2. **Dirty git index (warn).** `mandrel update` deliberately leaves the
18
- * lockfile *staged* (see `lib/cli/update.js`); the workflow's commit
19
- * step then `git add`s and commits. If the index already holds
20
- * unrelated staged changes, that step would sweep them into the
21
- * `chore: update mandrel` commit. Warn so the operator can unstage
22
- * first.
23
- * 3. **Offline (warn).** The CLI throws a usable error on a failed
24
- * `npm view`, but a one-line up-front reachability check gives a
25
- * friendlier "you're offline" signal before any version probe.
26
- *
27
- * Severity is consistent with framework preflight conventions
28
- * (cf. `single-story-close.js` runStoryClosePreflight, `mandrel-update-preflight.js`):
29
- * the consumer-shape check is a hard stop (blocker), dirty-index and offline
30
- * are warn-only and never block the run.
31
- *
32
- * Out of scope (per the Story): folding these checks into
33
- * `lib/cli/update.js` itself — the CLI stays git-free and
34
- * side-effect-scoped; this is a workflow-layer concern.
35
- *
36
- * The detection logic is a pure function (`runMandrelUpdatePreflight`) that
37
- * takes injectable probes so it is unit-testable without touching the real
38
- * filesystem, git index, or network. The CLI wrapper wires the real probes
39
- * and maps a blocker finding to a non-zero exit code.
4
+ * mandrel-update-preflight.js — first-run guard for `/mandrel-update`, run
5
+ * before the version bump. Hard-stops outside a consumer repo (no `mandrel`
6
+ * dependency or no `.agents/`). Warns on a dirty index (the update leaves the
7
+ * lockfile staged, so the commit step would sweep unrelated staged files in)
8
+ * and when the registry is unreachable. Kept out of `lib/cli/update.js`, which
9
+ * stays git-free.
40
10
  */
41
11
 
42
12
  import { execFileSync } from 'node:child_process';
@@ -54,16 +24,11 @@ import { Logger } from './lib/Logger.js';
54
24
  */
55
25
 
56
26
  /**
57
- * Real-world probes. Each is overridable in tests via the `probes` option.
58
- *
59
- * @param {string} projectRoot Absolute consumer repo root.
27
+ * @param {string} projectRoot
60
28
  */
61
29
  export function makeProbes(projectRoot) {
62
30
  return {
63
- /**
64
- * Read + parse `package.json`. Returns the parsed object, or `null`
65
- * when the file is missing or unparseable.
66
- */
31
+ /** `null` when missing or unparseable. */
67
32
  readPackageJson() {
68
33
  const pkgPath = path.join(projectRoot, 'package.json');
69
34
  if (!existsSync(pkgPath)) return null;
@@ -73,16 +38,10 @@ export function makeProbes(projectRoot) {
73
38
  return null;
74
39
  }
75
40
  },
76
- /** Does the materialized `.agents/` directory exist? */
77
41
  agentsDirExists() {
78
42
  return existsSync(path.join(projectRoot, '.agents'));
79
43
  },
80
- /**
81
- * Are there staged (index) changes? Returns true when
82
- * `git diff --cached --name-only` is non-empty. Returns false on any
83
- * git error (not a repo, git missing) — a missing index is not a
84
- * dirty index.
85
- */
44
+ /** False on any git error: a missing index is not a dirty one. */
86
45
  hasStagedChanges() {
87
46
  try {
88
47
  const out = execFileSync('git', ['diff', '--cached', '--name-only'], {
@@ -95,11 +54,6 @@ export function makeProbes(projectRoot) {
95
54
  return false;
96
55
  }
97
56
  },
98
- /**
99
- * Is the npm registry reachable? Probes `npm ping` (a PM-agnostic
100
- * reachability query that does not mutate anything). Returns true when
101
- * the ping succeeds, false on any failure (offline / registry down).
102
- */
103
57
  registryReachable() {
104
58
  try {
105
59
  execFileSync('npm', ['ping'], {
@@ -117,22 +71,16 @@ export function makeProbes(projectRoot) {
117
71
  }
118
72
 
119
73
  /**
120
- * Pure preflight evaluator. Runs the three checks against the supplied
121
- * probes and returns a structured result. Never throws; never performs
122
- * I/O directly (all I/O is behind `probes`).
74
+ * Pure: all I/O is behind `probes`. `ok` means no findings at all.
123
75
  *
124
76
  * @param {object} options
125
77
  * @param {ReturnType<typeof makeProbes>} options.probes
126
78
  * @returns {{ ok: boolean, blocked: boolean, findings: PreflightFinding[] }}
127
- * `blocked` is true when any blocker-severity finding fired (the
128
- * consumer-shape hard stop). `ok` is true when there are no findings of
129
- * any severity.
130
79
  */
131
80
  export function runMandrelUpdatePreflight({ probes }) {
132
81
  /** @type {PreflightFinding[]} */
133
82
  const findings = [];
134
83
 
135
- // 1. Consumer-shape check — BLOCKER (hard stop).
136
84
  const pkg = probes.readPackageJson();
137
85
  const deps = pkg
138
86
  ? {
@@ -158,7 +106,6 @@ export function runMandrelUpdatePreflight({ probes }) {
158
106
  });
159
107
  }
160
108
 
161
- // 2. Dirty-index check — WARN only.
162
109
  if (probes.hasStagedChanges()) {
163
110
  findings.push({
164
111
  id: 'dirty-index',
@@ -169,7 +116,6 @@ export function runMandrelUpdatePreflight({ probes }) {
169
116
  });
170
117
  }
171
118
 
172
- // 3. Offline check — WARN only.
173
119
  if (!probes.registryReachable()) {
174
120
  findings.push({
175
121
  id: 'offline',
@@ -185,9 +131,6 @@ export function runMandrelUpdatePreflight({ probes }) {
185
131
  }
186
132
 
187
133
  /**
188
- * Render the findings to a logger. Blockers go to `error`, warnings to
189
- * `warn`. A clean result logs a single `info` line.
190
- *
191
134
  * @param {{ ok: boolean, blocked: boolean, findings: PreflightFinding[] }} result
192
135
  * @param {{ info: Function, warn: Function, error: Function }} logger
193
136
  */
@@ -222,9 +165,6 @@ async function main() {
222
165
  const probes = makeProbes(projectRoot);
223
166
  const result = runMandrelUpdatePreflight({ probes });
224
167
  reportPreflight(result, Logger);
225
- // Machine-parsable JSON envelope on stdout for tooling / the workflow to
226
- // read. Use process.stdout.write (not console.log) per the no-console
227
- // enforcement boundary: human-facing output goes through Logger above.
228
168
  process.stdout.write(`${JSON.stringify(result)}\n`);
229
169
  return result.blocked ? 2 : 0;
230
170
  }
@@ -1,46 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  /**
4
- * merge-baseline.js — git merge driver for `baselines/*.json` (Story #5215).
4
+ * merge-baseline.js — git merge driver for `baselines/*.json`.
5
5
  *
6
- * ## The failure it replaces
7
- *
8
- * Every baseline write stamps `generatedAt` on line 4, so two branches that
9
- * each refresh a baseline ALWAYS differ there — even when they moved
10
- * completely disjoint rows. Git merges JSON as text, so whether it can
11
- * separate that hunk from the moved rows is an accident of proximity:
12
- *
13
- * - it cannot → a conflict on work that never overlapped (the observed
14
- * `coverage.json` / `maintainability.json` "always conflicts" pattern);
15
- * - it can → it splices both sides' row lines into a row set neither side
16
- * scored, and the ratchet then guards a number no scorer produced (the
17
- * observed `crap.json` "silently auto-merges" pattern).
18
- *
19
- * The quiet one is the worse one. A baseline is a set of rows keyed by
20
- * identity plus a rollup derived from them, so this driver merges it as
21
- * that — see `lib/baselines/merge-envelopes.js` for the semantics.
22
- *
23
- * ## Contract
6
+ * A text merge of a baseline either conflicts on the always-different
7
+ * `generatedAt` stamp or, worse, silently splices both sides' rows into a set
8
+ * no scorer produced. This merges rows by identity and re-derives the rollup.
9
+ * Files that are not a known row baseline go to `git merge-file` unchanged.
24
10
  *
25
11
  * node .agents/scripts/merge-baseline.js %O %A %B %P
26
12
  *
27
- * git's merge-driver calling convention: `%O` ancestor, `%A` ours (and the
28
- * file the driver MUST leave its result in), `%B` theirs, `%P` the real
29
- * pathname being merged. Exit 0 merged clean, non-zero conflicted.
30
- *
31
- * Registered per clone (registration is per-clone, so `mandrel doctor` is
32
- * the guard that it happened, not `mandrel sync`):
33
- *
34
- * .gitattributes: baselines/*.json merge=mandrel-baseline
35
- * git config: merge.mandrel-baseline.driver
36
- *
37
- * ## Not every `baselines/*.json` is an envelope
38
- *
39
- * That glob also matches arch-cycles, cyclomatic, dead-exports, audit-ledger,
40
- * context-budget and workflow-citations — files with their own shapes and no
41
- * row identity. Anything whose `$schema` is not a known per-kind envelope is
42
- * handed straight back to `git merge-file`, so registering the driver cannot
43
- * change their behaviour.
13
+ * `%A` is ours and MUST hold the result. Exit 0 clean, non-zero conflicted.
14
+ * Registration is per-clone git config, so `mandrel doctor` guards it.
44
15
  */
45
16
 
46
17
  import fs from 'node:fs';
@@ -71,13 +42,11 @@ function rowBlock(row) {
71
42
  }
72
43
 
73
44
  /**
74
- * Wrap each conflicting row in git conflict markers, leaving every other row
75
- * merged. Operates on the canonical text the writer already produced, so the
76
- * non-conflicting remainder of the file is byte-identical to what a clean
77
- * merge would have written.
45
+ * Wrap each conflicting row in markers within the canonical text, so the rest
46
+ * is byte-identical to a clean merge.
78
47
  *
79
- * @param {string} text Canonical serialization of the merged envelope.
80
- * @param {Array<object>} conflicts Row-scoped conflict records.
48
+ * @param {string} text
49
+ * @param {Array<object>} conflicts
81
50
  * @returns {string}
82
51
  */
83
52
  export function renderConflictMarkers(text, conflicts) {
@@ -86,8 +55,7 @@ export function renderConflictMarkers(text, conflicts) {
86
55
  const placed = conflict.ours ?? conflict.theirs;
87
56
  if (placed === undefined) continue;
88
57
  const block = rowBlock(placed);
89
- // The row may or may not be the last element of `rows`; keep whichever
90
- // separator follows it on both sides so the markers wrap whole lines.
58
+ // Keep the row's trailing separator (if any) so markers wrap whole lines.
91
59
  const withComma = `${block},`;
92
60
  const [needle, suffix] = out.includes(withComma)
93
61
  ? [withComma, ',']
@@ -125,18 +93,13 @@ function readSide(file) {
125
93
  }
126
94
 
127
95
  /**
128
- * Hand the merge back to git's own text merge. Used for every
129
- * `baselines/*.json` that is not a known per-kind envelope, and for one that
130
- * is too damaged to parse — in both cases the driver must not invent a
131
- * result, and git's behaviour is exactly what the repo had before.
96
+ * Fall back to git's text merge for unknown or unparseable files; the driver
97
+ * never invents a result.
132
98
  *
133
99
  * @returns {number} git merge-file's own exit code.
134
100
  */
135
101
  function delegateToGit(basePath, oursPath, theirsPath) {
136
- // `stdio: 'inherit'` so git's own conflict reporting reaches the operator
137
- // exactly as it would have with no driver registered. `spawnChild` returns
138
- // the RAW result deliberately: a `status` of null means the child was
139
- // killed, and that must never be read as a clean merge.
102
+ // A null status means the child was killed — never a clean merge.
140
103
  const result = spawnChild(
141
104
  'git',
142
105
  ['merge-file', oursPath, basePath, theirsPath],
@@ -152,20 +115,8 @@ function delegateToGit(basePath, oursPath, theirsPath) {
152
115
  }
153
116
 
154
117
  /**
155
- * Which merge does this file get?
156
- *
157
- * Two families answer, and neither is "all of `baselines/*.json`":
158
- *
159
- * - **Envelope kinds** — the eight kernel kinds, merged by the kind
160
- * module's own `rowIdentity` with the rollup RE-DERIVED.
161
- * - **Plain row baselines** — `cyclomatic`, `dead-exports` and
162
- * `dead-exports-production`, which are row sets with a real identity but
163
- * no kernel protocol. Until Story #5277 these fell through to
164
- * `git merge-file` even though `.gitattributes` routes them here, so the
165
- * attribute promised a row merge the driver never performed.
166
- *
167
- * Anything else — arch-cycles, audit-ledger, context-budget,
168
- * workflow-citations — resolves `null` and is handed back to git unchanged.
118
+ * Envelope kinds (rollup re-derived) or plain row baselines (cyclomatic,
119
+ * dead-exports*); anything else resolves `null` and goes back to git.
169
120
  *
170
121
  * @param {unknown} ours
171
122
  * @param {unknown} theirs
@@ -180,11 +131,8 @@ function resolveMergeTarget(ours, theirs) {
180
131
  }
181
132
 
182
133
  /**
183
- * Serialize the merged result into `%A`. Envelope kinds go through the shared
184
- * writer (which validates against the per-kind schema); plain baselines are
185
- * written with the same `JSON.stringify(…, null, 2)` + trailing newline their
186
- * own generators use, which is what keeps a clean merge byte-identical to a
187
- * regeneration.
134
+ * Plain baselines use their generators' exact serialization so a clean merge
135
+ * is byte-identical to a regeneration.
188
136
  *
189
137
  * @param {string} oursPath
190
138
  * @param {{ envelope: object }} merged
@@ -199,15 +147,8 @@ function writeMerged(oursPath, merged, isEnvelopeKind) {
199
147
  }
200
148
 
201
149
  /**
202
- * Register the driver in this clone (`--install`).
203
- *
204
- * The driver script installs its own registration because the registration is
205
- * the half that cannot travel: `.gitattributes` is tracked and ships with the
206
- * repo, `merge.mandrel-baseline.driver` is per-clone git config and is absent
207
- * in every fresh clone — silently, with git falling back to a text merge and
208
- * reporting nothing. Wired into this repo's `prepare` script so `npm install`
209
- * completes the registration, and idempotent so every later `prepare` is a
210
- * no-op.
150
+ * `--install`: the per-clone git config does not travel with the repo and its
151
+ * absence is silent, so `prepare` runs this (idempotent).
211
152
  *
212
153
  * @returns {number} Process exit code.
213
154
  */
@@ -239,11 +180,8 @@ export function runMergeBaseline(argv) {
239
180
  return 2;
240
181
  }
241
182
 
242
- // Git hands the driver temp filenames RELATIVE to the worktree root it
243
- // invokes us from (`.merge_file_xxxxxx`), so every path is resolved before
244
- // use — the shared writer refuses a relative path, and that refusal only
245
- // shows up under a real `git merge`, never when the driver is called
246
- // directly with absolute paths.
183
+ // Git passes worktree-relative temp names; the shared writer refuses
184
+ // relative paths.
247
185
  const [basePath, oursPath, theirsPath] = [baseArg, oursArg, theirsArg].map(
248
186
  (p) => path.resolve(p),
249
187
  );
@@ -269,9 +207,7 @@ export function runMergeBaseline(argv) {
269
207
  }
270
208
 
271
209
  /**
272
- * Merge a file whose kind the driver DOES understand, and leave the result in
273
- * `%A`. A merge that throws is handed back to git rather than half-written:
274
- * the driver must never invent a result for a baseline it could not model.
210
+ * A merge that throws is handed back to git rather than half-written.
275
211
  *
276
212
  * @param {object} ctx
277
213
  * @returns {number} Process exit code.
@@ -297,9 +233,7 @@ function mergeResolved({
297
233
  return delegateToGit(basePath, oursPath, theirsPath);
298
234
  }
299
235
 
300
- // Write the canonical projection first even when conflicted: the marker
301
- // rendering operates on exactly the bytes a clean merge would have left,
302
- // so the merged remainder of a conflicted file is identical to it.
236
+ // Written even when conflicted: markers are rendered onto these bytes.
303
237
  writeMerged(oursPath, merged, isEnvelopeKind);
304
238
 
305
239
  if (merged.conflicts.length === 0) {
@@ -310,15 +244,11 @@ function mergeResolved({
310
244
  }
311
245
 
312
246
  /**
313
- * Report a conflicted merge and render its markers into `%A`.
314
- *
315
- * Both scopes get markers. An envelope-level conflict used to be reported on
316
- * stderr alone, leaving a file that looked cleanly merged while git held the
317
- * path unmerged — the operator had to reconstruct from scrollback which stamp
318
- * disagreed.
247
+ * Both row and envelope conflicts get in-file markers, so the file never
248
+ * looks cleanly merged while git holds it unmerged.
319
249
  *
320
250
  * @param {{ kind: string, merged: object, oursPath: string, label: string }} ctx
321
- * @returns {number} Always 1 — a conflicted merge.
251
+ * @returns {number} Always 1.
322
252
  */
323
253
  function markConflicts({ kind, merged, oursPath, label }) {
324
254
  const rowConflicts = merged.conflicts.filter((c) => c.scope === 'row');
@@ -339,13 +269,8 @@ function markConflicts({ kind, merged, oursPath, label }) {
339
269
  }
340
270
 
341
271
  /**
342
- * Report every conflict on stderr, then name the regeneration command.
343
- *
344
- * The regenerate line is not decoration. The merged file's rollup was derived
345
- * from a row set that still carries conflict markers, so resolving the markers
346
- * by hand leaves the rollup describing a tree nobody scored — the same silent
347
- * wrong number the driver exists to prevent, arrived at from the other
348
- * direction. Saying it here is the only place an operator sees it.
272
+ * Names the regenerate command: the rollup was derived from unresolved rows,
273
+ * so hand-resolving the markers leaves it describing a tree nobody scored.
349
274
  *
350
275
  * @param {{ kind: string, label: string, rowConflicts: Array<object>, envelopeConflicts: Array<object> }} args
351
276
  */