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,47 +1,7 @@
1
1
  /**
2
- * temp-retention.js — allowlisted auto-purge of spent temp artifacts (Story #4794).
3
- *
4
- * The workspace temp tree grew without bound: every landed Story left its
5
- * close-gate transcript (~1.4MB each), its terse-result detail dumps, and its
6
- * validation-evidence envelope behind forever, because no code path had ever
7
- * removed them. This module is the single engine that reclaims them.
8
- *
9
- * ## Allowlist, never a blocklist
10
- *
11
- * The safety property that matters is not "delete the right things" but
12
- * "never delete the wrong thing". So classification is positive: an artifact
13
- * is a purge candidate only when a declared class claims it. Everything else —
14
- * an operator's scratch directory, a hand-parked file, a family a future
15
- * Story adds without teaching this module about it — is **unrecognized**, is
16
- * never touched, and is reported with its byte size so a human decides. A
17
- * blocklist would have the opposite failure mode: anything the framework
18
- * forgot to exclude gets deleted.
19
- *
20
- * ## Two eligibility signals, deliberately different in strength
21
- *
22
- * - **Story-keyed.** An artifact whose name carries a Story id is purged when
23
- * that Story's merge has been *confirmed* by the caller — the post-land tail
24
- * or a boot sweep that read live state. This is the primary path and the one
25
- * the operator asked for: spent the moment the work lands.
26
- * - **Age-floored.** Artifacts no Story id can be recovered from (audit
27
- * reports, abandoned `plan-<slug>/` dirs) fall back to a `staleDays` floor.
28
- * Only the sweep opts into this; the per-Story purge never does, so a
29
- * post-land tail can never reap a sibling's in-flight artifact.
30
- *
31
- * ## Keep-class
32
- *
33
- * `signals.ndjson` is the artifact whose value *starts* when the run ends —
34
- * `acceptance-eval` and the loop-health check both read it
35
- * long after the Story merged. It is excluded twice over: it is not in the
36
- * evidence basename allowlist, and {@link KEEP_BASENAMES} is re-checked at
37
- * the deletion site. Defence in depth is warranted for the one file whose
38
- * loss is silent and unrecoverable.
39
- *
40
- * ## Best-effort, never load-bearing
41
- *
42
- * Every entry point resolves rather than throws. This is hygiene: a purge
43
- * that fails must never fail a land, a boot, or a persist that already did
44
- * its real work. Failures are collected into `errors[]` and reported.
2
+ * Allowlisted auto-purge of spent temp artifacts: only a declared class's
3
+ * entries are candidates; the rest are reported, never touched. Never throws
4
+ * — a failed purge must not fail a land, boot, or persist.
45
5
  */
46
6
 
47
7
  import fsPromises from 'node:fs/promises';
