mandrel 2.59.0 → 2.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (678) hide show
  1. package/.agents/README.md +21 -19
  2. package/.agents/agents/acceptance-critic.md +24 -43
  3. package/.agents/agents/story-worker.md +20 -21
  4. package/.agents/docs/agentrc-reference.json +5 -84
  5. package/.agents/docs/configuration.md +48 -132
  6. package/.agents/docs/workflows.md +2 -2
  7. package/.agents/instructions.md +5 -8
  8. package/.agents/rules/ci-remediation.md +41 -8
  9. package/.agents/rules/gherkin-standards.md +4 -0
  10. package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
  11. package/.agents/schemas/agentrc.schema.json +16 -496
  12. package/.agents/schemas/story-deliver-terminal.schema.json +13 -3
  13. package/.agents/schemas/validation-evidence.schema.json +2 -1
  14. package/.agents/scripts/README.md +23 -13
  15. package/.agents/scripts/acceptance-eval.js +35 -169
  16. package/.agents/scripts/agents-bootstrap-github.js +27 -129
  17. package/.agents/scripts/apply-quality-bootstrap.js +4 -40
  18. package/.agents/scripts/audit-baselines.js +6 -27
  19. package/.agents/scripts/audit-labels-bootstrap.js +5 -29
  20. package/.agents/scripts/audit-to-stories.js +91 -361
  21. package/.agents/scripts/boot-sweep.js +19 -72
  22. package/.agents/scripts/bootstrap.js +74 -395
  23. package/.agents/scripts/ceremony-derive.js +10 -41
  24. package/.agents/scripts/check-arch-cycles.js +14 -64
  25. package/.agents/scripts/check-baselines.js +8 -48
  26. package/.agents/scripts/check-context-budget.js +105 -311
  27. package/.agents/scripts/check-cyclomatic.js +12 -44
  28. package/.agents/scripts/check-dead-exports.js +13 -64
  29. package/.agents/scripts/check-doc-links.js +38 -186
  30. package/.agents/scripts/check-gherkin-corpus.js +24 -127
  31. package/.agents/scripts/check-test-temp-hygiene.js +28 -169
  32. package/.agents/scripts/coverage-capture.js +34 -98
  33. package/.agents/scripts/deliver-light.js +25 -171
  34. package/.agents/scripts/deliver-recover.js +6 -42
  35. package/.agents/scripts/deliver-run.js +534 -0
  36. package/.agents/scripts/diagnose-friction.js +24 -116
  37. package/.agents/scripts/drain-pending-cleanup.js +1 -1
  38. package/.agents/scripts/evidence-gate.js +23 -85
  39. package/.agents/scripts/file-ci-gap.js +57 -49
  40. package/.agents/scripts/generate-config-docs.js +30 -170
  41. package/.agents/scripts/generate-lens-checklists.js +8 -52
  42. package/.agents/scripts/generate-skills-index.js +14 -112
  43. package/.agents/scripts/generate-workflows-doc.js +10 -70
  44. package/.agents/scripts/git-cleanup.js +2 -34
  45. package/.agents/scripts/lib/Graph.js +24 -81
  46. package/.agents/scripts/lib/ITicketingProvider.js +47 -143
  47. package/.agents/scripts/lib/Logger.js +14 -76
  48. package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
  49. package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
  50. package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
  51. package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
  52. package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
  53. package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
  54. package/.agents/scripts/lib/audit-baselines/read.js +3 -16
  55. package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
  56. package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
  57. package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
  58. package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
  59. package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
  60. package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
  61. package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
  62. package/.agents/scripts/lib/audit-suite/findings.js +12 -52
  63. package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
  64. package/.agents/scripts/lib/audit-suite/index.js +1 -15
  65. package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
  66. package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
  67. package/.agents/scripts/lib/audit-suite/runner.js +13 -43
  68. package/.agents/scripts/lib/audit-suite/selector.js +49 -349
  69. package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
  70. package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
  71. package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
  72. package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
  73. package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
  74. package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
  75. package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
  76. package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
  77. package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
  78. package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
  79. package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
  80. package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
  81. package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
  82. package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
  83. package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
  84. package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
  85. package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
  86. package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
  87. package/.agents/scripts/lib/baseline-loader.js +12 -51
  88. package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
  89. package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
  90. package/.agents/scripts/lib/baselines/components.js +10 -61
  91. package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
  92. package/.agents/scripts/lib/baselines/crap-preview-incremental.js +7 -19
  93. package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
  94. package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
  95. package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
  96. package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
  97. package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
  98. package/.agents/scripts/lib/baselines/envelope.js +13 -129
  99. package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
  100. package/.agents/scripts/lib/baselines/git-base.js +23 -142
  101. package/.agents/scripts/lib/baselines/kernel.js +11 -111
  102. package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
  103. package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
  104. package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
  105. package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
  106. package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
  107. package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
  108. package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
  109. package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
  110. package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
  111. package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
  112. package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
  113. package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
  114. package/.agents/scripts/lib/baselines/path-canon.js +19 -128
  115. package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
  116. package/.agents/scripts/lib/baselines/reader.js +14 -107
  117. package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
  118. package/.agents/scripts/lib/baselines/scope.js +11 -135
  119. package/.agents/scripts/lib/baselines/writer.js +16 -149
  120. package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
  121. package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
  122. package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
  123. package/.agents/scripts/lib/bdd-step-index.js +26 -100
  124. package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
  125. package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
  126. package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
  127. package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
  128. package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
  129. package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
  130. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
  131. package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
  132. package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
  133. package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
  134. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
  135. package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
  136. package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
  137. package/.agents/scripts/lib/bootstrap/summary.js +1 -8
  138. package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
  139. package/.agents/scripts/lib/branch-name-guard.js +4 -23
  140. package/.agents/scripts/lib/changed-files.js +39 -121
  141. package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
  142. package/.agents/scripts/lib/checks/index.js +18 -101
  143. package/.agents/scripts/lib/checks/loop-health.js +11 -53
  144. package/.agents/scripts/lib/checks/state.js +16 -91
  145. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
  146. package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
  147. package/.agents/scripts/lib/child-exec.js +39 -108
  148. package/.agents/scripts/lib/cli/standard-args.js +9 -116
  149. package/.agents/scripts/lib/cli-args.js +31 -146
  150. package/.agents/scripts/lib/cli-usage.js +5 -27
  151. package/.agents/scripts/lib/cli-utils.js +2 -12
  152. package/.agents/scripts/lib/close-validation/commands.js +13 -76
  153. package/.agents/scripts/lib/close-validation/gates.js +92 -331
  154. package/.agents/scripts/lib/close-validation/process.js +121 -151
  155. package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
  156. package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
  157. package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
  158. package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
  159. package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
  160. package/.agents/scripts/lib/close-validation/runner.js +53 -110
  161. package/.agents/scripts/lib/command-header.js +6 -28
  162. package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
  163. package/.agents/scripts/lib/config/baselines.js +3 -14
  164. package/.agents/scripts/lib/config/ci.js +8 -38
  165. package/.agents/scripts/lib/config/commands.js +1 -15
  166. package/.agents/scripts/lib/config/defaults.js +4 -33
  167. package/.agents/scripts/lib/config/delivery-routing.js +6 -34
  168. package/.agents/scripts/lib/config/explain.js +10 -83
  169. package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
  170. package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +3 -31
  171. package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
  172. package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
  173. package/.agents/scripts/lib/config/gates/index.js +2 -17
  174. package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
  175. package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
  176. package/.agents/scripts/lib/config/gates/shared.js +4 -64
  177. package/.agents/scripts/lib/config/github.js +4 -22
  178. package/.agents/scripts/lib/config/limits.js +4 -57
  179. package/.agents/scripts/lib/config/paths.js +2 -21
  180. package/.agents/scripts/lib/config/qa.js +4 -38
  181. package/.agents/scripts/lib/config/quality.js +76 -432
  182. package/.agents/scripts/lib/config/runners.js +12 -56
  183. package/.agents/scripts/lib/config/runtime.js +13 -57
  184. package/.agents/scripts/lib/config/shared.js +2 -16
  185. package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
  186. package/.agents/scripts/lib/config/temp-paths.js +40 -280
  187. package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
  188. package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
  189. package/.agents/scripts/lib/config-resolver.js +11 -52
  190. package/.agents/scripts/lib/config-schema-shared.js +1 -4
  191. package/.agents/scripts/lib/config-settings-schema-delivery.js +16 -291
  192. package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
  193. package/.agents/scripts/lib/config-settings-schema.js +37 -274
  194. package/.agents/scripts/lib/coverage-baseline.js +20 -110
  195. package/.agents/scripts/lib/coverage-capture-fullscope.js +18 -35
  196. package/.agents/scripts/lib/coverage-capture-incremental.js +15 -45
  197. package/.agents/scripts/lib/coverage-capture-usage.js +8 -25
  198. package/.agents/scripts/lib/coverage-capture.js +99 -224
  199. package/.agents/scripts/lib/coverage-utils.js +14 -79
  200. package/.agents/scripts/lib/cpu-pool.js +17 -123
  201. package/.agents/scripts/lib/crap-baseline-join.js +16 -88
  202. package/.agents/scripts/lib/crap-coordinates.js +6 -25
  203. package/.agents/scripts/lib/crap-engine.js +40 -153
  204. package/.agents/scripts/lib/crap-method-identity.js +16 -78
  205. package/.agents/scripts/lib/crap-utils.js +31 -155
  206. package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
  207. package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
  208. package/.agents/scripts/lib/dead-exports-knip.js +18 -56
  209. package/.agents/scripts/lib/dead-exports-mode.js +5 -24
  210. package/.agents/scripts/lib/degraded-mode.js +3 -26
  211. package/.agents/scripts/lib/dependency-parser.js +8 -40
  212. package/.agents/scripts/lib/dependency-version.js +13 -35
  213. package/.agents/scripts/lib/detect-package-manager.js +6 -36
  214. package/.agents/scripts/lib/doc-tiers.js +22 -124
  215. package/.agents/scripts/lib/duplicate-search.js +8 -72
  216. package/.agents/scripts/lib/env-loader.js +5 -27
  217. package/.agents/scripts/lib/error-redactor.js +6 -31
  218. package/.agents/scripts/lib/errors/index.js +2 -22
  219. package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
  220. package/.agents/scripts/lib/escomplex-kernel.js +21 -123
  221. package/.agents/scripts/lib/feedback-loop/graduator-core.js +94 -419
  222. package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
  223. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -149
  224. package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
  225. package/.agents/scripts/lib/findings/classify-finding.js +14 -69
  226. package/.agents/scripts/lib/findings/promote-finding.js +14 -112
  227. package/.agents/scripts/lib/findings/provenance-field.js +11 -52
  228. package/.agents/scripts/lib/findings/route-finding.js +37 -255
  229. package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
  230. package/.agents/scripts/lib/findings/severity.js +18 -104
  231. package/.agents/scripts/lib/format-generated-json.js +12 -44
  232. package/.agents/scripts/lib/full-suite-lock.js +160 -429
  233. package/.agents/scripts/lib/full-suite-queue.js +213 -0
  234. package/.agents/scripts/lib/gates/baseline-store.js +5 -9
  235. package/.agents/scripts/lib/gates/friction.js +1 -3
  236. package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
  237. package/.agents/scripts/lib/gh-exec.js +123 -191
  238. package/.agents/scripts/lib/git/cached-fetch.js +9 -52
  239. package/.agents/scripts/lib/git/sync-from-base.js +15 -107
  240. package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
  241. package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
  242. package/.agents/scripts/lib/git-utils.js +37 -161
  243. package/.agents/scripts/lib/github/framework-repo.js +8 -71
  244. package/.agents/scripts/lib/github-url.js +2 -17
  245. package/.agents/scripts/lib/import-graph.js +11 -38
  246. package/.agents/scripts/lib/install-cmd-parser.js +4 -13
  247. package/.agents/scripts/lib/json-utils.js +3 -18
  248. package/.agents/scripts/lib/label-constants.js +16 -111
  249. package/.agents/scripts/lib/label-taxonomy.js +4 -30
  250. package/.agents/scripts/lib/maintainability-engine.js +12 -80
  251. package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
  252. package/.agents/scripts/lib/maintainability-utils.js +16 -92
  253. package/.agents/scripts/lib/mandrel-catalog.js +12 -70
  254. package/.agents/scripts/lib/notifications/notifier.js +13 -38
  255. package/.agents/scripts/lib/npm-scripts.js +4 -23
  256. package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
  257. package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
  258. package/.agents/scripts/lib/observability/signal-validator.js +5 -37
  259. package/.agents/scripts/lib/observability/signals-writer.js +11 -121
  260. package/.agents/scripts/lib/observability/source-classifier.js +22 -203
  261. package/.agents/scripts/lib/observability/terse-result.js +14 -47
  262. package/.agents/scripts/lib/onboard/init-tail.js +13 -74
  263. package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
  264. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
  265. package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
  266. package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
  267. package/.agents/scripts/lib/orchestration/ceremony-routing.js +28 -156
  268. package/.agents/scripts/lib/orchestration/change-set.js +7 -36
  269. package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
  270. package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
  271. package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
  272. package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
  273. package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
  274. package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
  275. package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
  276. package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
  277. package/.agents/scripts/lib/orchestration/check-state.js +92 -0
  278. package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
  279. package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +121 -157
  280. package/.agents/scripts/lib/orchestration/code-review.js +24 -128
  281. package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
  282. package/.agents/scripts/lib/orchestration/complexity-gate.js +118 -462
  283. package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
  284. package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
  285. package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
  286. package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
  287. package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
  288. package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
  289. package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
  290. package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
  291. package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
  292. package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
  293. package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
  294. package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
  295. package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
  296. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
  297. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
  298. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
  299. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
  300. package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
  301. package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
  302. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
  303. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
  304. package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
  305. package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
  306. package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
  307. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
  308. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
  309. package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
  310. package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
  311. package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
  312. package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
  313. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
  314. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
  315. package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
  316. package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
  317. package/.agents/scripts/lib/orchestration/light-suitability.js +37 -307
  318. package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
  319. package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
  320. package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
  321. package/.agents/scripts/lib/orchestration/plan-context.js +55 -318
  322. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
  323. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
  324. package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
  325. package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
  326. package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
  327. package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
  328. package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +16 -78
  329. package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
  330. package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
  331. package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
  332. package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
  333. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
  334. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
  335. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +71 -289
  336. package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
  337. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +96 -362
  338. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +9 -39
  339. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +60 -186
  340. package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
  341. package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
  342. package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
  343. package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
  344. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
  345. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
  346. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
  347. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
  348. package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
  349. package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
  350. package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
  351. package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
  352. package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
  353. package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
  354. package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
  355. package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
  356. package/.agents/scripts/lib/orchestration/review-depth.js +12 -91
  357. package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
  358. package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
  359. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
  360. package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
  361. package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
  362. package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
  363. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
  364. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
  365. package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
  366. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
  367. package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
  368. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
  369. package/.agents/scripts/lib/orchestration/run-epilogue.js +245 -326
  370. package/.agents/scripts/lib/orchestration/run-scoped-config.js +55 -159
  371. package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
  372. package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
  373. package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
  374. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
  375. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +20 -82
  376. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
  377. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
  378. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
  379. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
  380. package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +96 -0
  381. package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
  382. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
  383. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
  384. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
  385. package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
  386. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
  387. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
  388. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
  389. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
  390. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
  391. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
  392. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
  393. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +180 -273
  394. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
  395. package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
  396. package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
  397. package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
  398. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
  399. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
  400. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
  401. package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
  402. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -200
  403. package/.agents/scripts/lib/orchestration/story-follow-ups.js +167 -252
  404. package/.agents/scripts/lib/orchestration/story-init-envelope.js +52 -0
  405. package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
  406. package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
  407. package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -135
  408. package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
  409. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
  410. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
  411. package/.agents/scripts/lib/orchestration/ticket-validator.js +63 -344
  412. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
  413. package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -261
  414. package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
  415. package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
  416. package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
  417. package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
  418. package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
  419. package/.agents/scripts/lib/path-security.js +3 -6
  420. package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
  421. package/.agents/scripts/lib/preflight-runner.js +13 -69
  422. package/.agents/scripts/lib/process-group.js +143 -0
  423. package/.agents/scripts/lib/project-root.js +2 -8
  424. package/.agents/scripts/lib/provider-factory.js +2 -25
  425. package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
  426. package/.agents/scripts/lib/qa/qa-session.js +15 -69
  427. package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
  428. package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
  429. package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
  430. package/.agents/scripts/lib/reserved-test-ids.js +9 -47
  431. package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
  432. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
  433. package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
  434. package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
  435. package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
  436. package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
  437. package/.agents/scripts/lib/signals/detectors/common.js +12 -38
  438. package/.agents/scripts/lib/signals/index.js +2 -19
  439. package/.agents/scripts/lib/signals/schema.js +14 -109
  440. package/.agents/scripts/lib/signals/write.js +2 -11
  441. package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
  442. package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
  443. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
  444. package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
  445. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
  446. package/.agents/scripts/lib/single-story-sweep.js +14 -97
  447. package/.agents/scripts/lib/skills/parse-skill.js +13 -59
  448. package/.agents/scripts/lib/skills/skills-index.js +8 -29
  449. package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
  450. package/.agents/scripts/lib/source-extensions.js +11 -42
  451. package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
  452. package/.agents/scripts/lib/stdio-flush.js +9 -36
  453. package/.agents/scripts/lib/story-adjacency.js +8 -40
  454. package/.agents/scripts/lib/story-body/body-format-lints.js +51 -66
  455. package/.agents/scripts/lib/story-body/footer-block.js +11 -44
  456. package/.agents/scripts/lib/story-body/story-body.js +123 -344
  457. package/.agents/scripts/lib/temp-retention.js +42 -143
  458. package/.agents/scripts/lib/templates/decomposer-prompts.js +18 -80
  459. package/.agents/scripts/lib/test-env.js +12 -65
  460. package/.agents/scripts/lib/test-run-credit.js +10 -65
  461. package/.agents/scripts/lib/test-runner-contract.js +19 -74
  462. package/.agents/scripts/lib/test-temp.js +38 -184
  463. package/.agents/scripts/lib/test-tiers.js +12 -96
  464. package/.agents/scripts/lib/ticket-body-sections.js +21 -96
  465. package/.agents/scripts/lib/transpile.js +15 -74
  466. package/.agents/scripts/lib/util/concurrent-map.js +6 -25
  467. package/.agents/scripts/lib/util/parse-id-list.js +8 -34
  468. package/.agents/scripts/lib/util/poll-loop.js +8 -28
  469. package/.agents/scripts/lib/util/with-timeout.js +2 -11
  470. package/.agents/scripts/lib/validation-evidence.js +21 -96
  471. package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
  472. package/.agents/scripts/lib/wave-runner/live-probe.js +67 -209
  473. package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
  474. package/.agents/scripts/lib/workers/crap-worker.js +11 -64
  475. package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
  476. package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
  477. package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
  478. package/.agents/scripts/lib/workflow-closure.js +22 -105
  479. package/.agents/scripts/lib/workspace-provisioner.js +16 -54
  480. package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
  481. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
  482. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
  483. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
  484. package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
  485. package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
  486. package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
  487. package/.agents/scripts/lib/worktree-manager.js +15 -40
  488. package/.agents/scripts/lint-issue-body.js +12 -68
  489. package/.agents/scripts/mandrel-update-preflight.js +10 -70
  490. package/.agents/scripts/merge-baseline.js +30 -105
  491. package/.agents/scripts/nav-registry-diff.js +22 -108
  492. package/.agents/scripts/notify.js +12 -69
  493. package/.agents/scripts/plan-context.js +97 -92
  494. package/.agents/scripts/plan-critics.js +12 -66
  495. package/.agents/scripts/plan-persist.js +71 -137
  496. package/.agents/scripts/plan-run-epilogue.js +20 -43
  497. package/.agents/scripts/pr-watch-with-update.js +79 -263
  498. package/.agents/scripts/providers/github/auth.js +3 -8
  499. package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
  500. package/.agents/scripts/providers/github/board-add.js +5 -21
  501. package/.agents/scripts/providers/github/branch-protection.js +11 -43
  502. package/.agents/scripts/providers/github/cache.js +2 -14
  503. package/.agents/scripts/providers/github/comments.js +7 -40
  504. package/.agents/scripts/providers/github/compose.js +3 -19
  505. package/.agents/scripts/providers/github/errors.js +22 -125
  506. package/.agents/scripts/providers/github/issues.js +31 -123
  507. package/.agents/scripts/providers/github/labels.js +24 -124
  508. package/.agents/scripts/providers/github/mappers.js +5 -27
  509. package/.agents/scripts/providers/github/merge-methods.js +3 -22
  510. package/.agents/scripts/providers/github/project-board.js +2 -17
  511. package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
  512. package/.agents/scripts/providers/github/request-helpers.js +5 -32
  513. package/.agents/scripts/providers/github/search-budget.js +9 -39
  514. package/.agents/scripts/providers/github/search-query.js +5 -26
  515. package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
  516. package/.agents/scripts/providers/github/sub-issues.js +7 -36
  517. package/.agents/scripts/providers/github/tickets.js +32 -134
  518. package/.agents/scripts/providers/github.js +18 -59
  519. package/.agents/scripts/prune-plan-run-labels.js +12 -46
  520. package/.agents/scripts/quality-preview.js +35 -220
  521. package/.agents/scripts/resolve-doc-tiers.js +3 -26
  522. package/.agents/scripts/resolve-stories.js +16 -67
  523. package/.agents/scripts/resync-status-column.js +6 -25
  524. package/.agents/scripts/run-tests.js +29 -104
  525. package/.agents/scripts/single-story-close.js +23 -135
  526. package/.agents/scripts/single-story-confirm-merge.js +32 -139
  527. package/.agents/scripts/single-story-init.js +47 -259
  528. package/.agents/scripts/stories-wave-tick.js +179 -415
  529. package/.agents/scripts/sync-agentrc.js +3 -21
  530. package/.agents/scripts/sync-claude-agents.js +9 -55
  531. package/.agents/scripts/sync-claude-commands.js +20 -110
  532. package/.agents/scripts/test-wrapper.js +6 -43
  533. package/.agents/scripts/update-coverage-baseline.js +5 -22
  534. package/.agents/scripts/update-crap-baseline.js +7 -30
  535. package/.agents/scripts/update-duplication-baseline.js +16 -92
  536. package/.agents/scripts/update-maintainability-baseline.js +8 -62
  537. package/.agents/scripts/update-ticket-state.js +1 -7
  538. package/.agents/scripts/validate-skills.js +6 -26
  539. package/.agents/skills/core/gates-and-baselines/reference.md +0 -1
  540. package/.agents/skills/skills.index.json +2 -2
  541. package/.agents/skills/stack/qa/playwright/SKILL.md +26 -0
  542. package/.agents/templates/agent-protocol.md +2 -2
  543. package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
  544. package/.agents/workflows/audit-accessibility.md +4 -7
  545. package/.agents/workflows/audit-adrs.md +3 -6
  546. package/.agents/workflows/audit-architecture.md +3 -11
  547. package/.agents/workflows/audit-baselines.md +6 -9
  548. package/.agents/workflows/audit-clean-code.md +8 -12
  549. package/.agents/workflows/audit-data-model.md +3 -7
  550. package/.agents/workflows/audit-dependencies.md +4 -7
  551. package/.agents/workflows/audit-devops.md +4 -8
  552. package/.agents/workflows/audit-documentation.md +1 -4
  553. package/.agents/workflows/audit-mobile.md +4 -7
  554. package/.agents/workflows/audit-navigability.md +3 -6
  555. package/.agents/workflows/audit-performance.md +2 -4
  556. package/.agents/workflows/audit-privacy.md +4 -7
  557. package/.agents/workflows/audit-quality.md +4 -7
  558. package/.agents/workflows/audit-security.md +4 -7
  559. package/.agents/workflows/audit-seo.md +4 -7
  560. package/.agents/workflows/audit-sre.md +4 -7
  561. package/.agents/workflows/audit-to-stories.md +17 -30
  562. package/.agents/workflows/audit-ux-ui.md +4 -7
  563. package/.agents/workflows/helpers/acceptance-self-eval.md +84 -157
  564. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  565. package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
  566. package/.agents/workflows/helpers/code-review.md +4 -2
  567. package/.agents/workflows/helpers/deliver-digest.md +37 -28
  568. package/.agents/workflows/helpers/deliver-light.md +92 -101
  569. package/.agents/workflows/helpers/deliver-reference.md +162 -220
  570. package/.agents/workflows/helpers/deliver-story-reference.md +197 -607
  571. package/.agents/workflows/helpers/deliver-story.md +17 -18
  572. package/.agents/workflows/helpers/plan-reference.md +125 -167
  573. package/.agents/workflows/helpers/qa-core.md +12 -0
  574. package/.agents/workflows/mandrel-deliver.md +47 -31
  575. package/.agents/workflows/mandrel-plan.md +22 -21
  576. package/.agents/workflows/mandrel-update.md +36 -21
  577. package/.agents/workflows/memory-consolidate.md +1 -1
  578. package/.agents/workflows/qa-assist.md +27 -71
  579. package/.agents/workflows/qa-explore.md +19 -59
  580. package/.agents/workflows/qa-run.md +11 -33
  581. package/README.md +1 -1
  582. package/bin/mandrel.js +5 -46
  583. package/bin/postinstall.js +18 -107
  584. package/docs/CHANGELOG.md +60 -0
  585. package/lib/cli/doctor.js +11 -71
  586. package/lib/cli/init.js +26 -165
  587. package/lib/cli/migrate.js +5 -64
  588. package/lib/cli/registry.js +84 -467
  589. package/lib/cli/sync-agents.js +4 -64
  590. package/lib/cli/sync-commands.js +11 -64
  591. package/lib/cli/sync.js +34 -213
  592. package/lib/cli/uninstall.js +40 -219
  593. package/lib/cli/update.js +326 -523
  594. package/lib/cli/version-check.js +8 -72
  595. package/lib/cli/version-helpers.js +14 -87
  596. package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
  597. package/lib/migrations/index.js +17 -92
  598. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
  599. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
  600. package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
  601. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
  602. package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
  603. package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
  604. package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
  605. package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
  606. package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +21 -0
  607. package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
  608. package/package.json +17 -14
  609. package/.agents/docs/SDLC.md +0 -590
  610. package/.agents/docs/quality-gates.md +0 -1179
  611. package/.agents/rules/known-tooling-behavior.md +0 -150
  612. package/.agents/rules/orchestration-error-handling.md +0 -61
  613. package/.agents/rules/test-seams.md +0 -59
  614. package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
  615. package/.agents/schemas/baselines/lint.schema.json +0 -47
  616. package/.agents/schemas/model-attribution.schema.json +0 -53
  617. package/.agents/scripts/check-action-pinning.js +0 -260
  618. package/.agents/scripts/check-audit-attribution.js +0 -302
  619. package/.agents/scripts/check-baseline-drift.js +0 -211
  620. package/.agents/scripts/check-baseline-scope.js +0 -362
  621. package/.agents/scripts/check-generated-validator.js +0 -202
  622. package/.agents/scripts/check-knip-entries.js +0 -159
  623. package/.agents/scripts/check-lifecycle-lint.js +0 -294
  624. package/.agents/scripts/check-pinned-override-notes.js +0 -102
  625. package/.agents/scripts/check-schema-references.js +0 -366
  626. package/.agents/scripts/check-test-portability.js +0 -512
  627. package/.agents/scripts/check-workflow-citations.js +0 -332
  628. package/.agents/scripts/check-workflow-cli-lint.js +0 -299
  629. package/.agents/scripts/check-workflow-timeouts.js +0 -291
  630. package/.agents/scripts/install-matrix-assert.js +0 -326
  631. package/.agents/scripts/lib/audit-advisories.js +0 -195
  632. package/.agents/scripts/lib/audit-attribution.js +0 -134
  633. package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
  634. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
  635. package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
  636. package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
  637. package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
  638. package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
  639. package/.agents/scripts/lib/c8-cli-path.js +0 -21
  640. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
  641. package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
  642. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
  643. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
  644. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
  645. package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
  646. package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
  647. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
  648. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
  649. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
  650. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
  651. package/.agents/scripts/lib/fs-walk.js +0 -52
  652. package/.agents/scripts/lib/knip-config-resolver.js +0 -181
  653. package/.agents/scripts/lib/knip-entry-sync.js +0 -452
  654. package/.agents/scripts/lib/orchestration/model-attribution.js +0 -418
  655. package/.agents/scripts/lib/orchestration/story-plan-state.js +0 -33
  656. package/.agents/scripts/lib/orchestration/structured-comment-parser.js +0 -67
  657. package/.agents/scripts/lib/pinned-override-notes.js +0 -88
  658. package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
  659. package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
  660. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
  661. package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
  662. package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
  663. package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
  664. package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
  665. package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
  666. package/.agents/scripts/lib/test-isolate/runner.js +0 -483
  667. package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
  668. package/.agents/scripts/lib/test-profile/render-report.js +0 -45
  669. package/.agents/scripts/lint-label-vocabulary.js +0 -214
  670. package/.agents/scripts/post-structured-comment.js +0 -127
  671. package/.agents/scripts/provision-git-hooks.js +0 -85
  672. package/.agents/scripts/prune-baseline-orphans.js +0 -181
  673. package/.agents/scripts/run-coverage.js +0 -197
  674. package/.agents/scripts/run-lint.js +0 -133
  675. package/.agents/scripts/run-test-profile.js +0 -129
  676. package/.agents/scripts/run-verify.js +0 -118
  677. package/.agents/scripts/test-isolate.js +0 -55
  678. package/.agents/scripts/update-dead-exports-baseline.js +0 -321
