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,26 +1,8 @@
1
1
  /**
2
- * bootstrap/commit-push — end-of-bootstrap "commit + push the wiring" offer
3
- * (Story #3899, Finding A.6).
4
- *
5
- * After a successful bootstrap the consumer's working tree carries the
6
- * framework wiring (`.agents/` tree, `.agentrc.json`, `CLAUDE.md`,
7
- * `.claude/settings.json`, `.gitignore`, `package.json`, `.husky/`). Nothing
8
- * told the operator to commit and push it — yet Story delivery runs in git
9
- * worktrees that check out **tracked files only**, so an uncommitted
10
- * `.agents/` means no scripts exist inside any worktree and every Story
11
- * sub-agent breaks. This module offers that commit + push at the end of the
12
- * run, and prints the exact manual commands when the offer is declined or the
13
- * run is non-interactive.
14
- *
15
- * Security: the stage step uses an explicit **allowlist** of bootstrap-written
16
- * paths (`git add -- <path>`), never `git add -A`, and explicitly refuses to
17
- * stage known secret files (`.env`, `.mcp.json`, `.agentrc.local.json`). This
18
- * keeps the commit safe regardless of whether the secret-safe `.gitignore`
19
- * Story (#3894) has landed — secrets are never staged even when un-ignored.
20
- *
21
- * Every git-touching helper takes an injectable `runGit` seam so the logic is
22
- * unit-testable without spawning a real `git`. The seam contract mirrors
23
- * `bootstrap.js#runGit`: `({ ok, status, stdout, stderr })`.
2
+ * End-of-bootstrap offer to commit and push the wiring: worktrees check out
3
+ * tracked files only, so an uncommitted `.agents/` breaks every Story. Stages
4
+ * an explicit allowlist (never `git add -A`) and refuses secret files even
5
+ * when they are not gitignored.
24
6
  *
25
7
  * @module bootstrap/commit-push
26
8
  */
@@ -29,11 +11,8 @@ import fs from 'node:fs';
29
11
  import path from 'node:path';
30
12
 
31
13
  /**
32
- * The bootstrap-written, version-controllable paths the commit offer stages.
33
- * Project-root-relative POSIX paths. Mirrors the file targets the bootstrap
34
- * pipeline writes (see `manifest.js` + `project-bootstrap.js`) plus the
35
- * materialized `.agents/` tree and `.husky/` quality hook. `.claude/commands/`
36
- * is intentionally absent — it is generated and gitignored.
14
+ * Mirrors what the bootstrap writes; `.claude/commands/` is generated and
15
+ * gitignored, so it is absent.
37
16
  *
38
17
  * @type {readonly string[]}
39
18
  */
@@ -49,10 +28,7 @@ export const BOOTSTRAP_COMMIT_PATHS = Object.freeze([
49
28
  ]);
50
29
 
51
30
  /**
52
- * Paths that MUST NEVER be staged by the commit offer, even when they are not
53
- * (yet) gitignored. These carry secrets or per-operator local overrides. This
54
- * is the defense-in-depth that lets the offer run safely before the
55
- * secret-safe `.gitignore` Story (#3894) lands.
31
+ * Secrets and per-operator overrides: never staged, even when not gitignored.
56
32
  *
57
33
  * @type {ReadonlySet<string>}
58
34
  */
@@ -67,21 +43,14 @@ export const NEVER_STAGE_PATHS = Object.freeze(
67
43
  );
68
44
 
69
45
  /**
70
- * The conventional commit subject the offer uses for the wiring commit.
71
- *
72
46
  * @type {string}
73
47
  */
74
48
  export const COMMIT_SUBJECT = 'chore: wire up Mandrel agent framework';
75
49
 
76
50
  /**
77
- * Resolve the subset of {@link BOOTSTRAP_COMMIT_PATHS} that actually exist on
78
- * disk and are not in {@link NEVER_STAGE_PATHS}. Pure (filesystem read only):
79
- * the secret-exclusion is applied here so a never-stage path is dropped before
80
- * it ever reaches `git add`.
81
- *
82
51
  * @param {string} projectRoot
83
52
  * @param {typeof fs} [fsImpl]
84
- * @returns {string[]} project-root-relative paths safe to stage
53
+ * @returns {string[]} existing, secret-free paths safe to stage
85
54
  */
