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,15 +1,7 @@
1
1
  /**
2
- * epic-ops.js — create the optional container Epic for a plan-persist run.
3
- *
4
- * Story #5139. When `/mandrel-plan` authors more than two Stories it offers to
5
- * group them under one container Epic. The Epic is **not** a work item: it
6
- * holds a `## Goal` paragraph and a child checklist, carries `type::epic` and
7
- * nothing else, and is never branched, implemented or delivered.
8
- *
9
- * Ordering matters — the Epic is created **after** the Stories, because its
10
- * body embeds their issue numbers and its sub-issue edges need their database
11
- * ids. A container that exists before its contents would have to be written
12
- * twice.
2
+ * The optional container Epic: a goal plus a child checklist, never
3
+ * delivered. Created after the Stories, since it embeds their numbers and
4
+ * database ids.
13
5
  *
14
6
  * @module lib/orchestration/plan-persist/epic-ops
15
7
  */
@@ -21,32 +13,22 @@ import { Logger } from '../../Logger.js';
21
13
  import { LABEL_COLORS, TYPE_LABELS } from '../../label-constants.js';
22
14
  import { composeEpicBody } from '../epic-container.js';
23
15
 
24
- /**
25
- * The Story count at or above which `/mandrel-plan` offers a container Epic.
26
- *
27
- * Three, i.e. "more than two" — at two Stories a pair of ids is as easy to
28
- * carry as one, and the container earns nothing.
29
- */
16
+ /** Story count at which `/mandrel-plan` offers a container Epic. */
30
17
  export const EPIC_SUGGESTION_THRESHOLD = 3;
31
18
 
32
- /** Length of the truncated hex digest stamped into the Epic marker. */
33
19
  const EPIC_FINGERPRINT_LENGTH = 8;
34
20
 
35
- /** Marker prefix identifying a persist-authored Epic in an issue body. */
36
21
  const EPIC_FINGERPRINT_MARKER_PREFIX = 'mandrel-epic-fingerprint';
37
22
 
38
23
  /**
39
- * Derive the Epic's resume identity from its title and the exact child set.
40
- *
41
- * Keyed on the children, not just the title: two runs that group *different*
42
- * Stories are different containers even under the same title, and adopting
43
- * one for the other would silently leave a cohort unlinked.
24
+ * Resume identity over title and the exact child set — a different cohort
25
+ * under the same title is a different container.
44
26
  *
45
27
  * Fields join on NUL, written as the `\u0000` escape and never as a raw byte
46
28
  * — a literal NUL makes git classify the file binary and drop its diffs.
47
29
  *
48
30
  * @param {{ title: string, childIds: number[] }} opts
49
- * @returns {string} Hex digest.
31
+ * @returns {string}
50
32
  */
