mandrel 2.60.0 → 2.62.0

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