@@ -1,54 +1,11 @@
1
1
  /**
2
- * `temp/run-<id>/` path-resolution helper (Epic #1030 Story #1039).
2
+ * Single source of truth for every path under `project.paths.tempRoot`:
3
+ * `run-<eid>/…` and `run-<eid>/stories/story-<sid>/…`, with standalone
4
+ * Stories under `standalone/stories/story-<sid>/`.
3
5
  *
4
- * Single source of truth for every artifact path that lives under
5
- * `project.paths.tempRoot`. Every script that previously hand-rolled
6
- * a flat `temp/<artifact>-run-<id>.<ext>` path migrates to call one of
7
- * these helpers. The Tech Spec (#1032) names this module as the cutover
8
- * grep target — `temp/.*-epic-` should be empty across `.agents/scripts`
9
- * once the migration Stories land.
10
- *
11
- * Layout:
12
- * temp/run-<eid>/
13
- * ├─ techspec.md
14
- * ├─ manifest.md (dispatch manifest)
15
- * ├─ retro.md (mirror of GitHub retro at Epic close)
16
- * ├─ lifecycle.ndjson (lifecycle ledger)
17
- * ├─ checkpoints/... (pre-v2 epic-runner state store; retained layout)
18
- * ├─ <name> (runArtifactPath escape hatch)
19
- * └─ stories/
20
- * └─ story-<sid>/
21
- * ├─ manifest.md (story dispatch manifest)
22
- * ├─ signals.ndjson (append-only signals writer)
23
- * └─ <name> (storyArtifactPath escape hatch)
24
- *
25
- * Standalone Stories (no parent Epic) follow the same shape under
26
- * `<tempRoot>/standalone/stories/story-<sid>/`. The `stories/` segment
27
- * was introduced by Story #2940 to visually separate per-Epic artifacts
28
- * from per-Story siblings.
29
- *
30
- * tempRoot resolution: the helper accepts an optional `config` argument
31
- * (the full resolved config or a partial bag with `project.paths.tempRoot`);
32
- * when omitted it lazy-loads via `resolveConfig()` so
33
- * call sites already inside the resolver can pass their own bag and avoid the
34
- * round-trip. The missing-tempRoot fallback resolves to `'temp'` — the
35
- * framework default shipped in `.agents/docs/agentrc-reference.json`. Note that the
36
- * AJV schema marks `tempRoot` as required for any loaded `.agentrc.json`, so
37
- * the fallback only matters in zero-config callers (tests, ad-hoc scripts).
38
- *
39
- * Main-checkout anchoring (Story #3900): the Epic/Story directory helpers
40
- * resolve a *relative* `tempRoot` against the **main checkout root** (the
41
- * parent of `git rev-parse --git-common-dir`) rather than `process.cwd()`.
42
- * Without this, a story child that `cd`s into `.worktrees/story-<id>/` before
43
- * emitting a lifecycle record would append it to
44
- * `<worktree>/temp/run-N/lifecycle.ndjson`, while the `/mandrel-deliver` host
45
- * (running from the main checkout) reads the main-checkout copy — so the
46
- * host never sees the child's records (the audit-#3513 bug class; its
47
- * original `story.heartbeat` instance is gone with that emitter, but the
48
- * divergence applies to every ledger writer). Anchoring the
49
- * ledger to the git common dir makes the worktree child writer and the
50
- * main-checkout host reader converge on a single file regardless of cwd. An
51
- * absolute `tempRoot` is honoured verbatim; only relative roots are anchored.
6
+ * A relative tempRoot is anchored to the main checkout root (parent of
7
+ * `git rev-parse --git-common-dir`), not cwd, so a writer inside a Story
8
+ * worktree and the host reading from the main checkout converge on one file.
52
9
  */
