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,47 +1,8 @@
1
1
  /**
2
- * bootstrap/issue-forms-template — Story #4227 (framework-gap)
3
- *
4
- * Generates the GitHub **Story Issue Form**
5
- * (`.github/ISSUE_TEMPLATE/story.yml`) derived from the canonical Story-body SSOT
6
- * (`lib/story-body/story-body.js`). The forms exist so a human filing a
7
- * Story in the GitHub web UI produces a body that round-trips through
8
- * the same `story-body.parse()` agents rely on — closing the
9
- * human↔agent ticket-shape gap.
10
- *
11
- * ## Why generated, not hand-authored
12
- *
13
- * Hand-authoring the forms would let the field headings drift from what
14
- * `parse()` expects. Instead the form field set is derived from a single
15
- * `HUMAN_INTENT_FIELDS` table here, and each field's heading is the exact
16
- * section name the parser maps (`goal` → `## Goal`, etc.). The CI
17
- * conformance lint (`lint-issue-body.js`) runs the real `parse()` against
18
- * human-opened issues so the form and the parser cannot silently drift.
19
- *
20
- * ## Form fields ⊆ body schema
21
- *
22
- * The forms expose only the human **intent subset** — `goal`, `changes`,
23
- * `acceptance`, `verify`, `references`. Machine-managed sections (the
24
- * `<!-- meta: … -->` block, the frozen dispatch manifest, `agent::*`
25
- * transitions) are deliberately absent; the runtime fills those. The
26
- * relationship is "form fields ⊆ body schema," not "form == body."
27
- *
28
- * ## GitHub serialization contract (the lossy seam)
29
- *
30
- * GitHub Issue Forms render every `textarea`/`input` field as:
31
- *
32
- * ```text
33
- * ### {label}
34
- *
35
- * {value}
36
- * ```
37
- *
38
- * i.e. the field label becomes a level-3 heading (`###`), not the level-2
39
- * (`##`) the canonical serializer emits. `story-body.parse()` accepts both
40
- * heading levels (Story #4227 widened its heading regex), so a body
41
- * assembled from form output round-trips. This is the single point where
42
- * the form shape and the canonical serializer differ, and it is covered by
43
- * the round-trip test that feeds simulated GitHub output back through
44
- * `parse()`.
2
+ * Generates the Story Issue Form from the Story-body SSOT so a human-filed
3
+ * body round-trips through `story-body.parse()`. Fields are only the human
4
+ * intent subset; the runtime fills machine-managed sections. GitHub renders
5
+ * labels as `###` headings, not `##` — `parse()` accepts both levels.
45
6
  *
46
7
  * @module bootstrap/issue-forms-template
47
8
  */
@@ -49,29 +10,13 @@
49
10
  import fs from 'node:fs';
50
11
  import path from 'node:path';
51
12
 
52
- /**
53
- * Directory (relative to a project root) GitHub reads issue forms from.
54
- * Internal — the per-form path constants below are the exported surface.
55
- */
56
13
  const ISSUE_TEMPLATE_RELATIVE_DIR = '.github/ISSUE_TEMPLATE';
57
14
 
58
- /**
59
- * Relative path of the generated Story form, surfaced as a constant so tests
60
- * and the bootstrap caller assert the canonical write target without
61
- * re-deriving it.
62
- */
63
15
  export const STORY_FORM_RELATIVE_PATH = `${ISSUE_TEMPLATE_RELATIVE_DIR}/story.yml`;
64
16
 
