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