53
10
 
54
11
  import { execFileSync } from 'node:child_process';
@@ -58,35 +15,20 @@ import path from 'node:path';
58
15
 
59
16
  import { reapOnExit } from '../test-temp.js';
60
17
 
61
- /**
62
- * Cache the resolved main-checkout root per spawn cwd so the
63
- * `git rev-parse` shell-out runs at most once per distinct working
64
- * directory in a process. The cache key is the `cwd` the resolution ran
65
- * against (defaulting to `process.cwd()`); a `null` value records a prior
66
- * miss so we don't re-spawn git on a non-repo path.
67
- */
18
+ /** Keyed by cwd; a cached `null` records a non-repo miss. */
68
19
  const _mainCheckoutRootCache = new Map();
69
20
 
70
21
  /**
71
- * Resolve the **main checkout root** for a given working directory by
72
- * shelling out to `git rev-parse --git-common-dir` and taking its parent.
73
- *
74
- * In a linked worktree (`git worktree add`), `--git-common-dir` returns the
75
- * *parent* repo's `.git/` (the shared object store), so its parent directory
76
- * is the main checkout root — exactly the anchor we want for cwd-independent
77
- * lifecycle ledger paths. In the main checkout itself it returns `.git`, so
78
- * the parent is the main checkout root too. The two cases converge.
79
- *
80
- * Returns `null` when the path is not a git repository or git is
81
- * unavailable, so callers fall back to the relative (cwd-anchored) path.
22
+ * Parent of `--git-common-dir`, which is the main checkout root from both the
23
+ * main checkout and any linked worktree. `null` outside a repo.
82
24
  *
83
25
  * @param {string} [cwd=process.cwd()]
84
- * @param {{ exec?: typeof execFileSync }} [deps] Injectable for tests.
26
+ * @param {{ exec?: typeof execFileSync }} [deps]
85
27
  * @returns {string|null}
86
28
  */
