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