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,22 +1,6 @@
1
1
  /**
2
- * bootstrap/prompt — interactive prompt + CLI flag helpers for bootstrap.js.
3
- *
4
- * Uses Node's built-in `readline/promises` so the bootstrap stays
5
- * dependency-free. Provides:
6
- *
7
- * - `parseFlags(argv)` — minimal arg parser for the flags the
8
- * bootstrap CLI accepts.
9
- * - `inferDefaults(projectRoot)` — derives default values for owner /
10
- * repo / baseBranch / operatorHandle
11
- * from the project's git remote and
12
- * config (no network calls).
13
- * - `collectAnswers({ flags, defaults, interactive })` — resolves every
14
- * required value, prompting only for
15
- * values not supplied via flag.
16
- *
17
- * In non-TTY contexts the helper refuses to prompt and returns the
18
- * accumulated answers; callers must decide whether the remaining required
19
- * fields are satisfied via flags/env.
2
+ * Dependency-free prompt and CLI-flag helpers for bootstrap.js. Never prompts
3
+ * in non-TTY contexts; callers decide whether missing fields are fatal.
20
4
  */
21
5
 
22
6
  import { spawnSync } from 'node:child_process';
@@ -24,10 +8,7 @@ import fs from 'node:fs';
24
8
  import path from 'node:path';
25
9
  import readline from 'node:readline/promises';
26
10
 
