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,18 +1,7 @@
1
1
  /**
2
- * lib/orchestration/plan-persist/audit-provenance.js — what an audit-seeded
3
- * plan leaves behind for the next sweep.
4
- *
5
- * The chained `/mandrel-plan` path files Stories from an audit seed, and until
6
- * Story #5307 those Stories were invisible to the sweep that proposed them:
7
- * they carried no `audit::*` label, so they were absent from the label-listed
8
- * corpus dedup indexes, and nothing recorded them in the cross-run ledger. The
9
- * provenance footers `carryProvenanceFooters` stamps could not cover for
10
- * either — with an index in play the exact lookup is answered from that pool
11
- * and never reaches the provider.
12
- *
13
- * Both halves ride the create loop in `story-ops.js` because that is the only
14
- * seam on this path that cannot be forgotten: there is no second required pass
15
- * here the way `--wire-edges` is one for the standalone filer.
2
+ * What an audit-seeded plan leaves for the next sweep: `audit::*` labels (the
3
+ * dedup corpus is label-listed, so footers alone are invisible to an indexed
4
+ * sweep) and cross-run ledger entries.
16
5
  */
17
6
 
18
7
  import {
@@ -29,11 +18,6 @@ import {
29
18
  import { Logger } from '../../Logger.js';
30
19
 
31
20
  /**
32
- * A fresh accumulator for one persist run's audit filings.
33
- *
34
- * The run collects into this and flushes once, so a plan that files N Stories
35
- * leaves one reviewable ledger diff rather than N.
36
- *
37
21
  * @param {string} [ledgerPath]
38
22
  * @returns {{ path: string, ledger: object|null, recorded: number, ambiguous: number }}
39
23
  */
@@ -47,20 +31,12 @@ function newAuditLedgerRecord(ledgerPath) {
47
31
  }
48
32
 
49
33
  /**
50
- * Merge the seed's `audit::*` labels into an audit-seeded Story's labels.
51
- *
52
- * Taken from the **seed union**, not from the attributed provenance source: a
53
- * label only scopes which issues the next sweep's corpus fetch returns, and
54
- * matching inside that corpus is by fingerprint and semantic key. A superset
55
- * corpus can therefore only ever find more, never less — so erring wide is the
56
- * safe direction, and it keeps lens-to-label knowledge in the audit filer that
57
- * owns it rather than re-deriving a dimension here (the junk-derivation trap
58
- * Story #4195 closed).
59
- *
60
- * A non-audit seed carries no such footer, so this is a no-op there.
34
+ * Labels come from the seed union, not per-Story attribution: a label only
35
+ * widens the next sweep's corpus (matching is by fingerprint), so erring
36
+ * wide is safe.
61
37
  *
62
- * @param {Array<object>} stories — the assembled Stories.
63
- * @param {string} [provenanceSource] — the seed this plan was authored from.
38
+ * @param {Array<object>} stories
39
+ * @param {string} [provenanceSource]
64
40
  * @returns {Array<object>}
65
41
  */
66
42
  export function withAuditLabels(stories, provenanceSource) {
@@ -73,19 +49,9 @@ export function withAuditLabels(stories, provenanceSource) {
73
49
  }
74
50
 
75
51
  /**
76
- * Record one just-created Story in the cross-run audit ledger.
77
- *
78
- * The identities are read back off the body this run assembled, so what is
79
- * recorded is exactly what was stamped — attribution already applied. A Story
80
- * from a non-audit plan carries no footers and records nothing, which is why
81
- * a `--seed` or `--tickets` run never touches the ledger file at all.
82
- *
83
- * **The union fallback is deliberately NOT recorded.** When the seed carried
84
- * footers but the plan attributed none per-Story, every sibling carries every
85
- * fingerprint; binding a finding to one of them would be a coin flip, and a
86
- * wrong binding is worse than none — the finding would be suppressed against an
87
- * Issue that never tracked it, or resurrected when an unrelated Story closed.
88
- * The audit path stamps `provenance` mechanically, so this is the exception.
52
+ * Identities are read off the stamped body. Union-carried (unattributed)
53
+ * footers are never recorded: every sibling carries them, and a wrong
54
+ * binding is worse than none.
89
55
  *
90
56
  * @param {{ story: object, id: number, ledgerRecord: object, attributed: boolean }} args
91
57
  */
@@ -112,12 +78,6 @@ function recordAuditFiling({ story, id, ledgerRecord, attributed }) {
112
78
  }
113
79
 
114
80
  /**
115
- * Persist the run's audit filings, once, after every Story exists.
116
- *
117
- * Writing per-Story would rewrite a committed baseline N times for one plan;
118
- * writing once keeps the diff to a single reviewable change. A run that
119
- * recorded nothing writes nothing.
120
- *
121
81
  * @param {object} ledgerRecord
122
82
  * @param {{ warn: Function }} logger
123
83
  */
@@ -138,27 +98,16 @@ function flushAuditLedger(ledgerRecord, logger) {
138
98
  }
139
99
 
140
100
  /**
141
- * Record everything one persist run filed, once, after every Story exists.
142
- *
143
- * Driven from the persist orchestrator rather than from inside the create loop:
144
- * the loop's job is to create issues, and this is the only other place that
145
- * always runs after it. Either seam is unforgettable — there is no second
146
- * required pass on this path the way `--wire-edges` is one for the standalone
147
- * filer — and keeping the side effect at the orchestration layer leaves the
148
- * create loop doing one thing.
149
- *
150
- * One write per plan, not per Story: the ledger is committed state, and N
151
- * rewrites of it for one plan is a diff nobody can review. A run that recorded
152
- * nothing — a non-audit plan, or one whose identities were all union-carried —
153
- * writes nothing at all.
101
+ * One ledger write per plan, not per Story — the ledger is committed state.
102
+ * A run that recorded nothing writes nothing.
154
103
  *
155
104
  * @param {object} params
156
- * @param {Array<object>} params.stories — the assembled Stories.
157
- * @param {Array<{ slug: string, id: number }>} params.created — persist receipts.
158
- * @param {Array<object>} params.tickets — the raw authored tickets.
105
+ * @param {Array<object>} params.stories
106
+ * @param {Array<{ slug: string, id: number }>} params.created
107
+ * @param {Array<object>} params.tickets
159
108
  * @param {string} [params.ledgerPath]
160
109
  * @param {{ warn: Function }} [params.logger]
161
- * @param {boolean} [params.dryRun] — a dry run records nothing at all.
110
+ * @param {boolean} [params.dryRun]
162
111
  * @returns {{ recorded: number, ambiguous: number }}
163
112
  */
164
113
  export function recordAuditFilings({
@@ -169,14 +118,10 @@ export function recordAuditFilings({
169
118
  logger,
170
119
  dryRun = false,
171
120
  }) {
172
- // A dry run created no issue to record against, and must not touch committed
173
- // state. Owned here rather than at the call site so the contract is testable.
174
121
  if (dryRun) return { recorded: 0, ambiguous: 0 };
175
122
  const record = newAuditLedgerRecord(ledgerPath);
176
123
  const idBySlug = new Map((created ?? []).map((c) => [c.slug, c.id]));
177
- // Attribution is a property of what the plan AUTHORED, so it is read off the
178
- // raw tickets rather than threaded through assembly: a Story that declared no
179
- // `provenance` inherited the seed union, where ownership is a coin flip.
124
+ // Attribution is what the plan authored, so read it off the raw tickets.
180
125
  const attributedSlugs = new Set(
181
126
  (tickets ?? [])
182
127
  .filter((t) => t?.provenance !== undefined && t?.provenance !== null)
@@ -1,64 +1,27 @@
1
1
  /**
2
- * changes-repair.js — repair-before-judging for `changes[]` entries
3
- * (Story #5312).
4
- *
5
- * The `{ path, assumption }` object shape is a deterministic, mechanically
6
- * derivable formality. The validator already knew how to salvage a path from
7
- * a plain-string bullet (`suggestPathEntryFix`) — then rejected the plan
8
- * anyway and charged the author a full re-drafting round to paste that exact
9
- * object back. Story #5005 made the same call for the verify-tier suffix and
10
- * repaired it instead; the suffix is gone now, and the repair moves to the
11
- * one formality left: this module applies the inference the validator
12
- * trusts, so the dry-run rewrites and **reports** each repair rather than
13
- * refusing on it.
14
- *
15
- * Two shapes are repaired, on both authoring surfaces (a structured object
16
- * body's `changes[]` array and a serialized string body's `## Changes`
17
- * section):
18
- *
19
- * - a **plain-string bullet** (`src/app.js`, `` `src/app.js` ``,
20
- * `src/app.js — adds the route`) becomes `{ path, assumption }`, the
21
- * assumption resolved by probing the base branch — a path present at
22
- * base is a `refactors-existing`, an absent one a `creates`;
23
- * - a **trailing parenthetical** on a path (`src/app.js (new)`,
24
- * `` `src/app.js (creates)` — refactors-existing ``) is stripped; an
25
- * authored assumption is kept, an absent one probed as above.
26
- *
27
- * A string nothing path-shaped can be salvaged from is left untouched and
28
- * still fails the body-shape validator — that is the one `changes[]` failure
29
- * only the author can resolve.
30
- *
31
- * It lives beside the validator rather than inside it because the validator's
32
- * job is to *judge*: mixing a mutating repair pass into a module of pure
33
- * collectors muddies both. `persist-helpers.js#validateTickets` calls this
34
- * first, then the validators.
2
+ * Repair-before-judging for `changes[]`, on both the structured array and a
3
+ * serialized `## Changes` section: a plain-string bullet becomes
4
+ * `{ path, assumption }` (probed at base: present → `refactors-existing`,
5
+ * absent → `creates`), and a trailing parenthetical on a path is stripped.
6
+ * Repairs are reported, not refused; an unsalvageable string is left for the
7
+ * validator. Kept apart from the validator, whose collectors are pure.
35
8
  *
36
9
  * @module lib/orchestration/plan-persist/changes-repair
37
10
  */
38
11
 
12
+ import { matchBarePathToken } from '../../story-body/body-format-lints.js';
39
13
  import { FILE_ASSUMPTION_VALUES } from '../file-assumption-enum.js';
40
14
 
41
- /** The `## Changes` heading (either level the parser accepts). */
42
15
  const CHANGES_HEADING_RE = /^#{2,3}\s+Changes\s*$/i;
43
16
 
44
- /** Any heading — the end of the `## Changes` section. */
45
17
  const ANY_HEADING_RE = /^#{1,6}\s+\S/;
46
18
 
47
- /** A trailing `(…)` on a path token. */
48
19
  const TRAILING_PARENTHETICAL_RE = /\s*\([^)]*\)\s*$/;
49
20
 
50
- /** The humanized canonical bullet: `` `path` — assumption ``. */
21
+ /** The canonical bullet: `` `path` — assumption ``. */
51
22
  const HUMANIZED_RE = /^`([^`]+)`\s+—\s+(\S+)$/;
52
23
 
53
- // A token that looks like a file path / glob / module id: it carries a `/` or a
54
- // `.`-separated segment. Deliberately loose — a false positive only produces a
55
- // `{ path, assumption }` entry the base-branch probes then judge.
56
- const PATH_LIKE_RE = /^[\w@*-]*[/.][\w@./*-]+$/;
57
-
58
24
  /**
59
- * Strip a trailing parenthetical from a path token, reporting whether one
60
- * was present.
61
- *
62
25
  * @param {string} raw
63
26
  * @returns {{ path: string, stripped: boolean }}
64
27
  */
@@ -68,10 +31,8 @@ function stripParenthetical(raw) {
68
31
  }
69
32
 
70
33
  /**
71
- * Salvage the path token from a plain-string bullet: drop a leading list
72
- * marker, take the segment before any humanized ` — ` tail, peel quotes and
73
- * backticks, strip a trailing parenthetical. Returns `null` when nothing
74
- * path-shaped survives.
34
+ * Path-shaped means `matchBarePathToken` — the parser's own grammar, so the
35
+ * repair and the parser accept the same class.
75
36
  *
76
37
  * @param {string} raw
77
38
  * @returns {string|null}
@@ -87,13 +48,10 @@ function salvagePath(raw) {
87
48
  .replace(/[`'"]+$/, '')
88
49
  .trim();
89
50
  s = stripParenthetical(s).path;
90
- return s !== '' && PATH_LIKE_RE.test(s) ? s : null;
51
+ return matchBarePathToken(s);
91
52
  }
92
53
 
93
54
  /**
94
- * Resolve the assumption for a path with none authored: present at base →
95
- * `refactors-existing`, absent → `creates`.
96
- *
97
55
  * @param {string} path
98
56
  * @param {(path: string) => boolean} existsAtBase
99
57
  * @returns {'refactors-existing'|'creates'}
@@ -103,9 +61,7 @@ function probeAssumption(path, existsAtBase) {
103
61
  }
104
62
 
105
63
  /**
106
- * Repair one structured `changes[]` item. Returns the corrected entry and a
107
- * repair record, or `null` when the item needs no repair (or cannot be
108
- * repaired).
64
+ * `null` when the item needs no repair or cannot be repaired.
109
65
  *
110
66
  * @param {unknown} item
111
67
  * @param {(path: string) => boolean} existsAtBase
@@ -142,10 +98,6 @@ function repairStructuredItem(item, existsAtBase) {
142
98
  }
143
99
 
144
100
  /**
145
- * Repair one line of a serialized `## Changes` section. Returns the rewritten
146
- * line and a repair record, or `null` when the line is already canonical or
147
- * cannot be repaired.
148
- *
149
101
  * @param {string} line
150
102
  * @param {(path: string) => boolean} existsAtBase
151
103
  * @returns {{ line: string, repair: object }|null}
@@ -198,9 +150,7 @@ function repairSectionLine(line, existsAtBase) {
198
150
  }
199
151
 
200
152
  /**
201
- * Repair the `## Changes` section of a serialized body in place. Only lines
202
- * between the heading and the next heading are touched; the rest of the
203
- * body is byte-identical.
153
+ * Touches only the `## Changes` section; the rest stays byte-identical.
204
154
  *
205
155
  * @param {string} body
206
156
  * @param {(path: string) => boolean} existsAtBase
@@ -230,11 +180,9 @@ function repairSerializedBody(body, existsAtBase) {
230
180
  }
231
181
 
232
182
  /**
233
- * Repair the `changes[]` of one ticket, on whichever surface carries it.
234
- *
235
183
  * @param {object} ticket Mutated in place.
236
184
  * @param {(path: string) => boolean} existsAtBase
237
- * @returns {object[]} The repairs applied to this ticket.
185
+ * @returns {object[]}
238
186
  */
239
187
  function repairTicket(ticket, existsAtBase) {
240
188
  const body = ticket.body;
@@ -261,13 +209,6 @@ function repairTicket(ticket, existsAtBase) {
261
209
  }
262
210
 
263
211
  /**
264
- * Render one `changes[]` repair as the dry-run line the operator reads.
265
- *
266
- * The dry-run's repair list is mixed — an `acceptance[]` handle strip is
267
- * reported on it too — but the dispatch across kinds lives in
268
- * [`acceptance-handle-repair.js`](acceptance-handle-repair.js)`#renderRepair`,
269
- * which delegates here for this kind. Each producer owns its own line.
270
- *
271
212
  * @param {{ slug: string, from: string, path: string, assumption: string, reason: string }} repair
272
213
  * @returns {string}
273
214
  */
@@ -282,11 +223,8 @@ export function renderChangeRepair({ slug, from, path, assumption, reason }) {
282
223
  }
283
224
 
284
225
  /**
285
- * Rewrite every repairable `changes[]` entry across the draft, probing the
286
- * base branch for the assumption where none was authored. Mutates `tickets`
287
- * in place (the persist pipeline threads this same array on to assembly)
288
- * and returns the repairs, each tagged with the Story's slug. Total — a
289
- * non-array argument and non-Story tickets are no-ops.
226
+ * Mutates `tickets` in place — persist threads this same array on to
227
+ * assembly.
290
228
  *
291
229
  * @param {object[]} tickets
292
230
  * @param {{ existsAtBase: (path: string) => boolean }} args
@@ -1,25 +1,9 @@
1
1
  /**
2
- * cross-plan-links.js — resolve every reference a plan makes to something
3
- * outside itself, before anything is written.
4
- *
5
- * Story #5155. A plan can now point at two things it did not author: the
6
- * container Epic it wants to join (`--epic <id>`) and the open Stories it must
7
- * wait for (`depends_on: ["#<id>"]`). They are different features with
8
- * different owners, but they share the one property that decides *when* they
9
- * are checked, and that is what this module exists to express: both name live
10
- * tracker state, so both are verified **before the first `createIssue`**, dry
11
- * run included.
12
- *
13
- * The timing is the whole point. Either reference is free to fix while nothing
14
- * has been written and expensive afterwards — an unresolvable blocker left on
15
- * a live Story reads to the delivery engine as a permanent wedge rather than
16
- * an error worth reporting, and a mistyped Epic id would leave the operator
17
- * believing their Stories were filed somewhere they were not. Resolving them
18
- * together, at one call site, is what keeps a later edit from quietly moving
19
- * one of them after the creates.
2
+ * A plan's references to live tracker state (`--epic <id>`, `#<id>`
3
+ * blockers), verified together before the first create, dry run included —
4
+ * cheap to fix then, costly after.
20
5
  *
21
6
  * @module lib/orchestration/plan-persist/cross-plan-links
22
- * @see Story #5155
23
7
  */
24
8
 
25
9
  import { adoptContainerEpic, resolveAdoptionTarget } from './epic-adoption.js';
@@ -27,15 +11,12 @@ import { createContainerEpic } from './epic-ops.js';
27
11
  import { assertExternalDependenciesResolvable } from './external-deps.js';
28
12
 
29
13
  /**
30
- * Verify a plan's outward references and return the Epic it adopts.
31
- *
32
14
  * @param {{
33
15
  * provider: object,
34
16
  * stories: Array<{ slug: string, depends_on?: string[] }>,
35
17
  * epicId: number|null,
36
18
  * }} args
37
19
  * @returns {Promise<{ id: number, title: string, body: string }|null>}
38
- * The resolved adoption target, or `null` when none was requested.
39
20
  * @throws {Error} When a `#<id>` blocker or the named Epic cannot be used.
40
21
  */
41
22
  export async function resolveCrossPlanLinks({ provider, stories, epicId }) {
@@ -44,13 +25,8 @@ export async function resolveCrossPlanLinks({ provider, stories, epicId }) {
44
25
  }
45
26
 
46
27
  /**
47
- * Resolve this run's container Epic — adopted or newly created.
48
- *
49
- * The one entry point `run-plan-persist` calls, so the engine holds a single
50
- * statement rather than a branch it has to keep straight: which of the two
51
- * paths applies is decided by whether an adoption target was resolved before
52
- * the creates, and the two have opposite failure postures that are easy to
53
- * apply to the wrong one when the choice is inlined at the call site.
28
+ * Adopt the resolved target, else create. The two paths have opposite
29
+ * failure postures, so the choice lives here, not at the call site.
54
30
  *
55
31
  * @param {{
56
32
  * provider: object,
@@ -59,7 +35,7 @@ export async function resolveCrossPlanLinks({ provider, stories, epicId }) {
59
35
  * created: Array<{ id: number }>,
60
36
  * opts?: { dryRun?: boolean },
61
37
  * }} args
62
- * @returns {Promise<object|null>} `null` when this run has no container.
38
+ * @returns {Promise<object|null>}
63
39
  */
64
40
  export async function resolveContainerEpic({
65
41
  provider,
@@ -1,25 +1,10 @@
1
1
  /**
2
- * epic-adoption.js — join the Stories of this persist run to an Epic that
3
- * already exists.
4
- *
5
- * Story #5155. `epic-ops.js` opens a *new* container and, on a resumed run,
6
- * re-adopts the one carrying its exact fingerprint. This module covers the
7
- * case neither does: an operator pointing a fresh plan at an Epic an earlier
8
- * plan opened, with a different cohort and no fingerprint in common.
9
- *
10
- * **The posture is deliberately stricter than creation's.** Creation degrades
11
- * — an unensurable label just skips the container, because the Stories are the
12
- * part that matters and a missing Epic costs only tidiness. Adoption cannot
13
- * degrade the same way: the operator named a specific id, so silently not
14
- * adopting it would leave them believing their Stories were filed somewhere
15
- * they were not. A bad target is therefore a **hard error, raised before the
16
- * first Story is created** (dry run included), when nothing has been written
17
- * and the fix is free. Once the Stories exist, the posture flips to creation's
18
- * — a failed checklist write or sub-issue edge warns, because by then refusing
19
- * would strand live Stories over a cosmetic link.
2
+ * Join this run's Stories to an existing Epic the operator named (`--epic`).
3
+ * A bad target is a hard error raised before the first create — silently not
4
+ * adopting would misfile the plan. Once Stories exist, link failures only
5
+ * warn.
20
6
  *
21
7
  * @module lib/orchestration/plan-persist/epic-adoption
22
- * @see Story #5155
23
8
  */
24
9
 
25
10
  import { Logger } from '../../Logger.js';
@@ -29,14 +14,7 @@ import { isEpicTicket } from '../epic-container.js';
29
14
  import { mirrorSubIssueEdges } from './epic-ops.js';
30
15
 
31
16
  /**
32
- * Resolve and validate the Epic an operator asked to adopt.
33
- *
34
- * Called **before any create**, so every refusal below costs the operator a
35
- * re-run of a command that wrote nothing.
36
- *
37
- * A null/absent `epicId` is the ordinary "no adoption requested" case and
38
- * resolves to `null` — only a *supplied* id can be wrong, and every wrong one
39
- * throws.
17
+ * Called before any create. An absent `epicId` resolves to `null`.
40
18
  *
41
19
  * @param {{ provider: object, epicId: number|null }} opts
42
20
  * @returns {Promise<{ id: number, title: string, body: string }|null>}
@@ -91,11 +69,7 @@ export async function resolveAdoptionTarget({ provider, epicId }) {
91
69
  }
92
70
 
93
71
  /**
94
- * Link this run's Stories into an already-resolved Epic.
95
- *
96
- * Runs **after** the Stories exist, because both halves of the linkage need
97
- * their real ids: the checklist embeds issue numbers and the sub-issue edges
98
- * need database ids.
72
+ * Runs after the Stories exist — the linkage needs their real ids.
99
73
  *
100
74
  * @param {{
101
75
  * provider: object,
@@ -122,9 +96,7 @@ export async function adoptContainerEpic({
122
96
 
123
97
  const all = Array.isArray(created) ? created : [];
124
98
 
125
- // Dry run reports the intent write-free. `created` carries negative
126
- // placeholder ids there, so report them as-is rather than filtering to the
127
- // positives and claiming an empty adoption.
99
+ // Dry-run ids are negative placeholders; report them as-is.
128
100
  if (dryRun) {
129
101
  return {
130
102
  id: target.id,
@@ -163,29 +135,11 @@ export async function adoptContainerEpic({
163
135
  }
164
136
 
165
137
  /**
166
- * Write the appended checklist back to the Epic body.
167
- *
168
- * **The body is re-read `fresh` immediately before the append.** `target.body`
169
- * was captured by `resolveAdoptionTarget` before the first Story was created,
170
- * which on a cohort of any size is many seconds and several writes ago. An
171
- * append computed against that snapshot and PATCHed wholesale silently drops
172
- * every checklist row another writer added in between — a concurrent persist
173
- * run adopting the same Epic, or an operator ticking a child off by hand. The
174
- * body is a full-document write, so a stale base is not a merge conflict; it
175
- * is a silent revert.
176
- *
177
- * This **narrows** the read-then-PATCH window; it does not close it. Nothing
178
- * here is atomic, and GitHub's issue API offers no compare-and-swap, so a
179
- * write landing between this read and this PATCH is still lost. Narrowing it
180
- * from "the whole create phase" to "one round-trip" is the available fix; a
181
- * real one needs an API that does not exist.
182
- *
183
- * The PATCH is skipped when the append changes nothing, so re-running an
184
- * adoption that already landed writes nothing at all.
185
- *
186
- * Non-fatal: the Stories are already live, and the native sub-issue edges
187
- * written next are the other half of the linkage. Losing the checklist costs
188
- * the body-only fallback path, not the grouping.
138
+ * The body is re-read fresh right before the append: the body PATCH is a
139
+ * whole-document write, so appending to the pre-create snapshot would
140
+ * silently revert rows another writer added since. This narrows the window
141
+ * to one round-trip; GitHub offers no compare-and-swap to close it. Skips the
142
+ * PATCH when nothing changes. Non-fatal.
189
143
  *
190
144
  * @param {{ provider: object, target: { id: number, body: string }, childIds: number[] }} opts
191
145
  * @returns {Promise<void>}
@@ -212,13 +166,8 @@ async function appendChecklist({ provider, target, childIds }) {
212
166
  }
213
167
 
214
168
  /**
215
- * Re-read the Epic's body, bypassing any provider cache.
216
- *
217
- * `{ fresh: true }` is the whole point: the adoption path already read this
218
- * issue once, so a cached read would hand back the very snapshot this function
219
- * exists to replace. Falls back to the snapshot when the re-read fails or the
220
- * provider has no `getTicket` — a stale base still appends the run's own
221
- * children, which beats not linking them.
169
+ * `{ fresh: true }` bypasses the cache that holds the stale snapshot. Falls
170
+ * back to the snapshot, which still links this run's children.
222
171
  *
223
172
  * @param {{ provider: object, target: { id: number, body: string } }} opts
224
173
  * @returns {Promise<string>}