87
29
  export function mainCheckoutRoot(cwd = process.cwd(), deps = {}) {
88
30
  const exec = deps.exec ?? execFileSync;
89
- // Only memoize the real (non-injected) resolver so tests stay deterministic.
31
+ // Only the real resolver is memoized.
90
32
  const memoize = !deps.exec;
91
33
  if (memoize && _mainCheckoutRootCache.has(cwd)) {
92
34
  return _mainCheckoutRootCache.get(cwd);
@@ -103,43 +45,26 @@ export function mainCheckoutRoot(cwd = process.cwd(), deps = {}) {
103
45
  resolved = path.dirname(commonDir);
104
46
  }
105
47
  } catch {
106
- // Not a git repo, or git unavailable — fall back to the relative path.
107
48
  resolved = null;
108
49
  }
109
50
  if (memoize) _mainCheckoutRootCache.set(cwd, resolved);
110
51
  return resolved;
111
52
  }
112
53
 
113
- /**
114
- * Test-only: clear the main-checkout-root memoization cache so a suite can
115
- * exercise multiple repo roots in one process without cross-test bleed.
116
- */
54
+ /** Test-only. */
117
55
  export function _clearMainCheckoutRootCache() {
118
56
  _mainCheckoutRootCache.clear();
119
57
  }