65
17
  /**
66
- * The human **intent subset** of the Story-body schema, in canonical
67
- * `parse()` section order. Each entry drives one form field. `heading` is
68
- * the exact section name `story-body.parse()` maps (case-insensitive); the
69
- * generated YAML uses it verbatim as the field `label` so GitHub's
70
- * `### {label}` render produces a heading the parser recognises.
71
- *
72
- * Machine-managed body fields (`wide`, `reason_to_exist`, `depends_on`
73
- * meta) are intentionally absent — the runtime fills those. `depends_on` is exposed as a free-text input
74
- * that serializes to the `blocked by #N` footer `parse()` already reads.
18
+ * Intent fields in `parse()` section order. `heading` must be the exact
19
+ * section name `parse()` maps, since GitHub renders the label as the heading.
75
20
  *
76
21
  * @type {Array<{
77
22
  * id: string,
@@ -143,11 +88,7 @@ export const HUMAN_INTENT_FIELDS = [
143
88
  ];
144
89
 
145
90
  /**
146
- * Escape a string for safe embedding inside a double-quoted YAML scalar.
147
- * The generated YAML only ever quotes single-line scalars (labels,
148
- * descriptions, placeholders), so we escape backslashes, double quotes,
149
- * and collapse embedded newlines into the literal `\n` placeholder GitHub
150
- * renders verbatim in the form preview.
91
+ * Double-quoted single-line YAML scalar; newlines become literal `\n`.
151
92
  *
152
93
  * @param {string} value
153
94
  * @returns {string}
@@ -161,10 +102,6 @@ function yamlQuote(value) {
161
102
  }
162
103
 
163
104
  /**
164
- * Render a single Issue-Form field block (a `textarea` or `input`) from a
165
- * {@link HUMAN_INTENT_FIELDS} descriptor. Indented to sit under the
166
- * top-level `body:` sequence.
167
- *
168
105
  * @param {(typeof HUMAN_INTENT_FIELDS)[number]} field
169
106
  * @returns {string}
170
107
  */
@@ -182,10 +119,7 @@ function renderFieldBlock(field) {
182
119
  }
183
120
 
184
121
  /**
185
- * Render the shared `depends_on` input. Its value serializes (by the
186
- * conformance lint / body assembler) into the `blocked by #N` footer lines
187
- * `parse()` already extracts, so it stays out of the heading-mapped field
188
- * set above.
122
+ * `depends_on` serializes to `blocked by` footer lines, not a heading.
189
123
  *
190
124
  * @returns {string}
191
125
  */
