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