120
58
 
121
59
  /**
122
- * Environment variable naming an absolute per-process scratch tempRoot that
123
- * every stream writer must land in during a test run (Story #4696).
124
- *
125
- * The shared test bootstrap (`lib/test-env.js`) sets this to a fresh
126
- * `os.tmpdir()` directory before spawning the test runner, so any test that
127
- * reaches a writer (`signals-writer`, `appendLedgerEvent`, etc.)
128
- * *without* explicitly injecting an absolute tempRoot still resolves under
129
- * scratch instead of the repo's real `temp/` tree. This is the single
130
- * injection seam: because every path helper funnels a relative root through
131
- * `anchorTempRoot`, one redirect here covers all writers regardless of how
132
- * each one resolved its root.
60
+ * Absolute scratch tempRoot the test bootstrap arms, so any writer reaching a
61
+ * relative root under test lands in scratch, not the repo's `temp/`.
133
62
  */
134
63
  export const TEST_TEMP_ROOT_ENV = 'MANDREL_TEST_TEMP_ROOT';
135
64
 
136
65
  /**
137
- * Resolve the absolute scratch tempRoot override, or `null` when none is
138
- * configured. Only an **absolute** value is honoured — a relative override
139
- * would re-anchor against the repo tree and defeat the isolation, so it is
140
- * ignored (treated as unset). Module-internal: the behaviour is exercised
141
- * through `anchorTempRoot`, so it is deliberately not exported (keeps the
142
- * public seam to `anchorTempRoot` + `TEST_TEMP_ROOT_ENV`).
66
+ * Only an absolute override is honoured; a relative one would re-anchor
67
+ * into the repo and defeat the isolation.
143
68
  *
144
69
  * @param {NodeJS.ProcessEnv} [env=process.env]
145
70
  * @returns {string|null}
@@ -153,41 +78,19 @@ function testScratchTempRoot(env = process.env) {
153
78
  : null;
154
79
  }
155
80
 
156
- /**
157
- * Environment variable that opts a test-context process back into the real
158
- * `temp/` tree (Story #4711). The `anchorTempRoot` test-context fallback
159
- * refuses to anchor a relative root into the repo's telemetry tree when the
160
- * process is a node:test context; a test that genuinely needs the real tree
161
- * sets this to `'1'` on its own spawn — an explicit, greppable opt-out
162
- * instead of a silent bypass.
163
- */
81
+ /** `'1'` opts a test-context process back into the real `temp/` tree. */
164
82
  export const TEST_ALLOW_REAL_TEMP_ENV = 'MANDREL_TEST_ALLOW_REAL_TEMP';
165
83
 
166
- /**
167
- * Per-process memo for the lazily-created test-context scratch dir, so every
168
- * relative-root resolution in one test process converges on a single scratch
169
- * tree (mirrors the `_mainCheckoutRootCache` pattern above).
170
- */
171
84
  let _testContextScratchDir = null;