@@ -204,17 +138,11 @@ function renderDependsOnBlock() {
204
138
 
205
139
  /**
206
140
  * @typedef {object} IssueFormOptions
207
- * @property {string} [entryStateLabel='agent::review-spec'] - Lifecycle
208
- * entry-state label auto-applied alongside the `type::*` label so
209
- * human-filed tickets land in the same lane as agent-created ones.
210
- * @property {string} [projectName] - Optional repo/project name woven into
211
- * the form description. Purely cosmetic.
141
+ * @property {string} [entryStateLabel='agent::review-spec'] - Puts human-filed
142
+ * tickets in the same lane as agent-created ones.
143
+ * @property {string} [projectName] - Cosmetic.
212
144
  */
213
145
 
214
- /**
215
- * Shared header banner stamped on every generated form so the provenance
216
- * (and the "regenerate, don't hand-edit" rule) travels with the file.
217
- */
218
146
  const GENERATED_BANNER =
219
147
  '# Generated by agents-bootstrap-github (Story #4227) from the Story-body SSOT\n' +
220
148
  '# (.agents/scripts/lib/story-body/story-body.js). Do NOT hand-edit the\n' +
@@ -223,12 +151,7 @@ const GENERATED_BANNER =
223
151
  '# (lint-issue-body.js) is the drift guard between this form and the parser.';
224
152
 
225
153
  /**
226
- * Render the GitHub Issue Form YAML for Stories. Epics are no longer a
227
- * ticket type in the label taxonomy, so the generated human-entry surface
228
- * is story-only.
229
- *
230
- * The output is deterministic so the round-trip + idempotency tests assert
231
- * on its exact shape.
154
+ * Deterministic Story form YAML.
232
155
  *
233
156
  * @param {'story'} ticketType
234
157
  * @param {IssueFormOptions} [opts]
@@ -268,12 +191,7 @@ ${renderDependsOnBlock()}
268
191
  }
269
192
 
270
193
  /**
271
- * Assemble a canonical Story-body markdown string from the per-field values
272
- * a GitHub Issue Form yields (keyed by field `id`). This is the inverse of
273
- * the form: it reconstructs what GitHub *would* serialize, using the
274
- * canonical `## {Heading}` form so the result feeds straight into
275
- * `story-body.parse()`. The conformance lint and the round-trip test use it
276
- * to prove the form → parser contract without a live GitHub call.
194
+ * Inverse of the form: canonical `## {Heading}` body from field values.
277
195
  *
278
196
  * @param {Record<string, string>} values - Field id → raw textarea/input value.
279
197
  * @returns {string} Canonical markdown body.
@@ -302,21 +220,11 @@ export function assembleBodyFromFormValues(values = {}) {
302
220
  return body;
303
221
  }
304
222
 
305
- /**
306
- * Relative path of the issue-body conformance workflow — the drift guard
307
- * that runs `story-body.parse()` against human-opened tickets.
308
- */
223
+ /** The drift guard between the form and `story-body.parse()`. */
309
224
  export const CONFORMANCE_WORKFLOW_RELATIVE_PATH =
310
225
  '.github/workflows/issue-body-conformance.yml';
311
226
 
312
227
  /**
313
- * Render the CI workflow that runs the issue-body conformance lint
314
- * (`lint-issue-body.js`) on opened/edited `type::story` issues. This is
315
- * the mechanism that prevents the generated form and
316
- * `story-body.parse()` from silently drifting (Story #4227 acceptance).
317
- * Deterministic so the bootstrap test asserts its exact shape. Internal —
318
- * exposed to consumers only through {@link ensureIssueForms}.
319
- *
320
228
  * @returns {string}
321
229
  */
322
230
  function renderConformanceWorkflow() {
@@ -364,22 +272,13 @@ jobs:
364
272
  }
365
273
 
366
274
  /**
367
- * Write (or refresh) the Story issue form into a project checkout. Idempotent at
368
- * the byte level:
369
- *
370
- * - file absent → `created`
371
- * - byte-identical → `unchanged`
372
- * - operator-edited (differs from the rendered template) → `custom-skip`
373
- * (the existing file is preserved; `rendered` is returned so the caller
374
- * can offer a diff)
375
- *
376
- * Network-free; safe under tests with a tmp `projectRoot`.
275
+ * Write the form and its conformance workflow; an operator-edited file is
276
+ * preserved (`custom-skip`).
377
277
  *
378
278
  * @param {object} args
379
279
  * @param {string} args.projectRoot
380
280
  * @param {IssueFormOptions} [args.options]
381
- * @param {boolean} [args.write=true] - When `false`, compute the would-be
382
- * actions without touching disk (dry-run).
281
+ * @param {boolean} [args.write=true] - `false` is a dry run.
383
282
  * @returns {{ forms: Array<{ type: 'story'|'conformance-workflow',
384
283
  * action: 'created'|'unchanged'|'custom-skip',
385
284
  * path: string, rendered: string }> }}
@@ -389,9 +288,6 @@ export function ensureIssueForms(args) {
389
288
  const options = args.options ?? {};
390
289
  const write = args.write !== false;
391
290
 
392
- // Each target pairs a type key with the rendered body. The conformance
393
- // workflow is materialized alongside the form because it is the form's
394
- // drift guard — they ship as one unit.
395
291
  const targets = [
396
292
  {
397
293
  type: 'story',
@@ -1,33 +1,7 @@
1
1
  /**
2
- * bootstrap/manifest — single mutation-manifest source for the install
3
- * ledger (Story #3521, Feature #3515, Epic #3438).
4
- *
5
- * `buildMutationManifest(ctx)` enumerates every mutation the bootstrap
6
- * pipeline can perform as a flat, declarative array. Each entry carries five
7
- * fields:
8
- *
9
- * - `phaseGroup` — one of the four groups (`ide-wiring`, `repo-config`,
10
- * `github-admin`, `quality-gates`).
11
- * - `target` — the file path or remote resource the mutation touches.
12
- * - `action` — the verb describing the mutation (`create`, `merge`,
13
- * `update`, `run`, `configure`).
14
- * - `detail` — a one-line operator-facing description of the change.
15
- * - `reversible` — whether the operator can trivially undo the change
16
- * (e.g. delete a created file) vs. a remote-admin mutation that is not
17
- * a simple local revert.
18
- *
19
- * Story #3690 replaced the consent-first phased-approval install screen with
20
- * a plain summary+confirm loop, and Story #5007 removed the vestigial
21
- * machinery it left behind (the no-write `previewMutationManifest` renderer
22
- * and the `approvedGroups` set-threading). What survives is load-bearing:
23
- * `recordLedger` filters these entries into the install ledger, and
24
- * `mandrel uninstall` walks them — the `phaseGroup` string is the ledger's
25
- * grouping key, not an approval gate.
26
- *
27
- * The manifest describes *intended* mutations deterministically from the
28
- * project root; it does not read or mutate any file. Whether a given
29
- * mutation is a no-op on a particular clone (the file already carries the
30
- * wiring) is decided at execution time by the idempotent `ensure*` steps.
2
+ * Declarative manifest of every mutation bootstrap can perform, filtered into
3
+ * the install ledger and walked by `mandrel uninstall`. Describes intent only;
4
+ * whether a mutation is a no-op is decided by the idempotent `ensure*` steps.
31
5
  *
32
6
  * @module bootstrap/manifest
33
7
  */
@@ -35,9 +9,7 @@
35
9
  import path from 'node:path';
36
10
 
37
11
  /**
38
- * The four phase groups. Ledger/uninstall metadata only (Story #5007): every
39
- * manifest entry MUST carry exactly one of these values so the install ledger
40
- * can group and the uninstaller can select what a run actually landed.
12
+ * Ledger/uninstall grouping key, not an approval gate; every entry carries one.
41
13
  *
42
14
  * @type {Readonly<{ IDE_WIRING: 'ide-wiring', REPO_CONFIG: 'repo-config',
43
15
  * GITHUB_ADMIN: 'github-admin', QUALITY_GATES: 'quality-gates' }>}
@@ -49,22 +21,12 @@ export const PHASE_GROUPS = Object.freeze({
49
21
  QUALITY_GATES: 'quality-gates',
50
22
  });
51
23
 
52
- /**
53
- * Frozen set of valid `phaseGroup` values, for validation and the
54
- * acceptance check. Derived from `PHASE_GROUPS` so the two never drift.
55
- *
56
- * @type {ReadonlySet<string>}
57
- */
24
+ /** @type {ReadonlySet<string>} */
58
25
  export const PHASE_GROUP_VALUES = Object.freeze(
59
26
  new Set(Object.values(PHASE_GROUPS)),
60
27
  );
61
28
 
62
- /**
63
- * The five required fields on every manifest entry. Exported so tests and
64
- * downstream renderers can assert entry shape without re-declaring the list.
65
- *
66
- * @type {readonly string[]}
67
- */
29
+ /** @type {readonly string[]} */
68
30
  export const MANIFEST_ENTRY_FIELDS = Object.freeze([
69
31
  'phaseGroup',
70
32
  'target',
@@ -76,33 +38,20 @@ export const MANIFEST_ENTRY_FIELDS = Object.freeze([
76
38
  /**
77
39
  * @typedef {object} MutationManifestEntry
78
40
  * @property {'ide-wiring'|'repo-config'|'github-admin'|'quality-gates'} phaseGroup
79
- * — the independently-approvable group this mutation belongs to.
80
- * @property {string} target — file path (relative to project root) or a
81
- * remote-resource identifier the mutation touches.
82
- * @property {string} action — verb describing the mutation.
41
+ * @property {string} target — project-root-relative path or remote resource.
42
+ * @property {string} action
83
43
  * @property {string} detail — one-line operator-facing description.
84
- * @property {boolean} reversible — true when the operator can trivially
85
- * undo the change locally; false for remote-admin mutations.
44
+ * @property {boolean} reversible — false for remote-admin mutations.
86
45
  */
87
46
 
88
47
  /**
89
- * Build the consent-first mutation manifest for a project root.
90
- *
91
- * Returns a flat array of {@link MutationManifestEntry} objects covering
92
- * every mutation the bootstrap pipeline performs, partitioned across the
93
- * four {@link PHASE_GROUPS}. File targets are project-root-relative
94
- * forward-slash POSIX paths so the preview renders identically on every
95
- * platform; remote targets are scoped to the resolved `owner/repo` slug.
96
- *
97
- * The `github-admin` group is omitted when `ctx.skipGithub` is set, and the
98
- * `quality-gates` group is included only when `ctx.withQuality` is true, so
99
- * the preview reflects the same flags the executing pipeline honours.
48
+ * File targets are POSIX paths so output is platform-identical; the group
49
+ * set honours the same flags the executing pipeline does.
100
50
  *
101
51
  * @param {object} [ctx]
102
- * @param {{ owner?: string, repo?: string }} [ctx.answers] — scopes the
103
- * `github-admin` targets to the `owner/repo` slug.
104
- * @param {boolean} [ctx.skipGithub] — omit the `github-admin` group.
105
- * @param {boolean} [ctx.withQuality] — include the `quality-gates` group.
52
+ * @param {{ owner?: string, repo?: string }} [ctx.answers]
53
+ * @param {boolean} [ctx.skipGithub]
54
+ * @param {boolean} [ctx.withQuality]
106
55
  * @returns {MutationManifestEntry[]}
107
56
  */
108
57
  export function buildMutationManifest(ctx = {}) {
@@ -110,15 +59,6 @@ export function buildMutationManifest(ctx = {}) {
110
59
 
111
60
  const entries = [];
112
61
 
113
- // --- ide-wiring -------------------------------------------------------
114
- // Claude Code / IDE integration: the system-prompt import, the generated
115
- // flat command surface, and the .gitignore entry that keeps the
116
- // generated tree out of git. (Story #4527/#4530: the UserPromptSubmit
117
- // per-prompt re-sync hook entry was removed alongside the hook itself —
118
- // it raced the harness's own read of the same directory and reported
119
- // "0 file(s) synced" on effectively every invocation; the real sync
120
- // points — `prepare`, `mandrel sync`/`update`, doctor's
121
- // `commands-in-sync` — already cover every case.)
122
62
  entries.push(
123
63
  {
124
64
  phaseGroup: PHASE_GROUPS.IDE_WIRING,
@@ -146,10 +86,7 @@ export function buildMutationManifest(ctx = {}) {
146
86
  },
147
87
  );
148
88
 
149
- // --- repo-config ------------------------------------------------------
150
- // Local repository configuration files the bootstrap seeds or extends.
151
- // Also includes git-init, which is the most irreversible local mutation
152
- // the bootstrap performs (B1 — uninstall ledger must record it).
89
+ // git-init is the most irreversible local mutation; the ledger must record it.
153
90
  entries.push(
154
91
  {
155
92
  phaseGroup: PHASE_GROUPS.REPO_CONFIG,
@@ -185,9 +122,6 @@ export function buildMutationManifest(ctx = {}) {
185
122
  },
186
123
  );
187
124
 
188
- // --- quality-gates ----------------------------------------------------
189
- // Stabilized quality-gate surface (husky pre-commit, quality npm
190
- // scripts, .agentrc quality defaults). Included only when opted in.
191
125
  if (ctx.withQuality) {
192
126
  entries.push(
193
127
  {
@@ -216,9 +150,6 @@ export function buildMutationManifest(ctx = {}) {
216
150
  );
217
151
  }
218
152
 
219
- // --- github-admin -----------------------------------------------------
220
- // Remote GitHub configuration. These are NOT trivially reversible local
221
- // edits — they mutate remote repo/org admin state.
222
153
  if (!ctx.skipGithub) {
223
154
  const repoSlug =
224
155
  ctx.answers?.owner && ctx.answers?.repo
@@ -226,8 +157,6 @@ export function buildMutationManifest(ctx = {}) {
226
157
  : 'the GitHub repository';
227
158
  entries.push(
228
159
  {
229
- // B1: GitHub repo creation is the most irreversible remote mutation —
230
- // record it so the uninstall ledger always lists it.
231
160
  phaseGroup: PHASE_GROUPS.GITHUB_ADMIN,
232
161
  target: `${repoSlug} (repo)`,
233
162
  action: 'create',
@@ -1,29 +1,7 @@
1
1
  /**
2
- * bootstrap/merge-methods — Epic #1235 Story 5
3
- *
4
- * Promotes the framework's hands-off-pipeline merge stance to the
5
- * consumer repo:
6
- * - allow_squash_merge: true — single commit per PR; clean history.
7
- * - allow_rebase_merge: false — no rebase-merge (status checks would
8
- * need to be re-run per commit).
9
- * - allow_merge_commit: false — no merge commits cluttering the
10
- * default branch.
11
- * - allow_auto_merge: true — required for the auto-merge label
12
- * feature Story 1 delivered.
13
- * - delete_branch_on_merge: true — head branches are throwaway.
14
- *
15
- * Behaviour rules
16
- * ---------------
17
- * No drift (live settings already match the target): no-op, returns
18
- * `{ status: 'unchanged' }`.
19
- *
20
- * Drift (any field differs from the target stance): when a `hitlConfirm`
21
- * gate is supplied, the proposed payload routes through it — on approval
22
- * the PATCH is issued; on decline the module returns
23
- * `{ status: 'skipped', reason: 'hitl-declined' }` without writing (a loud
24
- * decline, never silent). When NO gate is supplied (non-TTY, no operator
25
- * present — Story #4045 A4), the framework stance is default-applied with
26
- * an explicit log line.
2
+ * Applies the framework merge stance (squash-only, auto-merge on, delete head
3
+ * branches). On drift, a supplied `hitlConfirm` gate decides; with no gate
4
+ * (non-TTY) the stance is applied with an explicit log line.
27
5
  */
28
6
 
29
7
  export const TARGET_MERGE_METHODS = Object.freeze({
@@ -34,11 +12,7 @@ export const TARGET_MERGE_METHODS = Object.freeze({
34
12
  delete_branch_on_merge: true,
35
13
  });
36
14
 
37
- /**
38
- * Compute the drift between `current` (sparse) and the merged
39
- * (defaults+settings) target. Returns null when nothing diverges so the
40
- * caller can short-circuit before prompting HITL.
41
- */
15
+ /** `null` when nothing diverges. */
42
16
  export function diffMergeMethods(current, target) {
43
17
  const diff = {};
44
18
  for (const key of Object.keys(target)) {
@@ -66,7 +40,6 @@ export async function applyMergeMethods({
66
40
  hitlConfirm,
67
41
  log = () => {},
68
42
  }) {
69
- // Merge methods live under `github.mergeMethods`.
70
43
  const override = settings?.github?.mergeMethods ?? {};
71
44
  const target = { ...TARGET_MERGE_METHODS, ...override };
72
45
 
@@ -102,8 +75,6 @@ export async function applyMergeMethods({
102
75
  return { status: 'skipped', reason: 'hitl-declined', diff };
103
76
  }
104
77
  } else {
105
- // Non-TTY: no operator present to confirm. Default-apply the framework
106
- // stance and log explicitly so the consequence is never silent.
107
78
  log(
108
79
  '[Bootstrap] Merge methods: non-TTY — applying framework stance automatically ' +
109
80
  '(allow_squash_merge, allow_auto_merge, delete_branch_on_merge). ' +
@@ -1,23 +1,6 @@
1
1
  /**
2
- * bootstrap/preflight — unified prerequisite preflight (Story #3375).
3
- *
4
- * Aggregates the cold-start prerequisite checks into a single
5
- * fail-before-mutate gate that `bootstrap.js` runs as the FIRST pipeline
6
- * phase, ahead of any project-side or GitHub-side mutation:
7
- *
8
- * - Node version — reuses `checkNodeVersion` from `project-bootstrap.js`.
9
- * - git available — `git --version` resolves on PATH.
10
- * - inside-work-tree — `git rev-parse --is-inside-work-tree` is true.
11
- * - gh CLI + auth — reuses `preflightGh` from `gh-preflight.js`; skipped
12
- * entirely when `skipGithub` is true.
13
- *
14
- * `runPreflight({ skipGithub })` returns `{ ok, checks }` where `ok` is
15
- * false when any check failed. Every failing check carries a `remedy`
16
- * string so the CLI can print actionable next steps before halting.
17
- *
18
- * The runner seams (`nodeCheck`, `gitRunner`, `gh`) default to the real
19
- * implementations and are injectable so the unit test can drive every
20
- * branch without spawning real child processes.
2
+ * Fail-before-mutate prerequisite gate run before any bootstrap mutation.
3
+ * Every failing check carries a `remedy`.
21
4
  */
22
5
 
23
6
  import { spawnSync } from 'node:child_process';
@@ -32,10 +15,6 @@ const NODE_REMEDY = (result) =>
32
15
  `Node ${result.version} is below required ${result.required}. Upgrade Node (https://nodejs.org/) and re-run this command.`;
33
16
 
34
17
  /**
35
- * Default git runner: synchronously execs `git <args>` and returns the
36
- * normalized `{ status, stdout, stderr, error }` shape. Extracted so the
37
- * preflight tests can inject a stub without spawning a real child process.
38
- *
39
18
  * @param {string[]} args
40
19
  * @returns {{ status: number|null, stdout: string, stderr: string,
41
20
  * error?: NodeJS.ErrnoException }}
@@ -51,9 +30,6 @@ function defaultGitRunner(args) {
51
30
  }
52
31
 
53
32
  /**
54
- * Probe Node version via the injected `nodeCheck` seam (defaults to
55
- * `checkNodeVersion`). Returns a check record.
56
- *
57
33
  * @param {() => { ok: boolean, version: string, required: string }} nodeCheck
58
34
  * @returns {{ name: string, ok: boolean, remedy?: string }}
59
35
  */
@@ -64,8 +40,6 @@ function checkNode(nodeCheck) {
64
40
  }
65
41
 
66
42
  /**
67
- * Probe `git --version` for availability on PATH.
68
- *
69
43
  * @param {(args: string[]) => { status: number|null, stdout: string,
70
44
  * stderr: string, error?: NodeJS.ErrnoException }} gitRunner
71
45
  * @returns {{ name: string, ok: boolean, remedy?: string }}
@@ -89,9 +63,6 @@ function checkGitAvailable(gitRunner) {
89
63
  }
90
64
 
91
65
  /**
92
- * Probe `git rev-parse --is-inside-work-tree` to confirm the command is
93
- * running inside a git work tree.
94
- *
95
66
  * @param {(args: string[]) => { status: number|null, stdout: string,
96
67
  * stderr: string, error?: NodeJS.ErrnoException }} gitRunner
97
68
  * @returns {{ name: string, ok: boolean, remedy?: string }}
@@ -109,10 +80,6 @@ function checkInsideWorkTree(gitRunner) {
109
80
  }
110
81
 
111
82
  /**
112
- * Probe the `gh` CLI + auth via the injected `gh` seam (defaults to
113
- * `preflightGh`). Maps the typed errors `preflightGh` throws into a
114
- * single failing check carrying the error message as the remedy.
115
- *
116
83
  * @param {(opts?: object) => Promise<{ version: string }>} gh
117
84
  * @returns {Promise<{ name: string, ok: boolean, remedy?: string }>}
118
85
  */
@@ -126,28 +93,17 @@ async function checkGh(gh) {
126
93
  }
127
94
 
128
95
  /**
129
- * Run every prerequisite check and aggregate them into a single result.
130
- *
131
96
  * @param {object} [opts]
132
- * @param {boolean} [opts.skipGithub=false] — when true, skip the `gh` CLI
133
- * + auth check (the Node and git checks always run).
134
- * @param {boolean} [opts.requireWorkTree=true] — when true (the default,
135
- * used by `bootstrap.js`), being outside a git work tree FAILS the gate.
136
- * When false (`bootstrap-new.js`), the work-tree probe is informational:
137
- * it never fails the gate and its result is reported via the returned
138
- * `gitInitialized` flag so later steps can fill in the missing git state.
139
- * @param {boolean} [opts.checkProjectScope=false] — when true (and
140
- * `skipGithub` is false), also verify the `gh` token carries the
141
- * `project` scope needed to read/modify GitHub Projects V2.
97
+ * @param {boolean} [opts.skipGithub=false]
98
+ * @param {boolean} [opts.requireWorkTree=true] — false makes the work-tree
99
+ * probe informational (reported via `gitInitialized`); git is initialised later.
100
+ * @param {boolean} [opts.checkProjectScope=false]
142
101
  * @param {() => { ok: boolean, version: string, required: string }}
143
- * [opts.nodeCheck] — Node-version seam (defaults to `checkNodeVersion`).
144
- * @param {(args: string[]) => object} [opts.gitRunner] — git runner seam
145
- * (defaults to a real `spawnSync('git', …)`).
146
- * @param {(opts?: object) => Promise<{ version: string }>} [opts.gh] —
147
- * `gh` preflight seam (defaults to `preflightGh`).
102
+ * [opts.nodeCheck]
103
+ * @param {(args: string[]) => object} [opts.gitRunner]
104
+ * @param {(opts?: object) => Promise<{ version: string }>} [opts.gh]
148
105
  * @param {() => Promise<{ name: string, ok: boolean, remedy?: string }>}
149
- * [opts.projectScope] — project-scope seam (defaults to
150
- * `checkProjectScopes`).
106
+ * [opts.projectScope]
151
107
  * @returns {Promise<{ ok: boolean, gitInitialized: boolean,
152
108
  * checks: Array<{ name: string, ok: boolean, remedy?: string }> }>}
153
109
  */
@@ -164,8 +120,7 @@ export async function runPreflight(opts = {}) {
164
120
 
165
121
  const gitAvailable = checkGitAvailable(gitRunner);
166
122
  checks.push(gitAvailable);
167
- // The inside-work-tree probe only makes sense when git itself resolved;
168
- // if git is missing the rev-parse error is redundant noise.
123
+ // Without git, the work-tree probe is redundant noise.
169
124
  let gitInitialized = false;
170
125
  if (gitAvailable.ok) {
171
126
  const workTree = checkInsideWorkTree(gitRunner);
@@ -173,11 +128,7 @@ export async function runPreflight(opts = {}) {
173
128
  if (requireWorkTree) {
174
129
  checks.push(workTree);
175
130
  } else {
176
- // Non-fatal detection: record whether we are inside a git repo but
177
- // never fail the gate on it — bootstrap initialises git in a later
178
- // phase. `ok` stays true so the gate passes; the rendered glyph is
179
- // driven off `gitInitialized` (✓ when a repo exists, ✗ when not) so the
180
- // operator sees the real state without the run aborting.
131
+ // `ok` stays true; the rendered glyph reads `gitInitialized`.
181
132
  checks.push({
182
133
  name: 'Local git initialized',
183
134
  ok: true,