51
33
  function epicFingerprint({ title, childIds }) {
52
34
  const ids = [...childIds].sort((a, b) => a - b).join(',');
@@ -57,8 +39,6 @@ function epicFingerprint({ title, childIds }) {
57
39
  }
58
40
 
59
41
  /**
60
- * Render the invisible HTML-comment marker carrying the Epic's fingerprint.
61
- *
62
42
  * @param {string} fingerprint
63
43
  * @returns {string}
64
44
  */
@@ -67,15 +47,9 @@ function epicFingerprintMarker(fingerprint) {
67
47
  }
68
48
 
69
49
  /**
70
- * Ensure the `type::epic` label exists, **failing closed**.
71
- *
72
- * This is deliberately the opposite posture to the cohort and route labels
73
- * (`ensurePersistLabel` in `story-ops.js`), which degrade to "create without
74
- * the label" because they are cosmetic. `type::epic` is not cosmetic: it is
75
- * the sole marker `isEpicTicket` reads, so an Epic created without it is not
76
- * an Epic — it is a stray issue that `/mandrel-deliver` will hard-error on and
77
- * no expansion will ever find. Skipping creation leaves the Stories, which
78
- * are the part that matters, perfectly deliverable by id.
50
+ * Fails closed, unlike the cosmetic cohort label: `type::epic` is the sole
51
+ * Epic marker, so an Epic without it is a stray issue. Skipping leaves the
52
+ * Stories deliverable by id.
79
53
  *
80
54
  * @param {{ provider: object }} opts
81
55
  * @returns {Promise<boolean>} Whether creation may proceed.
@@ -113,11 +87,8 @@ async function ensureEpicLabel({ provider }) {
113
87
  }
114
88
 
115
89
  /**
116
- * Find an already-created Epic carrying this fingerprint, so a resumed
117
- * persist adopts it instead of opening a second container.
118
- *
119
- * Non-fatal: a search failure returns `null` and the caller creates. A
120
- * duplicate Epic is cosmetic; a crash mid-persist is not.
90
+ * Non-fatal: a failed lookup returns `null` and the caller creates — a
91
+ * duplicate Epic is cosmetic, a mid-persist crash is not.
121
92
  *
122
93
  * @param {{ provider: object, fingerprint: string }} opts
123
94
  * @returns {Promise<{ id: number, url?: string }|null>}
@@ -134,9 +105,7 @@ async function findExistingEpic({ provider, fingerprint }) {
134
105
  String(issue?.body ?? '').includes(marker),
135
106
  );
136
107
  if (!hit) return null;
137
- // The declared ticket shape: `id` is the issue number. The `number`-then-
138
- // `id` fallback this replaced would have adopted the resumed container by
139
- // database id — a number that exists, resolves to nothing, fails no guard.
108
+ // `id` is the issue number here; never fall back to a database id.
140
109
  const id = Number(hit.id);
141
110
  if (!Number.isInteger(id) || id <= 0) return null;
142
111
  return { id, url: hit.url ?? undefined };
@@ -149,11 +118,8 @@ async function findExistingEpic({ provider, fingerprint }) {
149
118
  }
150
119
 
151
120
  /**
152
- * Index a cohort's already-known database ids by issue number.
153
- *
154
- * A resumed run's adopted Stories carry no `internalId` — they were found by
155
- * listing, not created — so they are simply absent from the map and fall
156
- * through to the lookup. Absence means "not known here", never "has none".
121
+ * Known database ids by issue number. Adopted Stories are absent (they carry
122
+ * no `internalId`) and fall through to a lookup.
157
123
  *
158
124
  * @param {Array<{ id?: number, internalId?: number }>|undefined} created
159
125
  * @returns {Map<number, number>}
@@ -169,18 +135,9 @@ function internalIdsFrom(created) {
169
135
  }
170
136
 
171
137
  /**
172
- * Link the created Stories under the Epic as native sub-issue edges.
173
- *
174
- * Non-fatal by design — the body checklist is the durable mirror, and
175
- * `getSubTickets` reads it as a first-class child source. A lost edge costs
176
- * the GitHub UI's nesting, not the grouping itself.
177
- *
178
- * Exported since Story #5155 so the adoption path (`epic-adoption.js`) links
179
- * children exactly the way creation does — one mirroring rule, not two that
180
- * drift.
181
- *
182
- * `created` is optional and carries the cohort's `createIssue` responses, so
183
- * the linker can skip the id lookup for every child this run made itself.
138
+ * Native sub-issue edges, shared with the adoption path. Non-fatal: the body
139
+ * checklist is the durable child source. `created` lets the linker skip the
140
+ * id lookup for children this run made.
184
141
  *
185
142
  * @param {{ provider: object, epicNumber: number, childIds: number[], created?: Array<{ id: number, internalId?: number }> }} opts
186
143
  * @returns {Promise<{ added: number, skipped: number, failed: number }|null>}
@@ -236,16 +193,8 @@ export async function mirrorSubIssueEdges({
236
193
  }
237
194
 
238
195
  /**
239
- * Create the container Epic for a persisted cohort.
240
- *
241
- * Returns `null` whenever no Epic was created — not requested, too few
242
- * Stories, or the label could not be ensured. Callers treat `null` as the
243
- * ordinary no-Epic outcome, never as a failure.
244
- *
245
- * **The Epic never receives an `agent::*` label.** Its labels are exactly
246
- * `[type::epic]`. That absence is load-bearing: it keeps the container out
247
- * of the bare `/mandrel-deliver` ready list and outside `lint-issue-body.js`,
248
- * which scopes itself to `type::story`.
196
+ * `null` is the ordinary no-Epic outcome, never a failure. Labels are exactly
197
+ * `[type::epic]` — no `agent::*`, which keeps it out of the deliver ready list.
249
198
  *
250
199
  * @param {{
251
200
  * provider: object,
@@ -283,9 +232,7 @@ export async function createContainerEpic({
283
232
  .map((s) => s.id)
284
233
  .filter((id) => Number.isInteger(id) && id > 0);
285
234
 
286
- // Dry-run reports the intended container write-free. `created` carries
287
- // negative placeholder ids there, so `childIds` is empty by construction —
288
- // report the count from `created` itself rather than from the filtered list.
235
+ // Dry-run ids are negative placeholders, so report from `created` itself.
289
236
  if (dryRun) {
290
237
  return {
291
238
  id: -1,
@@ -336,8 +283,6 @@ export async function createContainerEpic({
336
283
  labels: [TYPE_LABELS.EPIC],
337
284
  });
338
285
 
339
- // `createIssue` declares both `id` and `number` and sets them to the same
340
- // issue number; reading one of them is the whole contract.
341
286
  const epicNumber = result.id;
342
287
  const edges = await mirrorSubIssueEdges({
343
288
  provider,
@@ -1,42 +1,17 @@
1
1
  /**
2
- * external-deps.js — `depends_on` entries that point outside this plan run.
3
- *
4
- * Story #5155. A `depends_on[]` entry has always been a **sibling slug**: a
5
- * name resolvable only inside the `stories.json` being persisted. That makes
6
- * every ordering edge intra-plan by construction, and leaves the cross-plan
7
- * case — a new Story that must wait for an open Story from an earlier run —
8
- * expressible only by hand-editing the issue body after persist.
9
- *
10
- * An entry of the form `#1234` is that missing case: an **external** blocker,
11
- * already live on the tracker. The two forms are distinguished lexically and
12
- * totally, so nothing has to guess:
13
- *
14
- * - `some-slug` → a sibling, resolved against this run's slug map;
15
- * - `#1234` → an existing issue, resolved against the tracker.
16
- *
17
- * External refs are excluded from sibling ordering and cycle detection. They
18
- * cannot participate in either: a Story already open is not scheduled by this
19
- * run, so it has no position in the topological sort, and it cannot close a
20
- * cycle back into a Story that does not exist yet. Treating them as siblings
21
- * is what would break — the unknown-slug guard would reject every one.
22
- *
23
- * They are validated strictly, and **before any create**: an unresolvable
24
- * blocker that surfaced after the fact would leave a live Story gated on
25
- * something that can never satisfy it, which the delivery engine reads as a
26
- * permanent wedge rather than an error.
2
+ * `depends_on` entries naming an existing issue (`#<id>`) rather than a
3
+ * sibling slug. They take no part in sibling ordering or cycle detection, and
4
+ * are validated before any create — an unresolvable blocker on a live Story
5
+ * reads to delivery as a permanent wedge, not an error.
27
6
  *
28
7
  * @module lib/orchestration/plan-persist/external-deps
29
- * @see Story #5155
30
8
  */
31
9
 
32
10
  import { TYPE_LABELS } from '../../label-constants.js';
33
11
 
34
- /** A `depends_on` entry naming an existing issue: `#` followed by digits. */
35
12
  const EXTERNAL_REF_RE = /^#(\d+)$/;
36
13
 
37
14
  /**
38
- * Is this `depends_on` entry an external issue reference?
39
- *
40
15
  * @param {unknown} entry
41
16
  * @returns {boolean}
42
17
  */
@@ -45,8 +20,6 @@ export function isExternalDependencyRef(entry) {
45
20
  }
46
21
 
47
22
  /**
48
- * The issue number an external ref names, or `null` for a sibling slug.
49
- *
50
23
  * @param {unknown} entry
51
24
  * @returns {number|null}
52
25
  */
@@ -59,9 +32,6 @@ export function externalDependencyId(entry) {
59
32
  }
60
33
 
61
34
  /**
62
- * Every distinct external id declared across a plan's Stories, in first-seen
63
- * order.
64
- *
65
35
  * @param {Array<{ depends_on?: string[] }>} stories
66
36
  * @returns {number[]}
67
37
  */
@@ -80,8 +50,6 @@ export function collectExternalDependencyIds(stories) {
80
50
  }
81
51
 
82
52
  /**
83
- * Normalize an issue's labels to plain strings.
84
- *
85
53
  * @param {unknown} raw
86
54
  * @returns {string[]}
87
55
  */
@@ -93,8 +61,6 @@ function labelNames(raw) {
93
61
  }
94
62
 
95
63
  /**
96
- * Explain why one external blocker is unusable, or `null` when it is fine.
97
- *
98
64
  * @param {number} id
99
65
  * @param {object|null} issue
100
66
  * @returns {string|null}
@@ -116,13 +82,10 @@ function rejectionReason(id, issue) {
116
82
  }
117
83
 
118
84
  /**
119
- * Verify every external `depends_on` ref resolves to an open Story.
120
- *
121
- * Hard-errors listing **every** bad ref rather than the first, so an operator
122
- * fixing a plan sees the whole set in one pass.
85
+ * Every external ref must be an open Story; the error lists every bad ref.
123
86
  *
124
87
  * @param {{ provider: object, stories: Array<{ slug: string, depends_on?: string[] }> }} args
125
- * @returns {Promise<number[]>} The validated external ids (possibly empty).
88
+ * @returns {Promise<number[]>}
126
89
  * @throws {Error} When any ref is missing, closed, an Epic, or not a Story.
127
90
  */
128
91
  export async function assertExternalDependenciesResolvable({
@@ -1,23 +1,5 @@
1
1
  /**
2
- * persist-helpers.js — pure helper surface for the flat Story `/mandrel-plan` persist.
3
- *
4
- * Exports:
5
- * - `resolveBaseBranchRef(config)` — the one place the persist gates learn
6
- * which branch name the operator configured.
7
- *
8
- * The ref the probes read is resolved per checkout (`resolveProbeRef`): the
9
- * local branch when it exists, else its `origin/` tracking ref (a PR
10
- * checkout on CI has no local `main`), else nothing — a shallow checkout
11
- * with no base at all skips the probes instead of reading every path as
12
- * absent.
13
- * - `validateTickets(tickets, config, opts)` — normalises the authored
14
- * `acceptance[]` handles and repairs the mechanical `changes[]`
15
- * formalities against the base branch, then runs the cross-link,
16
- * freshness, and task-body validators in one pass.
17
- *
18
- * Story #5312 deleted the fan-out probe that lived here: the delete
19
- * blast-radius count never refused a real plan, and the `git grep` it paid
20
- * for on every persist bought a warning nobody acted on.
2
+ * Base-branch resolution and the repair-then-validate pass for plan persist.
21
3
  *
22
4
  * @module lib/orchestration/plan-persist/persist-helpers
23
5
  */
@@ -29,20 +11,10 @@ import { normalizeAcceptanceHandles } from './acceptance-handle-repair.js';
29
11
  import { repairChangeEntries } from './changes-repair.js';
30
12
 
31
13
  /**
32
- * Resolve the ref the persist gates probe against.
33
- *
34
- * The canonical resolved config carries the base branch at
35
- * `project.baseBranch` (`lib/config-resolver.js` defaults it to `main`).
36
- * This helper used to read `config.baseBranch` — a key the resolver never
37
- * produces — so every freshness / file-assumption probe silently targeted
38
- * the literal `main` regardless of configuration. Benign in a repo whose
39
- * base branch *is* `main`; wrong for any consumer that configured something
40
- * else (Story #4541).
41
- *
42
- * The flat `config.baseBranch` fallback is retained for the legacy
43
- * `settings`-bag callers that pass `{ baseBranch, paths, planning }`.
14
+ * Reads `project.baseBranch` from resolved config; flat `baseBranch` serves
15
+ * legacy settings-bag callers.
44
16
  *
45
- * @param {object} [config] Resolved config, or a legacy settings bag.
17
+ * @param {object} [config]
46
18
  * @returns {string}
47
19
  */
48
20
  export function resolveBaseBranchRef(config) {
@@ -50,8 +22,6 @@ export function resolveBaseBranchRef(config) {
50
22
  }
51
23
 
52
24
  /**
53
- * Does `ref` name a commit in the repo at `cwd`?
54
- *
55
25
  * @param {string} ref
56
26
  * @param {string} cwd
57
27
  * @returns {boolean}
@@ -64,17 +34,9 @@ function refResolves(ref, cwd) {
64
34
  }
65
35
 
66
36
  /**
67
- * Resolve the configured base branch to a ref the footprint probes can read
68
- * in this checkout, or `null` when none exists.
69
- *
70
- * A developer checkout carries a local `main`; a CI pull-request checkout
71
- * (`actions/checkout` at the merge ref, detached) carries only
72
- * `origin/main`; a shallow smoke checkout carries neither. Probing the
73
- * bare branch name in the last two answers "absent" for every path, which
74
- * turns each bare-path repair into a `creates` and every declared path into
75
- * a stale reference. So: the local branch when it resolves, else its
76
- * `origin/` tracking ref when that does, else `null` — the caller then
77
- * skips the probes and says so, rather than reporting the tree as missing.
37
+ * Local branch, else `origin/<branch>` (a CI PR checkout has no local base),
38
+ * else `null` so the probes are skipped rather than reading every path as
39
+ * absent (a shallow checkout has neither).
78
40
  *
79
41
  * @param {{ baseBranch: string, cwd?: string }} opts
80
42
  * @returns {string|null}
@@ -86,10 +48,8 @@ function resolveProbeRef({ baseBranch, cwd }) {
86
48
  }
87
49
 
88
50
  /**
89
- * Default git probe: returns true when `path` exists at `ref` in the cwd repo.
90
- * `git cat-file -e <ref>:<path>` is the standard low-cost existence check —
91
- * the same probe the validator's own gates run, so the repair pass and the
92
- * gates cannot disagree about what is at base.
51
+ * The validator gates' own probe, so repair and gates agree on what is at
52
+ * base.
93
53
  *
94
54
  * @param {{ baseBranchRef: string, path: string, cwd?: string }} opts
95
55
  * @returns {boolean}
@@ -105,9 +65,7 @@ function defaultGitRunner({ baseBranchRef, path, cwd }) {
105
65
  }
106
66
 
107
67
  /**
108
- * The `existsAtBase` predicate the `changes[]` repair pass probes with. With
109
- * no base to read, a bare bullet is taken as the in-place edit it almost
110
- * always is.
68
+ * With no base to read, a bare bullet is taken as an in-place edit.
111
69
  *
112
70
  * @param {{ baseBranchRef: string|null, cwd?: string, gitRunner?: Function }} opts
113
71
  * @returns {(path: string) => boolean}
@@ -119,8 +77,6 @@ function makeExistsAtBase({ baseBranchRef, cwd, gitRunner }) {
119
77
  }
120
78
 
121
79
  /**
122
- * The one warning a checkout with no readable base leaves on the dry-run.
123
- *
124
80
  * @param {string} baseBranch
125
81
  * @param {string|null} baseBranchRef
126
82
  * @returns {string[]}
@@ -135,8 +91,6 @@ function probeSkipWarnings(baseBranch, baseBranchRef) {
135
91
  }
136
92
 
137
93
  /**
138
- * Attach non-enumerable bookkeeping to the validated array.
139
- *
140
94
  * @param {object[]} validated
141
95
  * @param {Record<string, unknown>} extras
142
96
  */
@@ -152,17 +106,11 @@ function defineHidden(validated, extras) {
152
106
  }
153
107
 
154
108
  /**
155
- * Repair the mechanical `changes[]` formalities, then validate.
156
- *
157
- * Repair before judging (Story #5312, the shape Story #5005 set for the
158
- * verify tier): a plain-string bullet or a trailing parenthetical is
159
- * rewritten into `{ path, assumption }` by probing the base branch, and
160
- * each rewrite is reported on the returned array's `repairs` so the dry-run
161
- * can print it. An entry nothing path-shaped can be salvaged from survives
162
- * untouched and still hard-errors in `validateTaskBodies`.
109
+ * Repair the mechanical `acceptance[]` / `changes[]` formalities (reported on
110
+ * `repairs`), then validate.
163
111
  *
164
112
  * @param {object[]} tickets Mutated in place.
165
- * @param {object} config Resolved config.
113
+ * @param {object} config
166
114
  * @param {{ cwd?: string, gitRunner?: Function }} [opts]
167
115
  * @returns {object[] & { findings: object[], errors: string[], warnings: string[], normalizations: object[], repairs: object[], probeRef: string|null }}
168
116
  */
@@ -182,9 +130,7 @@ export function validateTickets(tickets, config, opts = {}) {
182
130
  const validated = validateAndNormalizeTickets(tickets, {
183
131
  baseBranchRef: baseBranchRef ?? undefined,
184
132
  gitRunner: opts.gitRunner,
185
- // Thread the repo cwd into the AC-freshness / file-assumption git
186
- // probes (#4474 PR7) — without it they silently ran against
187
- // process.cwd(), which is only the repo root by coincidence.
133
+ // Otherwise the probes run against process.cwd().
188
134
  cwd: opts.cwd,
189
135
  });
190
136
  validated.warnings.push(...probeSkipWarnings(baseBranch, baseBranchRef));
@@ -1,12 +1,6 @@
1
1
  /**
2
- * plan-context-source.js — locate and read the `plan-context.js` envelope so
3
- * persist can derive the `/mandrel-plan --tickets` source ids from the run that
4
- * actually fetched them (Story #4554).
5
- *
6
- * This lives beside the persist ops rather than inside `plan-persist.js` so
7
- * the discovery + failure policy is directly testable: the CLI is a thin
8
- * `parseArgs` shell, and the interesting behaviour here is exactly the part
9
- * that decides whether a `--tickets` run can quietly lose its source set.
2
+ * Locate and read the `plan-context.js` envelope, from which persist derives
3
+ * the `--tickets` source ids.
10
4
  *
11
5
  * @module lib/orchestration/plan-persist/plan-context-source
12
6
  */
@@ -16,21 +10,13 @@ import path from 'node:path';
16
10
 
17
11
  import { Logger } from '../../Logger.js';
18
12
 
19
- /**
20
- * Filename the `/mandrel-plan` interrogate step writes its envelope to inside
21
- * `--plan-dir` (`plan-context.js --out <plan-dir>/plan-context.json`).
22
- */
23
13
  export const PLAN_CONTEXT_FILENAME = 'plan-context.json';
24
14
 
25
15
  /**
26
- * Decide where to look for the envelope.
27
- *
28
- * An explicit `--plan-context` path wins; otherwise the conventional file
29
- * inside `--plan-dir`. With neither, there is nothing to read — the caller
30
- * gets `null` and must warn (see `loadPlanContextEnvelope`).
16
+ * An explicit `--plan-context` wins over the file inside `--plan-dir`.
31
17
  *
32
- * @param {string|null|undefined} explicitPath `--plan-context`.
33
- * @param {string|null|undefined} planDir `--plan-dir`.
18
+ * @param {string|null|undefined} explicitPath
19
+ * @param {string|null|undefined} planDir
34
20
  * @returns {{ path: string, explicit: boolean }|null}
35
21
  */
36
22
  export function resolvePlanContextPath(explicitPath, planDir) {
@@ -46,36 +32,18 @@ export function resolvePlanContextPath(explicitPath, planDir) {
46
32
  return null;
47
33
  }
48
34
 
49
- /**
50
- * The advice printed whenever persist has no envelope to derive ids from.
51
- * Single-homed so the two no-envelope paths cannot drift apart.
52
- */
53
35
  const CAPTURE_HINT =
54
36
  'Re-run step 1 with `node .agents/scripts/plan-context.js … --out ' +
55
37
  '<plan-dir>/plan-context.json` and pass --plan-dir, or pass ' +
56
38
  '--source-tickets explicitly.';
57
39
 
58
40
  /**
59
- * Read the `plan-context.js` envelope.
60
- *
61
- * Failure policy — the point is that a `--tickets` run can never *quietly*
62
- * lose its source set, so every no-envelope path is audible:
63
- *
64
- * - **No path at all** (neither `--plan-dir` nor `--plan-context`): warn.
65
- * Persist cannot tell a legitimate `--seed` run from a `--tickets` run
66
- * whose envelope was never captured, so it says so rather than returning a
67
- * silent `null`.
68
- * - **Explicit `--plan-context` missing**: throw. The operator named a file
69
- * and meant it.
70
- * - **Auto-discovered file simply absent**: warn and degrade to
71
- * `--source-tickets`. A `--seed` run legitimately has no envelope, so
72
- * absence alone is not fatal.
73
- * - **Present but unparseable**: throw either way. A corrupt envelope is not
74
- * the same as no envelope, and reading it as "no source tickets" is exactly
75
- * the vacuous pass this module exists to prevent.
41
+ * A `--tickets` run must never quietly lose its source set: no path or an
42
+ * absent auto-discovered file warns (a `--seed` run legitimately has none);
43
+ * a missing explicit file or an unparseable envelope throws.
76
44
  *
77
45
  * @param {{ path: string, explicit: boolean }|null} planContext
78
- * @returns {Promise<object|null>} Parsed envelope, or null when absent.
46
+ * @returns {Promise<object|null>}
79
47
  */
80
48
  export async function loadPlanContextEnvelope(planContext) {
81
49
  if (!planContext) {