172
85
 
173
- /**
174
- * Test-only: clear the test-context scratch memo so a suite can exercise the
175
- * lazy-arming branch repeatedly in one process.
176
- */
86
+ /** Test-only. */
177
87
  export function _clearTestContextScratchCache() {
178
88
  _testContextScratchDir = null;
179
89
  }
180
90
 
181
91
  /**
182
- * Is this process a node:test context? True when the env carries
183
- * `NODE_TEST_CONTEXT` (set by the node:test runner on every spawned test
184
- * child, regardless of how the runner itself was launched) or when the
185
- * process was started with the `--test` flag (a direct `node --test <file>`
186
- * runner process, or in-process isolation modes).
187
- *
188
- * Exported since Story #4837: the feedback loop's issue-filing path guards
189
- * live GitHub writes on this same signal, and a second hand-rolled copy of
190
- * the detection is exactly how the two would drift apart.
92
+ * `NODE_TEST_CONTEXT` (set on every node:test child) or a `--test` execArgv.
93
+ * The single shared detector — the live-filing guard uses it too.
191
94
  *
192
95
  * @param {NodeJS.ProcessEnv} [env=process.env]
193
96
  * @param {string[]} [execArgv=process.execArgv]
@@ -204,39 +107,14 @@ export function inNodeTestContext(
204
107
  }
205
108
 
206
109
  /**
207
- * Anchor a resolved `tempRoot` to the main checkout root when it is a
208
- * relative path (Story #3900). Absolute roots are returned verbatim; a
209
- * relative root is joined onto the main checkout root so every caller
210
- * resolves the same on-disk ledger regardless of the process cwd. When the
211
- * main checkout cannot be resolved (non-repo, git unavailable) the relative
212
- * root is returned unchanged so behaviour degrades to the prior
213
- * cwd-relative semantics rather than throwing.
214
- *
215
- * Test isolation (Story #4696): when the scratch override
216
- * (`MANDREL_TEST_TEMP_ROOT`) is set, a relative root is joined onto the
217
- * scratch dir instead of the main checkout root, so a writer that reaches
218
- * the default (or any relative) root under the test bootstrap lands in
219
- * scratch and never pollutes the repo's real `temp/` telemetry tree. An
220
- * absolute root injected by a well-behaved test still bypasses the redirect
221
- * verbatim.
222
- *
223
- * Process-level arming (Story #4711): the wrapper-armed override above only
224
- * covers processes spawned by `run-tests.js` — a direct `node --test <file>`
225
- * run used to bypass it and append fixture records to the real tree. When no
226
- * override is armed but the process *is* a node:test context (see
227
- * `inNodeTestContext`), a per-process scratch dir is created lazily and the
228
- * relative root anchors there instead. The scratch dir is memoized and — for
229
- * the real `process.env` — written back to `MANDREL_TEST_TEMP_ROOT` so child
230
- * processes the test spawns inherit the same scratch tree. Escape hatch: a
231
- * test that genuinely needs the real tree sets
232
- * `MANDREL_TEST_ALLOW_REAL_TEMP=1` (`TEST_ALLOW_REAL_TEMP_ENV`) to restore
233
- * main-checkout anchoring; the `check-test-temp-hygiene` guard remains the
234
- * backstop either way.
110
+ * Absolute roots pass verbatim. A relative root joins, in order: the armed
111
+ * scratch override; a lazily-created per-process scratch dir when this is a
112
+ * node:test context (published to children via the env) unless
113
+ * `TEST_ALLOW_REAL_TEMP_ENV=1`; the main checkout root; else stays relative.
235
114
  *
236
115
  * @param {string} tempRoot
237
116
  * @param {NodeJS.ProcessEnv} [env=process.env]
238
117
  * @param {{ mkdtemp?: typeof mkdtempSync, execArgv?: string[], onExit?: (fn: () => void) => void }} [deps]
239
- * Injectable for tests.
240
118
  * @returns {string}
241
119
  */