27
- /**
28
- * Flags the bootstrap CLI accepts. Keep this list in sync with the
29
- * `--help` text in bootstrap.js.
30
- */
11
+ /** Keep in sync with the `--help` text in bootstrap.js. */
31
12
  const KNOWN_FLAGS = Object.freeze({
32
13
  string: [
33
14
  'owner',
@@ -49,10 +30,7 @@ const KNOWN_FLAGS = Object.freeze({
49
30
  });
50
31
 
51
32
  /**
52
- * Parse a minimal `--flag value` / `--flag=value` / `--boolean` argv.
53
- *
54
- * Unknown long flags become string flags (last-write-wins) so callers can
55
- * forward through to nested scripts without losing data.
33
+ * Unknown long flags become string flags so they can be forwarded.
56
34
  *
57
35
  * @param {string[]} argv
58
36
  * @returns {Record<string, string|boolean>}
@@ -85,10 +63,6 @@ export function parseFlags(argv) {
85
63
  }
86
64
 
87
65
  /**
88
- * Parse `owner/repo` out of a git remote URL. Supports HTTPS, SSH, and
89
- * `git@host:owner/repo.git` forms. Returns `null` when the URL is empty
90
- * or not recognisable.
91
- *
92
66
  * @param {string} url
93
67
  * @returns {{ owner: string, repo: string } | null}
94
68
  */
@@ -114,16 +88,8 @@ function runGit(args, cwd) {
114
88
  }
115
89
 
116
90
  /**
117
- * Read the already-stored `github.projectNumber` from an existing
118
- * `.agentrc.json` in `projectRoot`, returned as a numeric string (the shape
119
- * the `projectNumber` question default expects). Returns `null` when the
120
- * file is missing, unparseable, or carries no integer project number.
121
- *
122
- * This is the authoritative default for an already-provisioned project on a
123
- * bootstrap re-run: surfacing the stored number (rather than the repo name)
124
- * means an `--assume-yes` re-run resolves a numeric answer, which
125
- * `detectCreation` classifies as an *existing* project — so no duplicate
126
- * board is created (Story #3896 / review Finding B.3).
91
+ * Stored `github.projectNumber` as a numeric string. A re-run must default to
92
+ * it so `detectCreation` sees an existing project and no duplicate board is made.
127
93
  *
128
94
  * @param {string} projectRoot
129
95
  * @returns {string|null}
@@ -147,9 +113,7 @@ export function inferStoredProjectNumber(projectRoot) {
147
113
  }
148
114
 
149
115
  /**
150
- * Derive defaults for the interactive prompts from the project's git
151
- * config. No network calls — only inspects the local remote/config and the
152
- * stored `.agentrc.json` (for the already-provisioned project number).
116
+ * Prompt defaults from local git state and `.agentrc.json`; no network calls.
153
117
  *
154
118
  * @param {string} projectRoot
155
119
  * @returns {{ owner: string|null, repo: string|null, baseBranch: string,
@@ -175,41 +139,22 @@ export function inferDefaults(projectRoot) {
175
139
  };
176
140
  }
177
141
 
178
- // ---------------------------------------------------------------------------
179
- // Resolver chain (Story #2459 / Task #2470)
180
- //
181
- // `collectAnswers` used to be a 60-line for-loop with seven `continue`
182
- // branches — flag, env, silent-accept, interactive (with re-ask), assume-yes,
183
- // missing-required. The branches all had the same shape: "try to produce a
184
- // value; if you have one, record it and move on". Each branch is now a
185
- // dedicated `resolveFrom*` helper that returns one of three outcomes:
186
- //
187
- // { kind: 'value', value } — accepted this answer; stop trying resolvers.
188
- // { kind: 'missing' } — required-but-empty; record on `missing[]`.
189
- // { kind: 'skip' } — this resolver doesn't apply; try the next.
190
- //
191
- // `collectAnswers` becomes a two-level loop: for each question, walk the
192
- // `RESOLVERS` array in priority order. Each resolver is testable in
193
- // isolation and measures CC < 8 independently.
194
- // ---------------------------------------------------------------------------
142
+ // Resolvers return `{ kind: 'value', value }` (stop), `{ kind: 'missing' }`
143
+ // (required-but-empty) or `{ kind: 'skip' }` (try the next resolver).
195
144
 
196
145
  /**
197
146
  * @typedef {object} ResolverContext
198
- * @property {object} q — The question definition.
147
+ * @property {object} q
199
148
  * @property {Record<string, string|boolean>} flags
200
149
  * @property {NodeJS.ProcessEnv} env
201
- * @property {Set<string>} silentSet — Keys whose default should be
202
- * accepted without prompting.
150
+ * @property {Set<string>} silentSet — Keys whose default is accepted unprompted.
203
151
  * @property {boolean} interactive
204
152
  * @property {boolean} assumeYes
205
- * @property {() => Promise<readline.Interface>} getRl — Lazy readline factory
206
- * that returns the same instance across
207
- * calls within one collectAnswers run.
153
+ * @property {() => Promise<readline.Interface>} getRl — Lazy, one instance per run.
208
154
  * @property {NodeJS.WritableStream} output
209
155
  */
210
156
 
211
157
  /**
212
- * Resolver 1 — CLI flag wins outright.
213
158
  * @param {ResolverContext} ctx
214
159
  * @returns {{ kind: 'value'|'skip', value?: string }}
215
160
  */
@@ -222,7 +167,6 @@ export function resolveFromFlag(ctx) {
222
167
  }
223
168
 
224
169
  /**
225
- * Resolver 2 — env var override.
226
170
  * @param {ResolverContext} ctx
227
171
  * @returns {{ kind: 'value'|'skip', value?: string }}
228
172
  */
@@ -237,8 +181,6 @@ export function resolveFromEnv(ctx) {
237
181
  }
238
182
 
239
183
  /**
240
- * Resolver 3 — silent-accept default (key was inferred from local git state
241
- * and no operator override was supplied).
242
184
  * @param {ResolverContext} ctx
243
185
  * @returns {{ kind: 'value'|'skip', value?: string }}
244
186
  */
@@ -250,28 +192,9 @@ export function resolveFromSilent(ctx) {
250
192
  }
251
193
 
252
194
  /**
253
- * Resolver — interactive numbered-menu picker. Sits between
254
- * `resolveFromSilent` and `resolveInteractive` so an operator who declined
255
- * the silent default still gets a live menu of real choices (e.g. their
256
- * GitHub repos / projects) before falling back to free-text entry.
257
- *
258
- * The question opts in by carrying an optional `picker: { list }` field,
259
- * where `list(answers)` is a function returning an array of string choices
260
- * (commonly a `gh-list` provider). It receives the answers resolved so far,
261
- * so a later question can list against an earlier answer — e.g. the repo /
262
- * project pickers fetching the just-entered owner's repos/projects, which is
263
- * the only owner available when the folder has no git remote to infer from.
264
- * The resolver returns `kind: 'skip'` — falling through to manual entry via
265
- * `resolveInteractive` — in three cases:
266
- *
267
- * 1. not interactive (`ctx.interactive` is false),
268
- * 2. the question has no `picker` (or no callable `picker.list`),
269
- * 3. the provider returns an empty list (no choices to render).
270
- *
271
- * Otherwise it renders a numbered menu, reads a selection via `ctx.getRl()`,
272
- * and returns the chosen value. A blank line or an out-of-range / unparseable
273
- * selection also falls through to manual entry (`kind: 'skip'`) rather than
274
- * looping, keeping the resolver single-shot and predictable.
195
+ * Numbered-menu picker for questions carrying `picker.list(answers)`, which
196
+ * sees earlier answers (e.g. the owner just entered). Single-shot: no choices
197
+ * or a blank/invalid selection falls through to manual entry.
275
198
  *
276
199
  * @param {ResolverContext} ctx
277
200
  * @returns {Promise<{ kind: 'value'|'skip', value?: string }>}
@@ -286,10 +209,6 @@ export async function resolveFromPicker(ctx) {
286
209
 
287
210
  const normalized = choices.map(normalizePickerChoice);
288
211
  const rl = await ctx.getRl();
289
- // The picker header uses `pickerMessage` when set, so a question can show
290
- // list-oriented guidance here (e.g. "Select existing or press ENTER to create
291
- // new one") while the manual-entry fall-through prompt (`askOnce`) uses the
292
- // shorter `message` (e.g. "New GitHub repo name"). Falls back to `message`.
293
212
  ctx.output.write(`${ctx.q.pickerMessage ?? ctx.q.message}:\n`);
294
213
  normalized.forEach((choice, index) => {
295
214
  ctx.output.write(` ${index + 1}) ${choice.label}\n`);
@@ -318,11 +237,6 @@ export async function resolveFromPicker(ctx) {
318
237
  }
319
238
 
320
239
  /**
321
- * Normalize a picker choice into a `{ label, value }` pair. A bare string
322
- * choice uses the same text for both; an object choice carries an explicit
323
- * `label` shown in the menu and `value` returned on selection. Exported for
324
- * unit testing.
325
- *
326
240
  * @param {string | { label?: string, value?: string }} choice
327
241
  * @returns {{ label: string, value: string }}
328
242
  */
@@ -337,9 +251,7 @@ export function normalizePickerChoice(choice) {
337
251
  }
338
252
 
339
253
  /**
340
- * Prompt once with the question's default label, applying the default when
341
- * the operator pressed Enter on an empty line. Pure I/O; exported so
342
- * `resolveInteractive` can be unit-tested with a mocked readline.
254
+ * An empty line takes the default.
343
255
  *
344
256
  * @param {readline.Interface} rl
345
257
  * @param {object} q
@@ -354,8 +266,7 @@ async function askOnce(rl, q) {
354
266
  }
355
267
 
356
268
  /**
357
- * Resolver 4 — interactive prompt. Asks once; if `q.validate` rejects, the
358
- * helper re-asks once more before declaring the answer missing.
269
+ * Re-asks once on a validation failure before declaring the answer missing.
359
270
  *
360
271
  * @param {ResolverContext} ctx
361
272
  * @returns {Promise<{ kind: 'value'|'missing'|'skip', value?: string }>}
@@ -376,10 +287,6 @@ export async function resolveInteractive(ctx) {
376
287
  }
377
288
 
378
289
  /**
379
- * Resolver 5 — non-interactive `--assume-yes` fallback. Accepts the
380
- * question's default verbatim; emits `missing` for required questions that
381
- * lack a default.
382
- *
383
290
  * @param {ResolverContext} ctx
384
291
  * @returns {{ kind: 'value'|'missing'|'skip', value?: string }}
385
292
  */
@@ -390,10 +297,7 @@ export function resolveAssumeYes(ctx) {
390
297
  return { kind: 'skip' };
391
298
  }
392
299
 
393
- /**
394
- * Priority-ordered list of resolvers. Each is tried in turn until one
395
- * returns a non-`skip` outcome. Exported for testing.
396
- */
300
+ /** Priority order; the first non-`skip` outcome wins. */
397
301
  export const RESOLVERS = Object.freeze([
398
302
  resolveFromFlag,
399
303
  resolveFromEnv,
@@ -404,15 +308,7 @@ export const RESOLVERS = Object.freeze([
404
308
  ]);
405
309
 
406
310
  /**
407
- * Walk the question list and resolve a value for each. Each question is
408
- * routed through the `RESOLVERS` chain in priority order; the first
409
- * resolver to return `{ kind: 'value' }` wins, `{ kind: 'missing' }` adds
410
- * the key to `missing[]`, and `{ kind: 'skip' }` continues the chain. If
411
- * every resolver skips a *required* question, the key is recorded as
412
- * missing so callers can decide whether to abort.
413
- *
414
- * Returns `{ answers, missing }` so the CLI can decide whether to abort
415
- * (non-TTY with missing required fields and no `--assume-yes`).
311
+ * Resolve each question through `RESOLVERS`; the CLI decides whether `missing` aborts.
416
312
  *
417
313
  * @param {object} args
418
314
  * @param {Array<{ key: string, flag: string, env?: string, message: string,
@@ -421,8 +317,7 @@ export const RESOLVERS = Object.freeze([
421
317
  * @param {Record<string, string|boolean>} args.flags
422
318
  * @param {boolean} args.interactive
423
319
  * @param {boolean} args.assumeYes
424
- * @param {Iterable<string>} [args.silentAccept] Keys whose `q.default`
425
- * should be accepted without prompting (when no flag/env overrides).
320
+ * @param {Iterable<string>} [args.silentAccept]
426
321
  * @param {NodeJS.ReadableStream} [args.input=process.stdin]
427
322
  * @param {NodeJS.WritableStream} [args.output=process.stdout]
428
323
  * @returns {Promise<{ answers: Record<string, string>, missing: string[] }>}
@@ -456,9 +351,7 @@ export async function collectAnswers(args) {
456
351
  assumeYes,
457
352
  getRl,
458
353
  output,
459
- // Answers resolved so far (questions run in order), so a later
460
- // question's picker can key off an earlier answer — e.g. the repo /
461
- // project pickers listing against the owner just entered.
354
+ // Resolved so far, so a later picker can key off an earlier answer.
462
355
  answers,
463
356
  };
464
357
  let outcome = { kind: 'skip' };
@@ -474,7 +367,6 @@ export async function collectAnswers(args) {
474
367
  missing.push(q.key);
475
368
  continue;
476
369
  }
477
- // Every resolver skipped — record as missing only if required.
478
370
  if (q.required) missing.push(q.key);
479
371
  }
480
372
  } finally {
@@ -1,35 +1,7 @@
1
1
  /**
2
- * bootstrap/quality-bootstrap — Story #1401 (Epic #1386)
3
- *
4
- * Idempotent installer for the stabilized-quality-gates surface area on a
5
- * project clone. Performs five additive actions, each safe to re-run:
6
- *
7
- * 1. Copies the `code-quality-guardrails.md` helper into the project's
8
- * `.agents/workflows/helpers/` (no-op when the helper is already present).
9
- * 2. Installs `.husky/pre-commit` carrying the `quality:preview` invocation
10
- * that the framework ships, preserving any custom hook lines already in
11
- * place. When a custom (non-framework) `pre-commit` exists, it is left
12
- * untouched and the caller is told to merge in the snippet manually.
13
- * 3. Adds `quality:preview` and `quality:watch` npm scripts when missing.
14
- * Existing scripts are preserved.
15
- * 4. Seeds `delivery.quality.codingGuardrails` and
16
- * `delivery.quality.autoRefresh` defaults in `.agentrc.json` when
17
- * the keys are absent. Existing values are preserved.
18
- * 5. Registers the `baselines/*.json` merge driver (Story #5215) — the
19
- * `.gitattributes` line plus this clone's `merge.mandrel-baseline.driver`
20
- * config, so concurrent baseline refreshes merge by row identity instead
21
- * of conflicting on the `generatedAt` stamp.
22
- * 6. Prunes a committed pre-v2 `baselines/epic/` tree (Story #5007). The
23
- * v2 model is Story-only — nothing writes, reads, or reaps per-Epic
24
- * ratchet snapshots — so an upgrading consumer is left carrying a
25
- * committed directory no gate consults. Absent on every repo that never
26
- * ran a pre-v2 install, which is the overwhelmingly common case.
27
- *
28
- * Returns a structured summary so the bootstrap and update workflows can
29
- * surface exactly which actions ran and which were no-ops.
30
- *
31
- * Exports are pure-ish (filesystem effects only via the supplied paths) so
32
- * the test suite can drive the helper against a tmp directory.
2
+ * Idempotent, additive installer for the quality-gates surface: guardrails
3
+ * helper, pre-commit hook, npm scripts, config defaults, baseline merge
4
+ * driver, and pruning the retired `baselines/epic/` tree.
33
5
  *
34
6
  * @module bootstrap/quality-bootstrap
35
7
  */
@@ -41,11 +13,7 @@ import { getAgentrcDefaults, lookupPath } from '../config/defaults.js';
41
13
  import { deepEqual } from '../json-utils.js';
42
14
  import { ensureBaselineMergeDriver } from './baseline-merge-driver.js';
43
15
 
44
- /**
45
- * The exact pre-commit body the framework ships. Kept as a single string so
46
- * the hook-installer can detect a verbatim framework hook (overwrite-safe)
47
- * vs a custom hook (preserve and warn).
48
- */
16
+ /** The framework's own pre-commit body. */
49
17
  const FRAMEWORK_PRE_COMMIT = `node scripts/check-version-sync.js
50
18
  npx lint-staged
51
19
  # Story #1395 / Epic #1386: catch MI/CRAP drift at git-commit time so the
@@ -56,13 +24,7 @@ npx lint-staged
56
24
  node .agents/scripts/quality-preview.js --changed-since HEAD --staged
57
25
  `;
58
26
 
59
- /**
60
- * Minimal pre-commit body for downstream projects that do not carry the
61
- * framework's `check-version-sync.js` script. Drops that line and the
62
- * `lint-staged` invocation (downstream may or may not have lint-staged
63
- * configured); keeps the quality-preview line which is the load-bearing
64
- * Epic #1386 addition.
65
- */
27
+ /** Consumer pre-commit: only the load-bearing quality-preview line. */
66
28
  export const DOWNSTREAM_PRE_COMMIT = `# Stabilized quality gates (Epic #1386 / Story #1401):
67
29
  # catch MI/CRAP drift at git-commit time so the agent refactors before the
68
30
  # diff is closed. quality:preview wraps both gates with --changed-since HEAD
@@ -71,43 +33,25 @@ export const DOWNSTREAM_PRE_COMMIT = `# Stabilized quality gates (Epic #1386 / S
71
33
  node .agents/scripts/quality-preview.js --changed-since HEAD --staged
72
34
  `;
73
35
 
74
- /**
75
- * Marker substring used to detect a framework-installed quality-preview line
76
- * inside a pre-commit hook regardless of which body variant is in use.
77
- */
36
+ /** Detects an installed quality-preview line in either body variant. */
78
37
  export const PRE_COMMIT_MARKER =
79
38
  'node .agents/scripts/quality-preview.js --changed-since HEAD --staged';
80
39
 
81
40
  /**
82
- * Default values seeded into `delivery.quality.{codingGuardrails,autoRefresh}`
83
- * when the keys are absent. Mirrors `.agents/docs/agentrc-reference.json` — keep in
84
- * sync when those numbers move.
41
+ * Mirrors `.agents/docs/agentrc-reference.json`. Other `autoRefresh` knobs are
42
+ * fixed constants; seeding them would write an invalid config.
85
43
  */
86
44
  const QUALITY_CONFIG_DEFAULTS = Object.freeze({
87
- codingGuardrails: Object.freeze({
88
- cyclomaticFlag: 8,
89
- requireSiblingTest: false,
90
- }),
91
- autoRefresh: Object.freeze({
92
- enabled: true,
93
- crapJumpCap: 5,
94
- scope: 'diff',
95
- }),
45
+ autoRefresh: Object.freeze({ enabled: true }),
96
46
  });
97
47
 
98
- /**
99
- * NPM scripts seeded by the bootstrap. Existing values are preserved.
100
- */
101
48
  export const QUALITY_NPM_SCRIPTS = Object.freeze({
102
49
  'quality:preview':
103
50
  'node .agents/scripts/quality-preview.js --changed-since HEAD',
104
51
  'quality:watch': 'node .agents/scripts/quality-watch.js',
105
52
  });
106
53
 
107
- /**
108
- * Read JSON from a path, returning `null` when the file does not exist.
109
- * Surfaces parse errors so callers can fail loudly on a corrupt config.
110
- */
54
+ /** `null` when absent; parse errors propagate so a corrupt config fails loudly. */
111
55
  function readJsonIfExists(p) {
112
56
  if (!fs.existsSync(p)) return null;
113
57
  const raw = fs.readFileSync(p, 'utf8');
@@ -120,16 +64,9 @@ function writeJson(p, obj) {
120
64
  }
121
65
 
122
66
  /**
123
- * Step 1 — Ensure the code-quality-guardrails helper is present under
124
- * `.agents/workflows/helpers/`. When the helper already exists we report
125
- * `already-present`. Otherwise the helper is copied from the framework source
126
- * if available, or skipped with a `missing-source` outcome the caller can
127
- * surface.
128
- *
129
67
  * @param {object} ctx
130
68
  * @param {string} ctx.projectRoot
131
- * @param {string} [ctx.frameworkRoot] - Path to the framework checkout
132
- * (defaults to `<projectRoot>/.agents`). Tests pass an explicit path.
69
+ * @param {string} [ctx.frameworkRoot] - Defaults to `<projectRoot>/.agents`.
133
70
  */
134
71
  export function ensureGuardrailsHelper(ctx) {
135
72
  const projectRoot = ctx.projectRoot;
@@ -159,16 +96,8 @@ export function ensureGuardrailsHelper(ctx) {
159
96
  }
160
97
 
161
98
  /**
162
- * Step 2 — Install the `.husky/pre-commit` hook. Decision tree:
163
- *
164
- * - No `.husky/pre-commit` file → write the requested body, action `created`.
165
- * - File exists and already contains the quality-preview marker → no-op,
166
- * action `already-present`.
167
- * - File exists, does NOT contain the marker, and matches the framework
168
- * body byte-for-byte → safe overwrite, action `updated`.
169
- * - File exists, custom content → leave untouched and emit
170
- * `custom-hook-skip` so the workflow can print the operator notice with
171
- * the recommended snippet to merge in.
99
+ * Create the hook when absent; an existing hook without the marker is never
100
+ * overwritten — `custom-hook-skip` hands the operator the snippet to merge.
172
101
  *
173
102
  * @param {object} ctx
174
103
  * @param {string} ctx.projectRoot
@@ -209,14 +138,7 @@ export function ensurePreCommitHook(ctx) {
209
138
  };
210
139
  }
211
140
 
212
- /**
213
- * Step 3 — Register the `quality:preview` and `quality:watch` npm scripts
214
- * in the project's `package.json`. Existing values are preserved
215
- * unconditionally; this helper only adds missing keys.
216
- *
217
- * Returns the per-script outcome so the workflow can surface which scripts
218
- * were added vs already present.
219
- */
141
+ /** Add missing quality npm scripts; existing values always win. */
220
142
  export function ensureQualityNpmScripts(ctx) {
221
143
  const pkgPath = path.join(ctx.projectRoot, 'package.json');
222
144
  const pkg = readJsonIfExists(pkgPath);
@@ -244,24 +166,13 @@ export function ensureQualityNpmScripts(ctx) {
244
166
  }
245
167
 
246
168
  /**
247
- * Deep-merge the requested defaults into an object, only setting keys that
248
- * are absent AND whose intended value diverges from the framework default
249
- * at that dotted path. The runtime layers `getAgentrcDefaults()`
250
- * underneath the project config at read time, so a key whose intended
251
- * value equals the framework default would be written redundantly — and
252
- * would then be flagged `[REDUNDANT]` by the sync-agentrc helper on the
253
- * next /mandrel-update. Default-aware seeding keeps the two helpers from
254
- * contradicting each other.
255
- *
256
- * Returns `{ merged, addedKeys[] }` so the caller can report exactly
257
- * which keys were seeded. Pure-default writes are reported under
258
- * `skippedKeys[]` so callers can surface why the seed was a no-op.
169
+ * Set only keys that are absent AND differ from the framework default — a
170
+ * default-equal write would be flagged `[REDUNDANT]` by sync-agentrc.
171
+ * Default-equal keys are reported in `skippedKeys`.
259
172
  *
260
173
  * @param {object} target
261
- * @param {object} defaults — the values the caller would seed if
262
- * default-blindness were the policy.
263
- * @param {object} frameworkDefaults — the framework's resolved defaults
264
- * at the seed root. Compared to each intended write.
174
+ * @param {object} defaults
175
+ * @param {object} frameworkDefaults — resolved defaults at the seed root.
265
176
  * @param {string} prefix — dotted path under construction.
266
177
  */
267
178
  function mergeMissingKeys(
@@ -309,13 +220,8 @@ function mergeMissingKeys(
309
220
  }
310
221
 
311
222
  /**
312
- * Step 4 — Seed the `delivery.quality.codingGuardrails` and
313
- * `delivery.quality.autoRefresh` defaults into `.agentrc.json`. Only
314
- * missing keys are added; existing values are preserved unconditionally
315
- * (including operator overrides that diverge from the framework defaults).
316
- *
317
- * When `.agentrc.json` does not exist the action is `missing-config` and
318
- * nothing is written — the project must complete its base bootstrap first.
223
+ * Seed missing quality defaults into `.agentrc.json`; writes nothing when the
224
+ * file is absent (base bootstrap must run first).
319
225
  */
320
226
  export function ensureQualityConfigDefaults(ctx) {
321
227
  const cfgPath = path.join(ctx.projectRoot, '.agentrc.json');
@@ -344,9 +250,7 @@ export function ensureQualityConfigDefaults(ctx) {
344
250
  if (addedKeys.length > 0) {
345
251
  writeJson(cfgPath, cfg);
346
252
  } else {
347
- // No-op path — undo the scaffolding we inserted so the on-disk file
348
- // and the in-memory snapshot agree (defensive; nothing reads cfg
349
- // after this).
253
+ // Undo the scaffolding so memory matches disk.
350
254
  if (!hadQuality) delete cfg.delivery.quality;
351
255
  if (!hadDelivery) delete cfg.delivery;
352
256
  }
@@ -358,31 +262,17 @@ export function ensureQualityConfigDefaults(ctx) {
358
262
  };
359
263
  }
360
264
 
361
- /**
362
- * Repo-root-relative path of the retired committed per-Epic snapshot tree.
363
- * Module-private: exporting it would add a production-dead row to the
364
- * dead-exports ratchet for a two-word constant.
365
- */
265
+ /** Private: exporting it would add a dead-exports row. */
366
266
  const LEGACY_EPIC_BASELINES_RELPATH = 'baselines/epic';
367
267
 
368
268
  /**
369
- * Step 5 — Prune a committed pre-v2 `baselines/epic/` tree (Story #5007).
370
- *
371
- * Story #1396 committed per-Epic ratchet snapshots under
372
- * `baselines/epic/<id>/`. The v2 Story-only model retired epics along with
373
- * every reader of those snapshots, and `check-baselines.js` resolves
374
- * baselines by fixed filename rather than by directory glob — so the tree is
375
- * inert, and the only remaining value in the retired layout migration was
376
- * getting it out of version control.
377
- *
378
- * `git rm -r --ignore-unmatch` stages the removal when the path is tracked
379
- * and is a safe no-op when it is not (fresh clone / untracked leftovers);
380
- * the on-disk residue is then removed so a re-run reports `absent`. The
381
- * caller commits the resulting working-tree delta.
269
+ * Remove the inert per-Epic snapshot tree no reader consults. `git rm
270
+ * --ignore-unmatch` stages it when tracked and no-ops otherwise; the caller
271
+ * commits the delta.
382
272
  *
383
273
  * @param {object} ctx
384
274
  * @param {string} ctx.projectRoot
385
- * @param {typeof defaultSpawnSync} [ctx.spawnImpl] — injectable spawn seam.
275
+ * @param {typeof defaultSpawnSync} [ctx.spawnImpl]
386
276
  * @returns {{ action: 'absent'|'pruned', path: string, gitStatus?: number|null }}
387
277
  */
388
278
  export function pruneLegacyEpicBaselines(ctx) {
@@ -411,10 +301,6 @@ export function pruneLegacyEpicBaselines(ctx) {
411
301
  }
412
302
 
413
303
  /**
414
- * Run all six steps in order. Composable wrapper used by the bootstrap
415
- * and update workflows. Each step's outcome is returned under its own key
416
- * so callers can render a per-action summary.
417
- *
418
304
  * @param {object} ctx
419
305
  * @param {string} ctx.projectRoot
420
306
  * @param {string} [ctx.frameworkRoot]
@@ -1,11 +1,4 @@
1
- /**
2
- * bootstrap/summary — Bootstrap result formatting + summary printing
3
- *
4
- * Pure formatting helpers (`format*Summary`) and the `printSummary`
5
- * presenter extracted from `agents-bootstrap-github.js` (Story #3349).
6
- * These render the `runBootstrap` result envelope into operator-facing
7
- * lines; they hold no provider coupling and no orchestration logic.
8
- */
1
+ /** Renders the `runBootstrap` result envelope into operator-facing lines. */
9
2
 
10
3
  import { Logger } from '../Logger.js';
11
4