86
55
  export function resolveStagePaths(projectRoot, fsImpl = fs) {
87
56
  return BOOTSTRAP_COMMIT_PATHS.filter((rel) => {
@@ -91,16 +60,13 @@ export function resolveStagePaths(projectRoot, fsImpl = fs) {
91
60
  }
92
61
 
93
62
  /**
94
- * Build the exact manual commands the operator should run to commit and push
95
- * the wiring themselves. Printed when the offer is declined or the run is
96
- * non-interactive (`--assume-yes`). The `git add` line stages the resolved
97
- * allowlist only — never `git add -A` — so copy-pasting it cannot stage a
98
- * secret file.
63
+ * Manual commands for a declined or non-interactive offer; the `git add` line
64
+ * names the allowlist so copy-pasting it cannot stage a secret.
99
65
  *
100
66
  * @param {object} args
101
- * @param {string[]} args.stagePaths — resolved, secret-free paths to stage.
67
+ * @param {string[]} args.stagePaths
102
68
  * @param {string} args.baseBranch
103
- * @returns {string} a multi-line, copy-pasteable command block
69
+ * @returns {string}
104
70
  */
105
71
  export function buildManualInstructions({ stagePaths, baseBranch }) {
106
72
  const addArgs = stagePaths.length > 0 ? stagePaths.join(' ') : '.';
@@ -118,10 +84,6 @@ export function buildManualInstructions({ stagePaths, baseBranch }) {
118
84
  }
119
85
 
120
86
  /**
121
- * Stage the resolved allowlist via `git add -- <paths>`. No-op (returns
122
- * `{ ok: true, staged: [] }`) when nothing resolves. Returns the git result on
123
- * failure so the caller can surface it.
124
- *
125
87
  * @param {object} args
126
88
  * @param {string} args.projectRoot
127
89
  * @param {(args: string[], cwd: string) => { ok: boolean, status?: number,
@@ -1,13 +1,4 @@
1
- /**
2
- * bootstrap/gh-preflight — `gh` CLI + runtime-dependency preflight
3
- *
4
- * Provider-agnostic preflight helpers extracted from
5
- * `agents-bootstrap-github.js` (Story #3349). Holds the version-comparison
6
- * arithmetic (`parseGhVersion` / `compareSemver`), the `gh` CLI probe
7
- * (`preflightGh`), and the runtime-dependency probe (`preflightRuntimeDeps`).
8
- * Keeping these free of any provider coupling lets the bootstrap orchestrator
9
- * stay focused on sequencing.
10
- */
1
+ /** Provider-agnostic `gh` CLI and runtime-dependency preflight. */
11
2
 
12
3
  import { spawnSync } from 'node:child_process';
13
4
  import {
@@ -17,12 +8,7 @@ import {
17
8
  MissingRuntimeDepsError,
18
9
  } from '../errors/index.js';
19
10
 
20
- /**
21
- * Minimum `gh` version the bootstrap supports. Set conservatively per
22
- * Tech Spec #1350 ("Risks & Mitigations → `gh` version skew"): older
23
- * releases miss flags the eventual `gh-exec` shim relies on. Bumping this
24
- * is a deliberate, operator-visible change — keep it tracked here.
25
- */
11
+ /** Older releases miss flags the `gh` shim relies on; bumping is operator-visible. */
26
12
  export const MIN_GH_VERSION = '2.40.0';
27
13
 
28
14
  const GH_INSTALL_HINT =
@@ -34,34 +20,20 @@ const GH_PROJECT_SCOPE_NOTE =
34
20
  const GH_SCOPES_UNREADABLE_NOTE =
35
21
  'token scopes not reported by `gh auth status` (fine-grained PAT?) — skipping the classic project-scope assertion. If Projects V2 provisioning later fails, grant the Projects permission (fine-grained) or run `gh auth refresh -s project` (classic).';
36
22
 
37
- /**
38
- * Framework runtime deps the consumer must have installed in
39
- * `node_modules/` before this script reaches the dynamic
40
- * `config-resolver` import. `ajv` is the sentinel — if it cannot
41
- * resolve, the framework runtime dependencies are not installed.
42
- */
23
+ /** `ajv` is the sentinel for installed framework runtime deps. */
43
24
  const REQUIRED_RUNTIME_DEPS = Object.freeze(['ajv']);
44
25
 
45
26
  const RUNTIME_DEPS_HINT =
46
27
  'Run `mandrel init` (for a fresh project) or `npm install mandrel` (for an existing one) to install the framework runtime dependencies, then re-run this command.';
47
28
 
48
29
  /**
49
- * Default runner: synchronously execs `gh <args>` and returns
50
- * `{ status, stdout, stderr, error }`. Extracted so the preflight tests
51
- * can inject a stub without spawning a real child process. Forerunner of
52
- * the `lib/gh-exec.js` shim described in Tech Spec #1350; once that
53
- * lands, this helper deletes and the preflight calls `gh.exec(...)`.
30
+ * Raw `spawnSync`, not the `gh-exec` facade: these probes decide whether the
31
+ * facade (which assumes an authenticated `gh`) is usable at all.
54
32
  *
55
33
  * @param {string[]} args
56
34
  * @returns {{ status: number|null, stdout: string, stderr: string,
57
35
  * error?: NodeJS.ErrnoException }}
58
36
  */
59
- // Story #2990: this preflight runner intentionally stays on raw
60
- // `spawnSync('gh', …)` (not the `lib/gh-exec.js` facade) because it
61
- // runs *before* auth is resolved — `gh --version` and `gh auth status`
62
- // are the very probes that decide whether the facade can be used at
63
- // all. Routing through the provider layer would create a circular
64
- // dependency: the facade assumes a working, authenticated `gh`.
65
37
  function defaultGhRunner(args) {
66
38
  const result = spawnSync('gh', args, { encoding: 'utf8' });
67
39
  return {
@@ -73,10 +45,6 @@ function defaultGhRunner(args) {
73
45
  }
74
46
 
75
47
  /**
76
- * Parse the first `MAJOR.MINOR.PATCH` triple out of `gh --version` stdout.
77
- * Returns `null` when the shape is unrecognized so callers can decide
78
- * whether to surface an error or proceed.
79
- *
80
48
  * @param {string} stdout
81
49
  * @returns {string|null}
82
50
  */
@@ -86,9 +54,7 @@ export function parseGhVersion(stdout) {
86
54
  }
87
55
 
88
56
  /**
89
- * Numeric comparison of two `MAJOR.MINOR.PATCH` strings.
90
- * Returns negative if `a < b`, positive if `a > b`, zero if equal.
91
- * Missing segments are treated as `0`. Non-numeric segments compare as 0.
57
+ * Missing or non-numeric segments compare as 0.
92
58
  *
93
59
  * @param {string} a
94
60
  * @param {string} b
@@ -109,23 +75,7 @@ export function compareSemver(a, b) {
109
75
  }
110
76
 
111
77
  /**
112
- * Preflight the `gh` CLI before any provider call. Three failure modes,
113
- * each surfaced as a typed error so callers (CLI `main`, future
114
- * orchestrators, tests) can `instanceof`-match without parsing strings:
115
- *
116
- * - {@link GhNotInstalledError} — `gh` not on PATH (ENOENT) or the
117
- * `--version` invocation reported a non-zero exit suggesting the
118
- * binary is missing/broken.
119
- * - {@link GhVersionError} — `gh` is present but older than
120
- * {@link MIN_GH_VERSION}; carries `{ found, required }` for the
121
- * CLI to render an upgrade hint.
122
- * - {@link GhAuthError} — `gh auth status` exited non-zero, meaning
123
- * no host is logged in.
124
- *
125
- * On success returns `{ version }` so the caller can log the resolved
126
- * version. The `runner` seam defaults to a real `spawnSync('gh', …)`;
127
- * tests inject a stub returning the canonical
128
- * `{ status, stdout, stderr, error }` shape.
78
+ * Throws a typed `GhNotInstalledError`, `GhVersionError` or `GhAuthError`.
129
79
  *
130
80
  * @param {{ runner?: (args: string[]) => {
131
81
  * status: number|null, stdout: string, stderr: string,
@@ -142,9 +92,7 @@ export async function preflightGh(opts = {}) {
142
92
  }
143
93
 
144
94
  /**
145
- * Resolve the installed `gh` version via `gh --version`, throwing
146
- * {@link GhNotInstalledError} for every "not installed correctly" shape
147
- * (ENOENT, non-zero exit, unparseable output).
95
+ * Every "not installed correctly" shape throws {@link GhNotInstalledError}.
148
96
  *
149
97
  * @param {(args: string[]) => object} runner
150
98
  * @returns {string}
@@ -157,8 +105,6 @@ function resolveGhVersion(runner) {
157
105
  );
158
106
  }
159
107
  if (versionResult.status !== 0) {
160
- // Non-ENOENT failure of `gh --version` is treated as "not installed
161
- // correctly" — same remediation, same exit semantics.
162
108
  const stderrSnippet = (versionResult.stderr || '').trim().slice(0, 200);
163
109
  throw new GhNotInstalledError(
164
110
  `gh --version failed (exit ${versionResult.status}): ${stderrSnippet}. ${GH_INSTALL_HINT}`,
@@ -174,9 +120,6 @@ function resolveGhVersion(runner) {
174
120
  }
175
121
 
176
122
  /**
177
- * Enforce the {@link MIN_GH_VERSION} floor, throwing {@link GhVersionError}
178
- * with `{ found, required }` when the installed version is older.
179
- *
180
123
  * @param {string} version
181
124
  */
182
125
  function assertGhVersionFloor(version) {
@@ -189,16 +132,12 @@ function assertGhVersionFloor(version) {
189
132
  }
190
133
 
191
134
  /**
192
- * Assert `gh auth status` reports a logged-in host, throwing
193
- * {@link GhAuthError} (or {@link GhNotInstalledError} on a PATH race).
194
- *
195
135
  * @param {(args: string[]) => object} runner
196
136
  */
197
137
  function assertGhAuth(runner) {
198
138
  const authResult = runner(['auth', 'status']);
199
139
  if (authResult.error?.code === 'ENOENT') {
200
- // Defensive — `gh --version` already passed, so ENOENT here would be a
201
- // PATH race. Treat the same as not-installed.
140
+ // PATH race after `--version` passed.
202
141
  throw new GhNotInstalledError(
203
142
  `gh CLI disappeared between version and auth check. ${GH_INSTALL_HINT}`,
204
143
  );
@@ -211,23 +150,9 @@ function assertGhAuth(runner) {
211
150
  }
212
151
 
213
152
  /**
214
- * Check that the authenticated `gh` token carries the `project` scope, which
215
- * the bootstrap needs to read and modify GitHub Projects V2. Parses the
216
- * `Token scopes:` line from `gh auth status` (some gh versions print it to
217
- * stderr, others to stdout — we scan both) and looks for a `project` scope.
218
- *
219
- * Returns a check record `{ name, ok, remedy?, detail? }` rather than
220
- * throwing, so the preflight aggregator can surface it alongside the other
221
- * checks. An unreadable scopes line — the normal case for fine-grained PATs
222
- * and for `gh` builds that omit it — PASSES with a warning `detail` (Story
223
- * #3690). A present-but-`project`-less scopes line — the normal case for a
224
- * vanilla `gh auth login` token — also PASSES with a warning `detail`
225
- * (Story #3893, Finding A.5): the bootstrap's runtime `resolveProject`
226
- * already degrades to warn-and-skip-board for exactly this condition, so
227
- * failing the preflight closed was stricter than the code it guards and
228
- * created a guaranteed first-run → browser → re-run loop. The check never
229
- * fails the gate on the project scope; the warning `detail` carries the
230
- * `gh auth refresh -s project` remediation for operators who want boards.
153
+ * Check the token's `project` scope (the `Token scopes:` line may be on
154
+ * stdout or stderr). Never fails: an unreadable or `project`-less line passes
155
+ * with a warning `detail`, matching `resolveProject`'s skip-the-board path.
231
156
  *
232
157
  * @param {{ runner?: (args: string[]) => {
233
158
  * status: number|null, stdout: string, stderr: string,
@@ -244,9 +169,6 @@ export async function checkProjectScopes(opts = {}) {
244
169
  }
245
170
 
246
171
  /**
247
- * Map a (possibly absent) `Token scopes:` match onto the check record.
248
- * Pure — exported only through {@link checkProjectScopes}.
249
- *
250
172
  * @param {RegExpExecArray|null} scopeLine
251
173
  * @returns {{ name: string, ok: boolean, remedy?: string, detail?: string }}
252
174
  */
@@ -269,17 +191,8 @@ function classifyProjectScopes(scopeLine) {
269
191
  }
270
192
 
271
193
  /**
272
- * Preflight the framework's runtime dependencies before dynamic-importing
273
- * `config-resolver.js` (which transitively pulls in `ajv` via
274
- * `config-settings-schema.js`). A consumer who has not installed the
275
- * framework runtime deps will not have `ajv` available, and the raw
276
- * `ERR_MODULE_NOT_FOUND` from the dynamic import is opaque. This
277
- * preflight converts that into a {@link MissingRuntimeDepsError} that
278
- * names the missing packages and points the operator at the correct
279
- * remediation (`mandrel init` / `npm install mandrel`).
280
- *
281
- * The `resolver` seam lets tests inject a stub without touching the real
282
- * module graph; production uses `import.meta.resolve(specifier)`.
194
+ * Turn the opaque `ERR_MODULE_NOT_FOUND` of the later `config-resolver`
195
+ * import into a {@link MissingRuntimeDepsError} naming the remedy.
283
196
  *
284
197
  * @param {{ resolver?: (specifier: string) => string | Promise<string> }} [opts]
285
198
  * @returns {Promise<void>}
@@ -1,26 +1,8 @@
1
1
  /**
2
- * bootstrap/hitl-confirm — Epic #1235 Story 5; consent-first opt-in (#3526)
3
- *
4
- * Renders a structured diff to stdout and prompts the operator y/N when
5
- * stdout is a TTY. When not a TTY (CI, sub-agent, redirected pipe), the
6
- * gate returns `false` and logs the canonical abort message to stderr —
7
- * silent-apply is a non-feature. The `opts.assume` override lets tests
8
- * and automation pin the answer deterministically:
9
- *
10
- * - `opts.assume === 'yes'` → returns true, skips the prompt entirely.
11
- * - `opts.assume === 'no'` → returns false, skips the prompt.
12
- *
13
- * The default render is intentionally simple: a single-line summary
14
- * followed by a JSON dump of `{ current, proposed }`. Callers that want
15
- * a richer view (per-field colour, contextual unified diff) can wrap
16
- * `confirm` and render their own preamble before calling.
17
- *
18
- * Consent-first install (Story #3526): the GitHub-admin phase group — the
19
- * irreversible remote mutations (labels, Projects V2, branch protection,
20
- * merge methods) — is gated by an explicit opt-in, not merely a TTY. A
21
- * non-TTY run that has not opted in records every group as declined, so the
22
- * abort hint names BOTH the dedicated `--approve-github-admin` flag (consent
23
- * to just the remote mutations) and `--assume-yes` (accept every group).
2
+ * y/N confirm of a `{ current, proposed }` diff. Without a TTY it returns
3
+ * `false` and logs the abort hint — never a silent apply. `opts.assume` pins
4
+ * the answer. Irreversible GitHub-admin mutations need an explicit opt-in,
5
+ * so the hint names both `--approve-github-admin` and `--assume-yes`.
24
6
  */
25
7
 
26
8
  import { createInterface } from 'node:readline';
@@ -39,9 +21,7 @@ const ABORT_MESSAGE =
39
21
  * stdout?: NodeJS.WritableStream,
40
22
  * stderr?: NodeJS.WritableStream,
41
23
  * isTTY?: boolean,
42
- * }} [opts] - Overrides for tests / automation. `isTTY` defaults to
43
- * `process.stdout.isTTY`. `stdin`/`stdout`/`stderr` default to the
44
- * respective `process.*` streams.
24
+ * }} [opts]
45
25
  * @returns {Promise<boolean>} - true ⇒ apply, false ⇒ abort.
46
26
  */
47
27
  export async function confirm({ summary, current, proposed }, opts = {}) {
@@ -58,9 +38,6 @@ export async function confirm({ summary, current, proposed }, opts = {}) {
58
38
  return false;
59
39
  }
60
40
 
61
- // Render the diff. Single-line summary, then a JSON block so the
62
- // operator can pipe the prompt to a logger and still recover the
63
- // structured shape.
64
41
  stdout.write(`\nHITL confirm: ${summary}\n`);
65
42
  stdout.write(
66
43
  ` current: ${JSON.stringify(current ?? null, null, 2)
@@ -84,6 +61,4 @@ export async function confirm({ summary, current, proposed }, opts = {}) {
84
61
  }
85
62
  }
86
63
 
87
- // Re-export the abort message so tests can assert against the single
88
- // source of truth.
89
64
  export { ABORT_MESSAGE };
@@ -1,21 +1,7 @@
1
1
  /**
2
- * bootstrap/install-ledger — durable record of what an install applied, for
3
- * a future `mandrel uninstall` to consume (Story #3524, Feature #3515,
4
- * Epic #3438).
5
- *
6
- * A successful bootstrap run writes a ledger to
7
- * `<projectRoot>/.agents/.install-manifest.json` enumerating exactly the
8
- * mutation-manifest entries that were APPROVED and applied (the approved
9
- * subset of `buildMutationManifest`, never the full manifest). The ledger is
10
- * the single artifact `mandrel uninstall` will later read to know which
11
- * reversible mutations to undo and which irreversible (GitHub-admin) ones to
12
- * surface for manual rollback.
13
- *
14
- * The ledger is gitignored (`.agents/.install-manifest.json` is added to the
15
- * consumer `.gitignore` by the bootstrap) because it is a per-clone install
16
- * record, not a checked-in source artifact.
17
- *
18
- * This module performs filesystem writes but no network I/O.
2
+ * Per-clone (gitignored) record of the manifest entries an install actually
3
+ * applied — never the full manifest — which `mandrel uninstall` reads to undo
4
+ * reversible mutations and surface irreversible ones.
19
5
  *
20
6
  * @module bootstrap/install-ledger
21
7
  */
@@ -24,39 +10,24 @@ import fs from 'node:fs';
24
10
  import path from 'node:path';
25
11
 
26
12
  /**
27
- * Path of the install ledger, relative to the project root. The bootstrap's
28
- * `.gitignore` step keys its ignore entry off this exact POSIX path.
13
+ * The `.gitignore` step keys off this exact POSIX path.
29
14
  *
30
15
  * @type {string}
31
16
  */
32
17
  export const LEDGER_RELATIVE_PATH = '.agents/.install-manifest.json';
33
18
 
34
19
  /**
35
- * Current ledger schema version. A future `mandrel uninstall` reads this to
36
- * detect a ledger it cannot interpret (hard-cutover contract — no read-side
37
- * tolerance branch, just a clean refusal).
38
- *
39
- * v2 (Story #3895): each entry now carries `executedAction` — the *live*
40
- * outcome of the bootstrap phase that produced it (e.g. `seeded` vs
41
- * `already-present` for `.agentrc.json`). Uninstall keys destructive reversal
42
- * off this so a pre-existing, operator-authored file the install merely left
43
- * in place (`already-present`) is never deleted.
20
+ * Uninstall refuses a version it cannot interpret. Entries carry
21
+ * `executedAction` so an operator-authored file the install left in place
22
+ * (`already-present`) is never deleted.
44
23
  *
45
24
  * @type {number}
46
25
  */
47
26
  export const LEDGER_SCHEMA_VERSION = 2;
48
27
 
49
28
  /**
50
- * Map a mutation-manifest `target` (POSIX-relative path) to the bootstrap
51
- * **phase name** whose execution outcome describes that target. Only targets
52
- * whose reversal is destructive enough to need the live outcome are mapped;
53
- * everything else is reversed content-aware and needs no execution hint.
54
- *
55
- * The `.agentrc.json` `create` entry is produced by the `agentrc` phase
56
- * (`ensureAgentrc`), which returns `{ action: 'seeded' }` when it wrote the
57
- * file from the starter and `{ action: 'already-present' }` when an
58
- * operator-authored file was left untouched. Recording that distinction lets
59
- * uninstall skip deleting a file the install did not create (Story #3895).
29
+ * Target → the phase whose live outcome governs its reversal; only targets
30
+ * whose reversal is destructive are mapped.
60
31
  *
61
32
  * @type {Readonly<Record<string, string>>}
62
33
  */
@@ -65,16 +36,8 @@ const TARGET_TO_PHASE = Object.freeze({
65
36
  });
66
37
 
67
38
  /**
68
- * Resolve the live executed action for a manifest entry from the bootstrap
69
- * report, when one is available. Pure — derives entirely from the entry +
70
- * report. Returns `undefined` when the target has no mapped phase, the report
71
- * is absent, or the phase produced no `action` (so older callers/tests that
72
- * omit the report degrade to "no hint" rather than throwing).
73
- *
74
- * The `.agentrc.json` quality-gates `merge` entry shares the same target as
75
- * the repo-config `create` entry but is keyed by phase, not target — both
76
- * manifest entries resolve to the same `agentrc` outcome, which is correct:
77
- * reversal dedupes them to a single `revertAgentrc` call anyway.
39
+ * `undefined` means no hint. Both `.agentrc.json` entries resolve to the same
40
+ * `agentrc` outcome, which is correct: reversal dedupes them.
78
41
  *
79
42
  * @param {{ target: string }} entry
80
43
  * @param {Record<string, { action?: string }>} [report]
@@ -89,8 +52,6 @@ function resolveExecutedAction(entry, report) {
89
52
  }
90
53
 
91
54
  /**
92
- * Resolve the absolute ledger path for a project root.
93
- *
94
55
  * @param {string} projectRoot
95
56
  * @returns {string}
96
57
  */
@@ -99,24 +60,14 @@ export function ledgerPath(projectRoot) {
99
60
  }
100
61
 
101
62
  /**
102
- * Build the ledger record from the approved manifest entries. Pure helper —
103
- * no I/O — so the shape is unit-testable in isolation. The `appliedAt`
104
- * timestamp is injectable for deterministic tests.
105
- *
106
63
  * @param {object} args
107
64
  * @param {import('./manifest.js').MutationManifestEntry[]} args.entries
108
- * — the subset of the mutation manifest that was applied.
109
- * @param {string[]} args.approvedGroups — the phase groups whose mutations
110
- * landed (sorted for stable output). Field name predates Story #5007's
111
- * removal of the phased-approval gate; the ledger record shape is a
112
- * consumer contract read back by `mandrel uninstall`, so it is unchanged.
65
+ * — the applied subset.
66
+ * @param {string[]} args.approvedGroups — groups that landed. The name is a
67
+ * consumer contract read by `mandrel uninstall`; do not rename.
113
68
  * @param {{ owner?: string, repo?: string }} [args.answers]
114
- * @param {string} [args.appliedAt] — ISO-8601 timestamp (default: now).
115
- * @param {Record<string, { action?: string }>} [args.report] — the live
116
- * bootstrap execution report (phase name → outcome). When present, each
117
- * entry whose target maps to a phase records that phase's `action` as
118
- * `executedAction` so uninstall can distinguish `seeded` from
119
- * `already-present` (Story #3895).
69
+ * @param {string} [args.appliedAt] — ISO-8601 (default: now).
70
+ * @param {Record<string, { action?: string }>} [args.report] — phase → outcome.
120
71
  * @returns {{ schemaVersion: number, appliedAt: string,
121
72
  * repo: string|null, approvedGroups: string[],
122
73
  * entries: Array<import('./manifest.js').MutationManifestEntry
@@ -145,10 +96,7 @@ export function buildLedgerRecord(args) {
145
96
  }
146
97
 
147
98
  /**
148
- * Write the install ledger to `<projectRoot>/.agents/.install-manifest.json`,
149
- * creating the `.agents/` directory if needed. The file is overwritten on
150
- * each successful install so the ledger always reflects the most recent run
151
- * (a re-install with a different approval set replaces, never appends).
99
+ * Overwrites: the ledger always reflects the most recent install.
152
100
  *
153
101
  * @param {string} projectRoot
154
102
  * @param {ReturnType<typeof buildLedgerRecord>} record
@@ -162,10 +110,6 @@ export function writeInstallLedger(projectRoot, record) {
162
110
  }
163
111
 
164
112
  /**
165
- * Read and parse the install ledger. Returns `null` when no ledger exists
166
- * (never installed, or the ledger was removed). A future `mandrel uninstall`
167
- * is the primary consumer.
168
- *
169
113
  * @param {string} projectRoot
170
114
  * @returns {ReturnType<typeof buildLedgerRecord>|null}
171
115
  */