242
120
  export function anchorTempRoot(tempRoot, env = process.env, deps = {}) {
@@ -255,15 +133,13 @@ export function anchorTempRoot(tempRoot, env = process.env, deps = {}) {
255
133
  _testContextScratchDir = mkdtemp(
256
134
  path.join(os.tmpdir(), 'mandrel-test-temp-'),
257
135
  );
258
- // Creator-only reaping (Story #4808): a process that read the root
259
- // from the env returned at `scratch` above and never reaches here,
260
- // so it can never remove a root its parent is still writing to.
136
+ // Creator-only reaping: a process that inherited the root returned at
137
+ // `scratch` above, so it never removes a root its parent still uses.
261
138
  reapOnExit(
262
139
  _testContextScratchDir,
263
140
  deps.onExit ? { onExit: deps.onExit } : {},
264
141
  );
265
142
  if (env === process.env) {
266
- // Children spawned by this test process inherit the same scratch.
267
143
  process.env[TEST_TEMP_ROOT_ENV] = _testContextScratchDir;
268
144
  }
269
145
  }
@@ -274,47 +150,23 @@ export function anchorTempRoot(tempRoot, env = process.env, deps = {}) {
274
150
  }
275
151
 
276
152
  /**
277
- * Synchronous tempRoot extraction. Accepts the canonical full resolved
278
- * config (`{ project, ... }`) and reads `project.paths.tempRoot`.
279
- *
280
- * Returns `'temp'` for `undefined` / non-object input or when
281
- * `project.paths.tempRoot` is missing / empty / non-string.
282
- *
283
- * Cross-script callers that already hold a resolved config should pass it
284
- * here; bare callers omit the argument and accept the framework default.
153
+ * `project.paths.tempRoot`, defaulting to `'temp'`.
285
154
  *
286
155
  * @param {object} [config]
287
156
  * @returns {string}
288
157
  */
289
158
  export function tempRootFrom(config) {
290
159
  if (!config || typeof config !== 'object') return 'temp';
291
- // Post-reshape canonical shape: paths live under `project.paths.*`.
292
160
  const tempRoot = config.project?.paths?.tempRoot;
293
161
  return typeof tempRoot === 'string' && tempRoot.length > 0
294
162
  ? tempRoot
295
163
  : 'temp';
296
164
  }
297
165
 
298
- /**
299
- * Directory segment (under `tempRoot`) holding every orchestration run log —
300
- * the close gate transcripts (`close-gates-<sid>.log`) and the terse-result
301
- * detail dumps (`story-init-result-<sid>.log`, `sync-result-<branch>.log`, …).
302
- *
303
- * Story #4794: the four writers that land here each hand-rolled the temp path
304
- * from a literal `temp` segment joined onto their own cwd, which ignores
305
- * `project.paths.tempRoot` entirely. On a consumer that relocates its temp
306
- * root, the writers wrote to `<cwd>/temp/` while every reader — including the
307
- * retention purge — resolved the configured root, so the artifacts were
308
- * invisible to the tooling meant to manage them. Routing all four through this
309
- * helper also picks up main-checkout anchoring for free, so a close running
310
- * from a Story worktree lands its logs in the same tree the host reads.
311
- */
166
+ /** Holds close gate logs and terse-result detail dumps. */
312
167
  export const ORCHESTRATION_DIRNAME = 'orchestration';
313
168
 
314
169
  /**
315
- * `<tempRoot>/orchestration/` — resolved against the configured temp root and
316
- * anchored to the main checkout, like every other helper in this module.
317
- *
318
170
  * @param {object} [config]
319
171
  * @returns {string}
320
172
  */
@@ -323,16 +175,8 @@ export function orchestrationLogDir(config) {
323
175
  }
324
176
 
325
177
  /**
326
- * Basename of one Story's close gate log (Story #4816 lifted it here from
327
- * `single-story-close/gate-log.js`).
328
- *
329
- * The writer that appends this file and the reader that uses its **freshness**
330
- * to tell a live close from a dead one (`deliver-recover.js`) sit in different
331
- * subtrees, and the reader importing the writer is the wrong edge to draw for
332
- * a filename. Both take it from the module that already owns every other
333
- * tempRoot path instead.
334
- *
335
- * `null` is the sink's no-Story sentinel and keeps its `unknown` spelling.
178
+ * Shared by the gate-log writer and `deliver-recover.js`, which reads its
179
+ * freshness to tell a live close from a dead one.
336
180
  *
337
181
  * @param {number|null} sid
338
182
  * @returns {string}
@@ -342,8 +186,6 @@ function closeGateLogName(sid) {
342
186
  }
343
187
 
344
188
  /**
345
- * `<tempRoot>/orchestration/close-gates-<sid>.log`.
346
- *
347
189
  * @param {number|null} sid
348
190
  * @param {object} [config]
349
191
  * @returns {string}
@@ -353,8 +195,6 @@ export function closeGateLogPath(sid, config) {
353
195
  }
354
196
 
355
197
  /**
356
- * Basename of the persisted terminal envelope for one Story (Story #4816).
357
- *
358
198
  * @param {number} sid
359
199
  * @returns {string}
360
200
  */
@@ -363,18 +203,8 @@ function storyTerminalEnvelopeName(sid) {
363
203
  }
364
204
 
365
205
  /**
366
- * `<tempRoot>/orchestration/story-deliver-terminal-<sid>.json` — the on-disk
367
- * copy of the one terminal envelope a Story's close-and-land emits (Story
368
- * #4816).
369
- *
370
- * Deliberately a sibling of the gate log rather than a per-Story temp dir
371
- * entry: the envelope is a run artifact of the same close that writes
372
- * `close-gates-<sid>.log`, and `deliver-recover.js` reads the pair together to
373
- * tell a finished close from a live one. Sharing `orchestrationLogDir` also
374
- * means it inherits main-checkout anchoring for free — the close runs inside
375
- * `.worktrees/story-<sid>/` while the `/mandrel-deliver` host reads from the main
376
- * checkout, and an un-anchored path would put the envelope somewhere the
377
- * router never looks.
206
+ * A sibling of the gate log: `deliver-recover.js` reads the pair together to
207
+ * tell a finished close from a live one.
378
208
  *
379
209
  * @param {number} sid
380
210
  * @param {object} [config]
@@ -391,13 +221,7 @@ const runId = (id) => {
391
221
  return id;
392
222
  };
393
223
 
394
- /**
395
- * Story #2874 — accept `null` as the standalone-story sentinel.
396
- * Story-level helpers (storyTempDir, signalsFile, etc.) route
397
- * `eid === null` to `<tempRoot>/standalone/story-<sid>/` so that
398
- * standalone Stories (no parent Epic) still get a stable on-disk
399
- * home for signals + traces. All other invalid values still throw.
400
- */
224
+ /** `null` is the standalone-Story sentinel. */
401
225
  const storyEpicId = (id) => {
402
226
  if (id === null) return null;
403
227
  if (!Number.isInteger(id) || id <= 0) {
@@ -421,9 +245,7 @@ const artifactName = (name) => {
421
245
  if (typeof name !== 'string' || name.length === 0) {
422
246
  throw new Error('[temp-paths] artifact name must be a non-empty string');
423
247
  }
424
- // Reject path traversal — every artifact must live directly under the
425
- // resolved Epic / Story dir. Forward slashes and back slashes alike are
426
- // rejected so Windows callers can't sneak `..\foo` past the guard.
248
+ // Reject traversal; backslashes too, so `..\foo` cannot pass on Windows.
427
249
  if (name.includes('/') || name.includes('\\') || name === '..') {
428
250
  throw new Error(
429
251
  `[temp-paths] artifact name must not contain path separators; got ${JSON.stringify(name)}`,
@@ -433,8 +255,6 @@ const artifactName = (name) => {
433
255
  };
434
256
 
435
257
  /**
436
- * `temp/run-<id>/` — every run-scoped artifact lives under here.
437
- *
438
258
  * @param {number} rid
439
259
  * @param {object} [config]
440
260
  * @returns {string}
@@ -444,19 +264,7 @@ export function runTempDir(rid, config) {
444
264
  }
445
265
 
446
266
  /**
447
- * `temp/run-<eid>/stories/story-<sid>/` — every Story-scoped artifact
448
- * lives under here.
449
- *
450
- * Story #2874: accepts `eid === null` for standalone Stories (no
451
- * parent Epic). The standalone variant routes to
452
- * `<tempRoot>/standalone/stories/story-<sid>/` so signals + traces from
453
- * `/single-story-deliver` runs still land in a stable, scannable
454
- * location instead of being dropped on the floor.
455
- *
456
- * Story #2940 introduced the intermediate `stories/` segment so that
457
- * per-Epic top-level artifacts (`techspec.md`, `manifest.md`,
458
- * `retro.md`, `lifecycle.ndjson`, `baselines/`, `checkpoints/`) are
459
- * visually and structurally separated from the per-Story siblings.
267
+ * `eid === null` routes to `<tempRoot>/standalone/stories/story-<sid>/`.
460
268
  *
461
269
  * @param {number|null} eid
462
270
  * @param {number} sid
@@ -472,18 +280,10 @@ export function storyTempDir(eid, sid, config) {
472
280
  return path.join(parent, STORIES_DIRNAME, `story-${storyId(sid)}`);
473
281
  }
474
282
 
475
- /**
476
- * Basename of a per-Story signal stream. Exported so the reader that
477
- * *discovers* streams by walking the temp tree (`signals-writer.js`'s
478
- * cross-Story gather, Story #4824) names the same file the writer does,
479
- * instead of re-spelling the literal in a second module.
480
- */
283
+ /** Exported so stream discovery names the same file the writer does. */
481
284
  export const SIGNALS_BASENAME = 'signals.ndjson';
482
285
 
483
286
  /**
484
- * `temp/run-<eid>/stories/story-<sid>/signals.ndjson` — append-only
485
- * signal stream consumed by the analyzer (Epic #1030 AC1).
486
- *
487
287
  * @param {number} eid
488
288
  * @param {number} sid
489
289
  * @param {object} [config]
@@ -493,24 +293,12 @@ export function signalsFile(eid, sid, config) {
493
293
  return path.join(storyTempDir(eid, sid, config), SIGNALS_BASENAME);
494
294
  }
495
295
 
496
- /**
497
- * Directory segment holding the standalone-Story subtree —
498
- * `<tempRoot>/standalone/stories/story-<sid>/`. Named here (rather than
499
- * inlined in `storyTempDir`) so the cross-Story stream discovery in
500
- * `signals-writer.js` can recognise it without re-spelling the literal.
501
- */
502
296
  export const STANDALONE_DIRNAME = 'standalone';
503
297
 
504
- /**
505
- * Directory segment holding the per-Story subtree under either an Epic run
506
- * dir or the standalone dir (Story #2940's separator).
507
- */
508
298
  export const STORIES_DIRNAME = 'stories';
509
299
 
510
300
  /**
511
- * `<tempRoot>` itself, resolved and main-checkout-anchored. The discovery
512
- * walk needs the root the named helpers are built from; every other consumer
513
- * should keep using a named helper.
301
+ * For the discovery walk only; everything else uses a named helper.
514
302
  *
515
303
  * @param {object} [config]
516
304
  * @returns {string}
@@ -520,20 +308,7 @@ export function resolvedTempRoot(config) {
520
308
  }
521
309
 
522
310
  /**
523
- * `temp/run-<eid>/stories/story-<sid>/lifecycle.ndjson` — the story-scope
524
- * ledger destination for lifecycle events emitted directly by a Story
525
- * (rather than routed through the Epic-scoped bus ledger). Story #4426
526
- * (Epic #4425) introduces the first consumer: a standalone
527
- * `single-story-close` run (no parent Epic) emitting `merge.unlanded`
528
- * needs an on-disk home even though there is no `run-<id>/` directory to
529
- * anchor the event to.
530
- *
531
- * Mirrors `runLedgerPath` exactly, one level down: `eid === null` routes
532
- * through `storyTempDir`'s standalone branch to
533
- * `<tempRoot>/standalone/stories/story-<sid>/lifecycle.ndjson`; a real
534
- * `eid` routes to `<tempRoot>/run-<eid>/stories/story-<sid>/lifecycle.ndjson`,
535
- * so an Epic-attached Story's story-scope ledger sits alongside its
536
- * `signals.ndjson` sibling.
311
+ * Story-scope ledger; `eid === null` routes to the standalone subtree.
537
312
  *
538
313
  * @param {number|null} eid
539
314
  * @param {number} sid
@@ -544,10 +319,7 @@ export const storyLedgerPath = (eid, sid, config) =>
544
319
  storyArtifactPath(eid, sid, 'lifecycle.ndjson', config);
545
320
 
546
321
  /**
547
- * Escape hatch for an Epic-level artifact whose name isn't part of the
548
- * canonical layout (one of the per-Epic perf surfaces, retro mirror, etc.).
549
- * Use the named helpers below for the canonical files; reserve this one
550
- * for ad-hoc additions.
322
+ * Escape hatch for a non-canonical run-level artifact.
551
323
  *
552
324
  * @param {number} eid
553
325
  * @param {string} name
@@ -559,9 +331,6 @@ export function runArtifactPath(eid, name, config) {
559
331
  }
560
332
 
561
333
  /**
562
- * Escape hatch for a Story-level artifact whose name isn't part of the
563
- * canonical layout (signals.ndjson + manifest.md ship named helpers).
564
- *
565
334
  * @param {number} eid
566
335
  * @param {number} sid
567
336
  * @param {string} name
@@ -573,14 +342,7 @@ function storyArtifactPath(eid, sid, name, config) {
573
342
  }
574
343
 
575
344
  /**
576
- * `temp/run-<eid>/lifecycle.ndjson` — append-only lifecycle ledger
577
- * (Story #2510). `appendLedgerEvent` persists one `emitted` record here per
578
- * merge-terminal outcome; Story #5024 retired the `LedgerWriter` listener and
579
- * the `TraceLogger` markdown companion that preceded it.
580
- *
581
- * The path is also the canonical input the standalone `lifecycle-emit`
582
- * CLI feeds to `buildDefaultListenerChain` when assembling the default
583
- * listener roster for an out-of-runner emit.
345
+ * Append-only lifecycle ledger; one record per merge-terminal outcome.
584
346
  *
585
347
  * @param {number} eid
586
348
  * @param {object} [config]
@@ -589,7 +351,5 @@ function storyArtifactPath(eid, sid, name, config) {
589
351
  export const runLedgerPath = (eid, config) =>
590
352
  runArtifactPath(eid, 'lifecycle.ndjson', config);
591
353
 
592
- // --- Canonical Story-level filenames ---
593
-
594
354
  export const storyManifestPath = (eid, sid, config) =>
595
355
  storyArtifactPath(eid, sid, 'manifest.md', config);
@@ -1,16 +1,7 @@
1
1
  /**
2
- * `validateOrchestrationConfig` — hand-written security checks for the
3
- * post-reshape config (Epic #1720 Story #1739).
4
- *
5
- * The structural validation now lives in the top-level AJV schema (run by
6
- * `resolveConfig` against the full `.agentrc.json` document). This module
7
- * carries the security checks that JSON Schema cannot express:
8
- *
9
- * - Shell-metacharacter injection on `github.{owner, repo, operatorHandle}`.
10
- * - Path-traversal containment on `delivery.worktreeIsolation.root`.
11
- *
12
- * Accepts either the full resolved config (`{ project, github, planning,
13
- * delivery }`) or `null` (zero-config callers — no checks needed).
2
+ * Security checks JSON Schema cannot express: shell metacharacters in
3
+ * `github.{owner, repo, operatorHandle}` and path containment of
4
+ * `delivery.worktreeIsolation.root`.
14
5
  */
15
6
 
16
7
  import path from 'node:path';
@@ -23,11 +14,8 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url));
23
14
  const PROJECT_ROOT = path.resolve(__dirname, '../../../..');
24
15
 
25
16
  /**
26
- * Run the post-reshape security checks against a resolved config bag.
27
- *
28
- * @param {object|null} config - The resolved config (`{ project, github, ... }`)
29
- * or `null` for zero-config callers.
30
- * @throws {Error} If any security check fails.
17
+ * @param {object|null} config - `null` for zero-config callers.
18
+ * @throws {Error}
31
19
  */
32
20
  export function validateOrchestrationConfig(config) {
33
21
  if (config == null) return;
@@ -1,23 +1,11 @@
1
1
  /**
2
- * `delivery.worktreeIsolation` accessor + framework defaults.
3
- *
4
- * Several consumers read this block directly (runtime.js,
5
- * worktree-manager.js, workspace-provisioner.js) and previously each
6
- * carried its own fallback constant. Centralising the defaults here
7
- * lets `applyDefaults()` in `config-resolver.js` enrich the canonical
8
- * block once, so consumers never see `undefined` for a defaulted field
9
- * (which previously meant, e.g., `Boolean(undefined) === false`
10
- * silently disabling worktrees when the operator omitted the block).
2
+ * `delivery.worktreeIsolation` defaults, applied once so no consumer reads
3
+ * `undefined` (e.g. `Boolean(undefined)` silently disabling worktrees).
11
4
  */
12
5
 
13
6
  /**
14
- * Default `nodeModulesStrategy`, platform-aware (Story #4249).
15
- *
16
- * darwin/linux default to `clone` — a copy-on-write (clonefile/reflink) clone
17
- * of the donor's `node_modules` that is effectively free in time and disk on
18
- * APFS / reflink-capable filesystems, with a clean fall-back to `per-worktree`
19
- * on any failure (unsupported fs, cross-volume, etc.). Windows has no reflink
20
- * equivalent on this path, so it keeps the `per-worktree` install default.
7
+ * `clone` is a copy-on-write clone (falls back to `per-worktree` on failure);
8
+ * Windows has no reflink path.
21
9
  *
22
10
  * @param {NodeJS.Platform} [platform]
23
11
  * @returns {'clone' | 'per-worktree'}
@@ -33,15 +21,10 @@ export const WORKTREE_ISOLATION_DEFAULTS = Object.freeze({
33
21
  primeFromPath: null,
34
22
  allowSymlinkOnWindows: false,
35
23
  reapOnSuccess: true,
36
- // Gitignored workspace files copied into each new worktree. Includes the
37
- // operator's local-override files (`.agentrc.local.json`,
38
- // `.agents/instructions.local.md`) so a worktree-isolated agent honors the
39
- // §1.E local-override contract instead of silently falling back to the
40
- // committed `.agentrc.json` placeholders — the gap that left
41
- // `github.operatorHandle` unset inside worktrees and broke Story-lease
42
- // release at close. Missing sources are skipped by the provisioner, so
43
- // listing files that may be absent is safe. Keep in sync with
44
- // `DEFAULT_WORKSPACE_FILES` in `../workspace-provisioner.js`.
24
+ // Local overrides must reach the worktree, or e.g. `operatorHandle` reads
25
+ // the committed placeholder and lease release breaks at close. Absent
26
+ // files are skipped. Keep in sync with `DEFAULT_WORKSPACE_FILES` in
27
+ // `../workspace-provisioner.js`.
45
28
  bootstrapFiles: Object.freeze([
46
29
  '.env',
47
30
  '.mcp.json',
@@ -51,9 +34,7 @@ export const WORKTREE_ISOLATION_DEFAULTS = Object.freeze({
51
34
  });
52
35
 
53
36
  /**
54
- * Read the merged `delivery.worktreeIsolation` block, applying framework
55
- * defaults for any field the operator omitted. Accepts the full resolved
56
- * config, the bare delivery bag, or the bare worktreeIsolation bag.
37
+ * Accepts the full config, the `delivery` bag, or the block itself.
57
38
  *
58
39
  * @param {object | null | undefined} config
59
40
  * @returns {typeof WORKTREE_ISOLATION_DEFAULTS}