@@ -55,9 +15,8 @@ import {
55
15
  import { Logger } from './Logger.js';
56
16
 
57
17
  /**
58
- * Shipped defaults for `delivery.tempRetention`. `enabled` defaults to `true`:
59
- * the operator asked for auto-purge to be the behaviour, with the knob there
60
- * to turn it off rather than to turn it on.
18
+ * Defaults for `delivery.tempRetention`; purge is on unless turned off.
19
+ * `staleDays` is not configurable — only switches that turn a deletion off are.
61
20
  */
62
21
  export const TEMP_RETENTION_DEFAULTS = Object.freeze({
63
22
  enabled: true,
@@ -70,50 +29,36 @@ export const TEMP_RETENTION_DEFAULTS = Object.freeze({
70
29
  }),
71
30
  });
72
31
 
73
- /** Every declared purge class, in classification order. */
74
32
  export const PURGE_CLASS_NAMES = Object.freeze(
75
33
  Object.keys(TEMP_RETENTION_DEFAULTS.classes),
76
34
  );
77
35
 
78
36
  /**
79
- * Basenames no path may ever delete, re-checked at the deletion site even
80
- * though classification already excludes them. See the module header.
37
+ * Never deleted, re-checked at the deletion site: `signals.ndjson` is read
38
+ * long after merge and its loss is silent and unrecoverable.
81
39
  */
82
40
  export const KEEP_BASENAMES = Object.freeze(['signals.ndjson']);
83
41
 
84
- /**
85
- * The per-Story artifact basenames `validationEvidence` claims. An explicit
86
- * allowlist rather than a "delete everything but signals" rule: a file this
87
- * module has not been taught about is kept, not guessed at.
88
- */
42
+ /** Explicit allowlist: an untaught file in a Story dir is kept. */
89
43
  const STORY_EVIDENCE_BASENAMES = Object.freeze([
90
44
  'validation-evidence.json',
91
45
  'lifecycle.ndjson',
92
46
  'manifest.md',
93
47
  ]);
94
48
 
95
- /**
96
- * Top-level temp entries that belong to the framework but are never purge
97
- * candidates: `qa/` holds resumable operator-owned session ledgers, `cache/`
98
- * has its own invalidation, and `*.lock` files are live coordination state.
99
- */
49
+ /** Framework-owned, never purged (`*.lock` files are also skipped). */
100
50
  const RESERVED_TOP_LEVEL = Object.freeze(['qa', 'cache']);
101
51
 
102
52
  const MS_PER_DAY = 24 * 60 * 60 * 1000;
103
53
 
104
- /** `story-4794` → `4794`. */
105
54
  const STORY_DIR_PATTERN = /^story-(\d+)$/;
106
- /** `close-gates-4794`, `sync-result-story-4794` → `4794`. */
107
55
  const TRAILING_ID_PATTERN = /-(\d+)$/;
108
- /** `audit-story-4794-audit-clean-code.md` → `4794`. */
109
56
  const AUDIT_STORY_PATTERN = /^audit-story-(\d+)-/;
110
- /** `run-1030` — a per-run temp tree holding `stories/story-<id>/` children. */
57
+ /** Per-run temp tree holding `stories/story-<id>/` children. */
111
58
  const RUN_DIR_PATTERN = /^run-\d+$/;
112
59
 
113
60
  /**
114
- * Resolve the effective retention policy, filling every field from
115
- * {@link TEMP_RETENTION_DEFAULTS}. An unset block yields the defaults, so a
116
- * consumer that never heard of this feature gets the purge.
61
+ * Effective retention policy, defaults filled in.
117
62
  *
118
63
  * @param {object} [config] Resolved config bag.
119
64
  * @returns {{ enabled: boolean, staleDays: number, classes: Record<string, boolean> }}
@@ -127,15 +72,13 @@ export function resolveTempRetention(config) {
127
72
  }
128
73
  return {
129
74
  enabled: raw.enabled ?? TEMP_RETENTION_DEFAULTS.enabled,
130
- staleDays: raw.staleDays ?? TEMP_RETENTION_DEFAULTS.staleDays,
75
+ staleDays: TEMP_RETENTION_DEFAULTS.staleDays,
131
76
  classes,
132
77
  };
133
78
  }
134
79
 
135
80
  /**
136
- * `readdir` that yields `[]` for a directory that does not exist or cannot be
137
- * read. Every scan below walks optional trees, so an absent one is the normal
138
- * case, not an error.
81
+ * `readdir` yielding `[]` for an absent or unreadable directory.
139
82
  *
140
83
  * @param {typeof fsPromises} fsp
141
84
  * @param {string} dir
@@ -150,8 +93,7 @@ async function safeReaddir(fsp, dir) {
150
93
  }
151
94
 
152
95
  /**
153
- * Total bytes under a path — the file's own size, or the recursive sum for a
154
- * directory. Reporting-only: a vanished child is skipped rather than fatal.
96
+ * Recursive byte total; a vanished child is skipped.
155
97
  *
156
98
  * @param {typeof fsPromises} fsp
157
99
  * @param {string} target
@@ -180,10 +122,8 @@ async function sizeOf(fsp, target) {
180
122
  }
181
123
 
182
124
  /**
183
- * Build one classified entry. `mtimeMs` is the entry's **own** mtime, not the
184
- * newest mtime beneath it — that is the semantics the shipped stale-plan-dir
185
- * reap has always used, and widening it here would silently change when an
186
- * abandoned directory becomes eligible.
125
+ * One classified entry. `mtimeMs` is the entry's own mtime, not the newest
126
+ * beneath it; widening it would change when an abandoned dir becomes eligible.
187
127
  *
188
128
  * @param {typeof fsPromises} fsp
189
129
  * @param {string} target
@@ -209,19 +149,12 @@ async function makeEntry(fsp, target, className, storyId, keep = false) {
209
149
  };
210
150
  }
211
151
 
212
- /**
213
- * Extensions this class owns inside `orchestration/`. Story #4816 added
214
- * `.json`: the persisted terminal envelope lands beside the gate log, and a
215
- * `.log`-only scan would have left one immortal file per delivered Story in a
216
- * directory the purge otherwise keeps clean.
217
- */
152
+ /** `.json` covers the persisted terminal envelope beside each gate log. */
218
153
  const ORCHESTRATION_EXTENSIONS = Object.freeze(['.log', '.json']);
219
154
 
220
155
  /**
221
- * Recover the Story id a run-artifact basename carries. Every writer that
222
- * lands in `orchestration/` ends its name with the scope: `close-gates-4794.log`
223
- * from the gate sink, `sync-result-story-4794.log` from the terse-result dump,
224
- * `story-deliver-terminal-4794.json` from the terminal-envelope persist.
156
+ * Story id from an `orchestration/` basename; every writer there ends the
157
+ * name with `-<id>`.
225
158
  *
226
159
  * @param {string} name
227
160
  * @returns {number|null}
@@ -231,12 +164,7 @@ function storyIdFromLogName(name) {
231
164
  return match ? Number(match[1]) : null;
232
165
  }
233
166
 
234
- /**
235
- * `<tempRoot>/orchestration/*.{log,json}` — close gate transcripts,
236
- * terse-result detail dumps, and persisted terminal envelopes. An artifact
237
- * whose name carries no id (there are none today, but the class owns the
238
- * directory) is age-floored rather than dropped from the class.
239
- */
167
+ /** `<tempRoot>/orchestration/*.{log,json}`; an id-less name is age-floored. */
240
168
  async function scanOrchestrationLogs(tempRoot, fsp) {
241
169
  const dir = path.join(tempRoot, ORCHESTRATION_DIRNAME);
242
170
  const entries = [];
@@ -258,10 +186,7 @@ async function scanOrchestrationLogs(tempRoot, fsp) {
258
186
  return entries;
259
187
  }
260
188
 
261
- /**
262
- * Every directory that holds `story-<id>/` children: the standalone tree and
263
- * each per-run tree.
264
- */
189
+ /** Directories holding `story-<id>/` children: standalone and per-run. */
265
190
  async function storyParentDirs(tempRoot, fsp) {
266
191
  const parents = [path.join(tempRoot, 'standalone', 'stories')];
267
192
  for (const dirent of await safeReaddir(fsp, tempRoot)) {
@@ -273,11 +198,8 @@ async function storyParentDirs(tempRoot, fsp) {
273
198
  }
274
199
 
275
200
  /**
276
- * `<…>/stories/story-<id>/*` — the per-Story delivery artifacts.
277
- *
278
- * Every file in the directory is emitted, but only the declared evidence
279
- * basenames are purge candidates; `signals.ndjson` and anything unrecognized
280
- * are emitted with `keep: true` so the envelope can show what survived.
201
+ * `<…>/stories/story-<id>/*`; non-allowlisted files are emitted `keep: true`
202
+ * so the envelope shows what survived.
281
203
  */
282
204
  async function scanValidationEvidence(tempRoot, fsp) {
283
205
  const entries = [];
@@ -302,10 +224,7 @@ async function scanValidationEvidence(tempRoot, fsp) {
302
224
  return entries;
303
225
  }
304
226
 
305
- /**
306
- * `<tempRoot>/audits/*` — audit reports. `audit-story-<id>-<lens>.md` is
307
- * Story-keyed; the roster-level reports and profiling output are age-floored.
308
- */
227
+ /** `<tempRoot>/audits/*`; `audit-story-<id>-*` is Story-keyed, rest age-floored. */
309
228
  async function scanAuditResults(tempRoot, fsp) {
310
229
  const dir = path.join(tempRoot, 'audits');
311
230
  const entries = [];
@@ -322,10 +241,7 @@ async function scanAuditResults(tempRoot, fsp) {
322
241
  return entries;
323
242
  }
324
243
 
325
- /**
326
- * `<tempRoot>/plan-<slug>/` — plan authoring dirs. Never Story-keyed: the
327
- * directory predates the Stories it creates, so age is the only safe signal.
328
- */
244
+ /** `<tempRoot>/plan-<slug>/`: predates its Stories, so age is the only signal. */
329
245
  async function scanPlanDirs(tempRoot, fsp) {
330
246
  const entries = [];
331
247
  for (const dirent of await safeReaddir(fsp, tempRoot)) {
@@ -341,7 +257,6 @@ async function scanPlanDirs(tempRoot, fsp) {
341
257
  return entries;
342
258
  }
343
259
 
344
- /** Class name → scanner. Iteration order matches {@link PURGE_CLASS_NAMES}. */
345
260
  const SCANNERS = Object.freeze({
346
261
  orchestrationLogs: scanOrchestrationLogs,
347
262
  validationEvidence: scanValidationEvidence,
@@ -350,9 +265,8 @@ const SCANNERS = Object.freeze({
350
265
  });
351
266
 
352
267
  /**
353
- * Does a top-level temp entry belong to a declared class? Kept in lockstep
354
- * with the scanners above: an entry no class walks must show up as
355
- * unrecognized, never be silently ignored.
268
+ * Keep in lockstep with the scanners: an entry no class walks must surface
269
+ * as unrecognized.
356
270
  *
357
271
  * @param {string} name
358
272
  * @returns {boolean}
@@ -368,9 +282,7 @@ function isClassOwnedTopLevel(name) {
368
282
  }
369
283
 
370
284
  /**
371
- * Top-level entries that no class claims and that are not framework-reserved.
372
- * Reported with byte sizes, never deleted — this is what makes a 49MB scratch
373
- * directory visible to the operator instead of invisible to the tooling.
285
+ * Unclaimed, non-reserved top-level entries: reported with sizes, never deleted.
374
286
  *
375
287
  * @param {string} tempRoot
376
288
  * @param {typeof fsPromises} fsp
@@ -389,8 +301,7 @@ async function collectUnrecognized(tempRoot, fsp) {
389
301
  }
390
302
 
391
303
  /**
392
- * Classify a whole temp tree without deleting anything. Exported so a caller
393
- * (or a test) can see exactly what the purge would consider.
304
+ * Classify a temp tree without deleting anything.
394
305
  *
395
306
  * @param {{ config?: object, tempRoot?: string, fsp?: typeof fsPromises }} [args]
396
307
  * @returns {Promise<{ tempRoot: string, entries: object[], unrecognized: Array<{ path: string, bytes: number }> }>}
@@ -413,8 +324,6 @@ export async function collectTempEntries({
413
324
  }
414
325
 
415
326
  /**
416
- * Is this entry eligible for deletion under the current policy and signals?
417
- *
418
327
  * @param {object} entry
419
328
  * @param {object} ctx
420
329
  * @returns {boolean}
@@ -430,23 +339,20 @@ function isPurgeable(entry, ctx) {
430
339
  }
431
340
 
432
341
  /**
433
- * The purge core. Deliberately **module-private**: the two exported entry
434
- * points below are the whole public surface, and each encodes a policy
435
- * decision (Story-keyed vs. age-floored) that a caller reaching this directly
436
- * could get wrong. Exporting it would also be a dead export — nothing outside
437
- * this file has a reason to call it.
342
+ * Purge core; module-private because each exported entry point encodes the
343
+ * Story-keyed vs. age-floored policy a direct caller could get wrong.
438
344
  *
439
345
  * @param {object} [args]
440
- * @param {object} [args.config] Resolved config bag.
346
+ * @param {object} [args.config]
441
347
  * @param {number[]} [args.storyIds] Stories whose merge the caller CONFIRMED.
442
348
  * @param {boolean} [args.sweepStale] Opt into the age floor for un-keyed entries.
443
- * @param {string[]|null} [args.only] Restrict to these class names.
444
- * @param {string[]} [args.excludePaths] Absolute paths to leave alone.
445
- * @param {number} [args.now] Clock seam.
446
- * @param {string} [args.tempRoot] Temp root override (tests).
447
- * @param {typeof fsPromises} [args.fsp] Filesystem seam.
448
- * @param {{ info: Function }} [args.logger] Logger seam.
449
- * @param {string} [args.label] Prefix for the single summary line.
349
+ * @param {string[]|null} [args.only]
350
+ * @param {string[]} [args.excludePaths]
351
+ * @param {number} [args.now]
352
+ * @param {string} [args.tempRoot]
353
+ * @param {typeof fsPromises} [args.fsp]
354
+ * @param {{ info: Function }} [args.logger]
355
+ * @param {string} [args.label]
450
356
  * @returns {Promise<object>} Result envelope; never throws.
451
357
  */
452
358
  async function purgeTempArtifacts({
@@ -501,7 +407,6 @@ async function purgeTempArtifacts({
501
407
  result.purged.push({ path: entry.path, bytes: entry.bytes });
502
408
  result.bytesReclaimed += entry.bytes;
503
409
  } catch (err) {
504
- // A racing writer or a permission error: leave it for the next run.
505
410
  result.errors.push(`${entry.path}: ${String(err?.message ?? err)}`);
506
411
  }
507
412
  }
@@ -516,8 +421,6 @@ async function purgeTempArtifacts({
516
421
  }
517
422
 
518
423
  /**
519
- * Human-readable byte count for the one summary line.
520
- *
521
424
  * @param {number} bytes
522
425
  * @returns {string}
523
426
  */
@@ -534,9 +437,7 @@ export function formatBytes(bytes) {
534
437
  }
535
438
 
536
439
  /**
537
- * Purge one merged Story's spent artifacts. Called from the post-land tail,
538
- * where "merged" is already confirmed — so this never applies the age floor
539
- * and can never touch a sibling Story's in-flight artifacts.
440
+ * Purge one confirmed-merged Story's artifacts; never applies the age floor.
540
441
  *
541
442
  * @param {{ storyId: number, config?: object, now?: number, tempRoot?: string,
542
443
  * fsp?: typeof fsPromises, logger?: object }} args
@@ -552,10 +453,8 @@ export async function purgeStoryTempArtifacts({ storyId, config, ...rest }) {
552
453
  }
553
454
 
554
455
  /**
555
- * Catch-up sweep: purge the artifacts of every Story the caller confirmed
556
- * merged, plus every age-floored entry past `staleDays`. This is the path
557
- * that reclaims a backlog — Stories merged in an earlier run, merged through
558
- * the GitHub UI, or delivered before this feature existed.
456
+ * Catch-up sweep: confirmed-merged Stories plus age-floored entries past
457
+ * `staleDays`.
559
458
  *
560
459
  * @param {{ config?: object, mergedStoryIds?: number[], now?: number,
561
460
  * tempRoot?: string, fsp?: typeof fsPromises, logger?: object,
@@ -5,43 +5,13 @@ import {
5
5
  import { BODY_FORMAT_LINTS } from '../story-body/body-format-lints.js';
6
6
 
7
7
  /**
8
- * The story-author system prompt (Story #5312 — rendered from the draft's
9
- * Story count).
10
- *
11
- * **Single source of the prompt body (Story #4162).** This module is the sole
12
- * carrier of the story-author system prompt, delivered to the host LLM in the
13
- * `systemPrompts.story` field of the `/mandrel-plan` context envelope (via
14
- * `lib/orchestration/plan-context.js#buildSystemPrompts`), so no second
15
- * verbatim copy can drift.
16
- *
17
- * Two layers, composed by {@link renderStoryAuthorPrompt}:
18
- *
19
- * - **The N=1 core** ({@link renderStoryAuthorCore}) — what every draft
20
- * needs: the body schema, the contract-level Spec rule, the deterministic
21
- * body-format lints, and acceptance defined as outcomes a PR reviewer can
22
- * confirm from the diff and the verify output. It carries no delivery
23
- * schedule, no per-file behavior paragraphs, no reviewability budget and
24
- * no verify-tier suffix — every one of those either scored a shape the
25
- * authoring model already judges or prescribed a proxy that became the
26
- * goal.
27
- * - **The N>1 rules** ({@link renderStorySplitRules}) — the schedule rules
28
- * that only mean anything once a draft has siblings: every Story must
29
- * earn its slot in the wave schedule, and no same-wave pair may collide
30
- * on a declared path (Story #5332 replaced the acceptance partition with
31
- * the dispatcher's own collision predicate, armed as a refusal).
32
- * - **The tickets-mode rules** ({@link ticketsModePromptField}, Story
33
- * #5323) — what to re-derive rather than carry when the seed is an
34
- * existing ticket whose body is already in Story shape.
35
- *
36
- * The envelope carries the core as `systemPrompts.story`, the split rules as
37
- * `systemPrompts.storySplitRules` and the tickets rules as
38
- * `systemPrompts.storyTicketsRules`; a planner reads the second only when the
39
- * default-single split policy clears, and the third only in tickets mode.
8
+ * The sole source of the story-author system prompt, shipped in the
9
+ * `/mandrel-plan` envelope as `systemPrompts.story` (the N=1 core),
10
+ * `storySplitRules` (read only at N>1) and `storyTicketsRules` (tickets mode
11
+ * only).
40
12
  */
41
13
 
42
14
  /**
43
- * The N=1 core of the story-author prompt.
44
- *
45
15
  * @returns {string}
46
16
  */
47
17
  export function renderStoryAuthorCore() {
@@ -55,11 +25,8 @@ export function renderStoryAuthorCore() {
55
25
  advisoryCaveat,
56
26
  newFileContract,
57
27
  } = AUTHORING_ALTITUDE_GUIDANCE;
58
- // The deterministic body-format lints (structured `## Changes` bullet shape,
59
- // non-empty sections) rendered example-first from their single source
60
- // (`lib/story-body/body-format-lints.js`) so an authored draft is lint-clean
61
- // by construction rather than discovered as a persist dry-run failure and
62
- // re-authored at resident-context prices (Story #4684).
28
+ // Rendered example-first so a draft is lint-clean by construction rather
29
+ // than re-authored after a persist dry-run failure.
63
30
  const bodyFormatLintChecklist = BODY_FORMAT_LINTS.map(
64
31
  (lint) =>
65
32
  `- **${lint.id}** — ${lint.summary} Example: \`${lint.goodExample}\``,
@@ -192,10 +159,6 @@ IMPORTANT DEPENDENCY RULE: Story-to-Story dependencies are expressed via \`depen
192
159
  }
193
160
 
194
161
  /**
195
- * The rules that only apply once a draft has more than one Story: the
196
- * delivery-schedule simulation that makes each Story earn its slot, and the
197
- * same-wave collision refusal persist enforces at N>1.
198
- *
199
162
  * @returns {string}
200
163
  */
201
164
  export function renderStorySplitRules() {
@@ -221,16 +184,9 @@ Each Story carries its **own** \`## Spec\`; a shared \`techspec.md\` cannot be f
221
184
  }
222
185
 
223
186
  /**
224
- * The rules that only apply when the seed is an existing ticket (Story
225
- * #5323).
226
- *
227
- * A `--tickets` seed arrives already in Story shape — rendered `AC-<n>:`
228
- * checkboxes, a `## Verify` list, a `## Changes` footprint — and an author
229
- * reading it as a template carries that shape forward instead of re-deriving
230
- * it. The observed failure (swarm-os #2707 / #2708, planned from #2542 under
231
- * mandrel 2.57.0) was a Story whose acceptance list was the source's, handles
232
- * and all, and whose verify entries carried a tier suffix retired two
233
- * releases earlier. The source ticket is **evidence**, not a draft.
187
+ * A `--tickets` seed already arrives in Story shape, and an author reading it
188
+ * as a template carries stale handles and retired suffixes forward; the
189
+ * source is evidence, not a draft.
234
190
  *
235
191
  * @returns {string}
236
192
  */
@@ -247,10 +203,6 @@ You are planning from one or more existing tickets. Read them for **what the wor
247
203
  }
248
204
 
249
205
  /**
250
- * Render the story-author prompt for a draft of `storyCount` Stories: the
251
- * N=1 core, plus the schedule and partition rules when the draft has
252
- * siblings.
253
- *
254
206
  * @param {{ storyCount?: number }} [args]
255
207
  * @returns {string}
256
208
  */
@@ -260,14 +212,8 @@ export function renderStoryAuthorPrompt({ storyCount = 1 } = {}) {
260
212
  }
261
213
 
262
214
  /**
263
- * The mode-conditional slice of `systemPrompts`.
264
- *
265
- * `storyTicketsRules` only means anything when the seed is an existing
266
- * ticket, and an envelope carrying it in every mode teaches the author to
267
- * look for a source ticket a `--seed` run does not have. Returning a
268
- * spreadable object rather than a nullable string keeps the decision here,
269
- * beside the prompt it selects, instead of as a branch in the envelope
270
- * builder.
215
+ * Spreadable into `systemPrompts`: present only in tickets mode, since
216
+ * elsewhere it would send the author looking for a source ticket.
271
217
  *
272
218
  * @param {string|undefined} mode The plan-context mode.
273
219
  * @returns {{ storyTicketsRules?: string }}
@@ -5,49 +5,20 @@ import path from 'node:path';
5
5
  import { TEST_TEMP_ROOT_ENV } from './config/temp-paths.js';
6
6
  import { reapOnExit } from './test-temp.js';
7
7
 
8
- /**
9
- * Per-process memo for the created scratch dir, so repeated calls in one
10
- * runner process (e.g. building env bags for several chunks) share a single
11
- * scratch tree instead of minting one dir per call.
12
- */
8
+ /** Per-process memo: one scratch tree per runner process. */
13
9
  let _createdScratchDir = null;
14
10
 
15
- /**
16
- * Test-only: clear the per-process scratch memo so a suite can exercise the
17
- * creation branch repeatedly in one process.
18
- */
11
+ /** Test-only: clear the scratch memo. */
19
12
  export function _clearTestScratchTempRootCache() {
20
13
  _createdScratchDir = null;
21
14
  }
22
15
 
23
16
  /**
24
- * Ensure an absolute per-process scratch tempRoot is available for the test
25
- * run and return it (Story #4696).
26
- *
27
- * If `baseEnv` already carries an absolute `MANDREL_TEST_TEMP_ROOT` (the
28
- * common case for a child process that inherits the parent runner's env),
29
- * that value is reused verbatim so every chunk / worker of a single suite
30
- * run shares one scratch dir. Otherwise a fresh `os.tmpdir()` directory is
31
- * created once per process (memoized). Every stream writer that resolves a
32
- * relative tempRoot then lands under this dir instead of the repo's real
33
- * `temp/` telemetry tree — the regression that let 99% of friction records
34
- * be test-fixture pollution.
35
- *
36
- * Reaping (Story #4808): the minting process registers removal of the
37
- * scratch dir at exit. This branch is creator-only by construction — a
38
- * process that inherited an absolute root returns above without ever
39
- * touching the memo, so a child can never delete its parent's scratch
40
- * while the parent is still writing to it. Left unreaped, this seam was
41
- * the single largest contributor to the OS-temp-root leak (870 surviving
42
- * `mandrel-test-temp-` roots on one host), because it mints one per
43
- * `run-tests.js` invocation.
44
- *
45
- * Directly unit-tested via the injectable `mkdtemp` seam in
46
- * `tests/lib/test-env.test.js` (Story #4711).
17
+ * Per-process scratch tempRoot keeping tests out of real `temp/` telemetry.
18
+ * An inherited absolute root is reused; only the minting process reaps it.
47
19
  *
48
20
  * @param {NodeJS.ProcessEnv} [baseEnv=process.env]
49
21
  * @param {{ mkdtemp?: typeof mkdtempSync, onExit?: (fn: () => void) => void }} [deps]
50
- * Injectable for tests.
51
22
  * @returns {string} absolute scratch tempRoot
52
23
  */
53
24
  export function ensureTestScratchTempRoot(
@@ -70,39 +41,15 @@ export function ensureTestScratchTempRoot(
70
41
  }
71
42
 
72
43
  /**
73
- * Build a webhook-safe child-process environment for test runners.
74
- *
75
- * Operators keep a real `NOTIFICATION_WEBHOOK_URL` in `.env` for development
76
- * (the production `notify()` path reads it via `process.env` after
77
- * `resolveConfig()` calls `loadEnv()`). Without scrubbing, any test that
78
- * transitively reaches `notify()` POSTs to the live endpoint.
79
- *
80
- * This helper produces the env bag that test child processes inherit:
44
+ * Env bag for test child processes:
81
45
  *
82
- * - `NOTIFICATION_WEBHOOK_URL` is deleted unless the operator opted in
83
- * via `MANDREL_ALLOW_TEST_WEBHOOKS=1` (e.g., a contract test
84
- * deliberately exercising a sandbox endpoint). With the URL scrubbed,
85
- * `resolveWebhookUrl()` returns nothing and `notify()` never POSTs.
86
- * - `NODE_ENV=test` is set for the rest of the suite's environment
87
- * expectations. (It no longer gates `notify()`'s webhook delivery —
88
- * the NODE_ENV band-aid was removed in Story #3342. Tests that need to
89
- * exercise the webhook POST inject `opts.fetchImpl` instead, so the
90
- * request never reaches the real network even if a URL resolves.)
91
- * - Every `GIT_*` variable is dropped. When the suite runs inside a git
92
- * hook (husky pre-push via the coverage-capture path), the parent git
93
- * invocation exports `GIT_DIR` — from a linked worktree, the absolute
94
- * `<main>/.git/worktrees/<name>` path. A test fixture's `git init`
95
- * under that env re-initializes the shared gitdir and writes
96
- * `core.bare=true` into the MAIN checkout's `.git/config`, breaking
97
- * every worktree at once (#4580). Production git call sites are
98
- * covered by `cleanGitEnv` in `git-utils.js`; this is the same scrub
99
- * for test child processes, which may spawn git directly. Tests that
100
- * need a `GIT_*` variable set it explicitly on their own spawn.
101
- * - `MANDREL_TEST_TEMP_ROOT` is set to an absolute per-process scratch
102
- * dir (Story #4696). Any test that reaches a stream writer without
103
- * injecting its own absolute tempRoot lands under scratch instead of
104
- * the repo's real `temp/` telemetry tree, so the suite can no longer
105
- * append fixture records to friction / lifecycle / trace streams.
46
+ * - `NOTIFICATION_WEBHOOK_URL` is deleted (unless
47
+ * `MANDREL_ALLOW_TEST_WEBHOOKS=1`) so no test POSTs to a live endpoint;
48
+ * - `NODE_ENV` defaults to `test`;
49
+ * - every `GIT_*` is dropped: inside a git hook `GIT_DIR` points at the
50
+ * shared gitdir, and a fixture's `git init` there writes `core.bare=true`
51
+ * into the main checkout, breaking every worktree;
52
+ * - `MANDREL_TEST_TEMP_ROOT` points at the per-process scratch root.
106
53
  *
107
54
  * @param {NodeJS.ProcessEnv} baseEnv
108
55
  * @returns {NodeJS.ProcessEnv}