mandrel 2.60.0 → 2.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (661) hide show
  1. package/.agents/README.md +10 -10
  2. package/.agents/agents/story-worker.md +1 -1
  3. package/.agents/docs/agentrc-reference.json +4 -82
  4. package/.agents/docs/configuration.md +20 -87
  5. package/.agents/docs/workflows.md +1 -1
  6. package/.agents/instructions.md +1 -3
  7. package/.agents/rules/gherkin-standards.md +4 -0
  8. package/.agents/schemas/agentrc.schema.json +11 -486
  9. package/.agents/schemas/story-deliver-terminal.schema.json +10 -0
  10. package/.agents/schemas/validation-evidence.schema.json +2 -1
  11. package/.agents/scripts/README.md +14 -14
  12. package/.agents/scripts/acceptance-eval.js +32 -164
  13. package/.agents/scripts/agents-bootstrap-github.js +27 -129
  14. package/.agents/scripts/apply-quality-bootstrap.js +4 -40
  15. package/.agents/scripts/audit-baselines.js +6 -27
  16. package/.agents/scripts/audit-labels-bootstrap.js +5 -29
  17. package/.agents/scripts/audit-to-stories.js +91 -361
  18. package/.agents/scripts/boot-sweep.js +19 -72
  19. package/.agents/scripts/bootstrap.js +74 -395
  20. package/.agents/scripts/ceremony-derive.js +9 -45
  21. package/.agents/scripts/check-arch-cycles.js +14 -64
  22. package/.agents/scripts/check-baselines.js +8 -48
  23. package/.agents/scripts/check-context-budget.js +46 -172
  24. package/.agents/scripts/check-cyclomatic.js +12 -44
  25. package/.agents/scripts/check-dead-exports.js +13 -64
  26. package/.agents/scripts/check-doc-links.js +38 -186
  27. package/.agents/scripts/check-gherkin-corpus.js +24 -127
  28. package/.agents/scripts/check-test-temp-hygiene.js +28 -169
  29. package/.agents/scripts/coverage-capture.js +32 -99
  30. package/.agents/scripts/deliver-light.js +14 -101
  31. package/.agents/scripts/deliver-recover.js +6 -42
  32. package/.agents/scripts/deliver-run.js +36 -133
  33. package/.agents/scripts/diagnose-friction.js +24 -116
  34. package/.agents/scripts/drain-pending-cleanup.js +1 -1
  35. package/.agents/scripts/evidence-gate.js +23 -85
  36. package/.agents/scripts/file-ci-gap.js +10 -50
  37. package/.agents/scripts/generate-config-docs.js +30 -170
  38. package/.agents/scripts/generate-lens-checklists.js +8 -52
  39. package/.agents/scripts/generate-skills-index.js +14 -112
  40. package/.agents/scripts/generate-workflows-doc.js +10 -70
  41. package/.agents/scripts/git-cleanup.js +2 -34
  42. package/.agents/scripts/lib/Graph.js +24 -81
  43. package/.agents/scripts/lib/ITicketingProvider.js +47 -143
  44. package/.agents/scripts/lib/Logger.js +14 -76
  45. package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
  46. package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
  47. package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
  48. package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
  49. package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
  50. package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
  51. package/.agents/scripts/lib/audit-baselines/read.js +3 -16
  52. package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
  53. package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
  54. package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
  55. package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
  56. package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
  57. package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
  58. package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
  59. package/.agents/scripts/lib/audit-suite/findings.js +12 -52
  60. package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
  61. package/.agents/scripts/lib/audit-suite/index.js +1 -15
  62. package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
  63. package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
  64. package/.agents/scripts/lib/audit-suite/runner.js +13 -43
  65. package/.agents/scripts/lib/audit-suite/selector.js +49 -349
  66. package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
  67. package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
  68. package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
  69. package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
  70. package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
  71. package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
  72. package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
  73. package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
  74. package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
  75. package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
  76. package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
  77. package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
  78. package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
  79. package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
  80. package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
  81. package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
  82. package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
  83. package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
  84. package/.agents/scripts/lib/baseline-loader.js +12 -51
  85. package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
  86. package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
  87. package/.agents/scripts/lib/baselines/components.js +10 -61
  88. package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
  89. package/.agents/scripts/lib/baselines/crap-preview-incremental.js +5 -21
  90. package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
  91. package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
  92. package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
  93. package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
  94. package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
  95. package/.agents/scripts/lib/baselines/envelope.js +13 -129
  96. package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
  97. package/.agents/scripts/lib/baselines/git-base.js +23 -142
  98. package/.agents/scripts/lib/baselines/kernel.js +11 -111
  99. package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
  100. package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
  101. package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
  102. package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
  103. package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
  104. package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
  105. package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
  106. package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
  107. package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
  108. package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
  109. package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
  110. package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
  111. package/.agents/scripts/lib/baselines/path-canon.js +19 -128
  112. package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
  113. package/.agents/scripts/lib/baselines/reader.js +14 -107
  114. package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
  115. package/.agents/scripts/lib/baselines/scope.js +11 -135
  116. package/.agents/scripts/lib/baselines/writer.js +16 -149
  117. package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
  118. package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
  119. package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
  120. package/.agents/scripts/lib/bdd-step-index.js +26 -100
  121. package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
  122. package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
  123. package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
  124. package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
  125. package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
  126. package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
  127. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
  128. package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
  129. package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
  130. package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
  131. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
  132. package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
  133. package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
  134. package/.agents/scripts/lib/bootstrap/summary.js +1 -8
  135. package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
  136. package/.agents/scripts/lib/branch-name-guard.js +4 -23
  137. package/.agents/scripts/lib/changed-files.js +31 -143
  138. package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
  139. package/.agents/scripts/lib/checks/index.js +18 -101
  140. package/.agents/scripts/lib/checks/loop-health.js +11 -53
  141. package/.agents/scripts/lib/checks/state.js +16 -91
  142. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
  143. package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
  144. package/.agents/scripts/lib/child-exec.js +39 -108
  145. package/.agents/scripts/lib/cli/standard-args.js +9 -116
  146. package/.agents/scripts/lib/cli-args.js +31 -146
  147. package/.agents/scripts/lib/cli-usage.js +5 -27
  148. package/.agents/scripts/lib/cli-utils.js +2 -12
  149. package/.agents/scripts/lib/close-validation/commands.js +13 -76
  150. package/.agents/scripts/lib/close-validation/gates.js +92 -331
  151. package/.agents/scripts/lib/close-validation/process.js +121 -151
  152. package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
  153. package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
  154. package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
  155. package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
  156. package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
  157. package/.agents/scripts/lib/close-validation/runner.js +53 -110
  158. package/.agents/scripts/lib/command-header.js +6 -28
  159. package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
  160. package/.agents/scripts/lib/config/baselines.js +3 -14
  161. package/.agents/scripts/lib/config/ci.js +8 -38
  162. package/.agents/scripts/lib/config/commands.js +1 -15
  163. package/.agents/scripts/lib/config/defaults.js +4 -33
  164. package/.agents/scripts/lib/config/delivery-routing.js +6 -35
  165. package/.agents/scripts/lib/config/explain.js +9 -80
  166. package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
  167. package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +2 -30
  168. package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
  169. package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
  170. package/.agents/scripts/lib/config/gates/index.js +2 -17
  171. package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
  172. package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
  173. package/.agents/scripts/lib/config/gates/shared.js +4 -64
  174. package/.agents/scripts/lib/config/github.js +4 -22
  175. package/.agents/scripts/lib/config/limits.js +4 -57
  176. package/.agents/scripts/lib/config/paths.js +2 -21
  177. package/.agents/scripts/lib/config/qa.js +4 -38
  178. package/.agents/scripts/lib/config/quality.js +76 -432
  179. package/.agents/scripts/lib/config/runners.js +12 -56
  180. package/.agents/scripts/lib/config/runtime.js +13 -57
  181. package/.agents/scripts/lib/config/shared.js +2 -16
  182. package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
  183. package/.agents/scripts/lib/config/temp-paths.js +40 -280
  184. package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
  185. package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
  186. package/.agents/scripts/lib/config-resolver.js +10 -52
  187. package/.agents/scripts/lib/config-schema-shared.js +1 -4
  188. package/.agents/scripts/lib/config-settings-schema-delivery.js +12 -294
  189. package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
  190. package/.agents/scripts/lib/config-settings-schema.js +37 -274
  191. package/.agents/scripts/lib/coverage-baseline.js +20 -110
  192. package/.agents/scripts/lib/coverage-capture-fullscope.js +12 -37
  193. package/.agents/scripts/lib/coverage-capture-incremental.js +12 -43
  194. package/.agents/scripts/lib/coverage-capture-usage.js +4 -24
  195. package/.agents/scripts/lib/coverage-capture.js +99 -224
  196. package/.agents/scripts/lib/coverage-utils.js +14 -79
  197. package/.agents/scripts/lib/cpu-pool.js +17 -123
  198. package/.agents/scripts/lib/crap-baseline-join.js +16 -88
  199. package/.agents/scripts/lib/crap-coordinates.js +6 -25
  200. package/.agents/scripts/lib/crap-engine.js +40 -153
  201. package/.agents/scripts/lib/crap-method-identity.js +16 -78
  202. package/.agents/scripts/lib/crap-utils.js +31 -155
  203. package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
  204. package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
  205. package/.agents/scripts/lib/dead-exports-knip.js +18 -56
  206. package/.agents/scripts/lib/dead-exports-mode.js +5 -24
  207. package/.agents/scripts/lib/degraded-mode.js +3 -26
  208. package/.agents/scripts/lib/dependency-parser.js +8 -40
  209. package/.agents/scripts/lib/dependency-version.js +13 -35
  210. package/.agents/scripts/lib/detect-package-manager.js +6 -36
  211. package/.agents/scripts/lib/doc-tiers.js +22 -126
  212. package/.agents/scripts/lib/duplicate-search.js +8 -72
  213. package/.agents/scripts/lib/env-loader.js +5 -27
  214. package/.agents/scripts/lib/error-redactor.js +6 -31
  215. package/.agents/scripts/lib/errors/index.js +2 -22
  216. package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
  217. package/.agents/scripts/lib/escomplex-kernel.js +21 -123
  218. package/.agents/scripts/lib/feedback-loop/graduator-core.js +93 -419
  219. package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
  220. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -151
  221. package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
  222. package/.agents/scripts/lib/findings/classify-finding.js +14 -69
  223. package/.agents/scripts/lib/findings/promote-finding.js +14 -112
  224. package/.agents/scripts/lib/findings/provenance-field.js +11 -52
  225. package/.agents/scripts/lib/findings/route-finding.js +37 -255
  226. package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
  227. package/.agents/scripts/lib/findings/severity.js +18 -104
  228. package/.agents/scripts/lib/format-generated-json.js +12 -44
  229. package/.agents/scripts/lib/full-suite-lock.js +160 -429
  230. package/.agents/scripts/lib/full-suite-queue.js +213 -0
  231. package/.agents/scripts/lib/gates/baseline-store.js +5 -9
  232. package/.agents/scripts/lib/gates/friction.js +1 -3
  233. package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
  234. package/.agents/scripts/lib/gh-exec.js +31 -259
  235. package/.agents/scripts/lib/git/cached-fetch.js +9 -52
  236. package/.agents/scripts/lib/git/sync-from-base.js +15 -107
  237. package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
  238. package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
  239. package/.agents/scripts/lib/git-utils.js +37 -161
  240. package/.agents/scripts/lib/github/framework-repo.js +8 -71
  241. package/.agents/scripts/lib/github-url.js +2 -17
  242. package/.agents/scripts/lib/import-graph.js +11 -38
  243. package/.agents/scripts/lib/install-cmd-parser.js +4 -13
  244. package/.agents/scripts/lib/json-utils.js +3 -18
  245. package/.agents/scripts/lib/label-constants.js +16 -111
  246. package/.agents/scripts/lib/label-taxonomy.js +4 -30
  247. package/.agents/scripts/lib/maintainability-engine.js +12 -80
  248. package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
  249. package/.agents/scripts/lib/maintainability-utils.js +16 -92
  250. package/.agents/scripts/lib/mandrel-catalog.js +12 -70
  251. package/.agents/scripts/lib/notifications/notifier.js +13 -38
  252. package/.agents/scripts/lib/npm-scripts.js +4 -23
  253. package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
  254. package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
  255. package/.agents/scripts/lib/observability/signal-validator.js +5 -37
  256. package/.agents/scripts/lib/observability/signals-writer.js +11 -121
  257. package/.agents/scripts/lib/observability/source-classifier.js +21 -203
  258. package/.agents/scripts/lib/observability/terse-result.js +14 -47
  259. package/.agents/scripts/lib/onboard/init-tail.js +13 -74
  260. package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
  261. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
  262. package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
  263. package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
  264. package/.agents/scripts/lib/orchestration/ceremony-routing.js +5 -75
  265. package/.agents/scripts/lib/orchestration/change-set.js +7 -36
  266. package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
  267. package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
  268. package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
  269. package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
  270. package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
  271. package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
  272. package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
  273. package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
  274. package/.agents/scripts/lib/orchestration/check-state.js +92 -0
  275. package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
  276. package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +42 -189
  277. package/.agents/scripts/lib/orchestration/code-review.js +24 -128
  278. package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
  279. package/.agents/scripts/lib/orchestration/complexity-gate.js +42 -214
  280. package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
  281. package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
  282. package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
  283. package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
  284. package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
  285. package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
  286. package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
  287. package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
  288. package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
  289. package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
  290. package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
  291. package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
  292. package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
  293. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
  294. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
  295. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
  296. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
  297. package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
  298. package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
  299. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
  300. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
  301. package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
  302. package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
  303. package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
  304. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
  305. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
  306. package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
  307. package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
  308. package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
  309. package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
  310. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
  311. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
  312. package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
  313. package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
  314. package/.agents/scripts/lib/orchestration/light-suitability.js +26 -231
  315. package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
  316. package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
  317. package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
  318. package/.agents/scripts/lib/orchestration/plan-context.js +52 -303
  319. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
  320. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
  321. package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
  322. package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
  323. package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
  324. package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
  325. package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +14 -78
  326. package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
  327. package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
  328. package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
  329. package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
  330. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
  331. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
  332. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +49 -248
  333. package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
  334. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +85 -368
  335. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +8 -38
  336. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +30 -190
  337. package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
  338. package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
  339. package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
  340. package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
  341. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
  342. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
  343. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
  344. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
  345. package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
  346. package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
  347. package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
  348. package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
  349. package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
  350. package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
  351. package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
  352. package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
  353. package/.agents/scripts/lib/orchestration/review-depth.js +12 -94
  354. package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
  355. package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
  356. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
  357. package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
  358. package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
  359. package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
  360. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
  361. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
  362. package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
  363. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
  364. package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
  365. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
  366. package/.agents/scripts/lib/orchestration/run-epilogue.js +40 -199
  367. package/.agents/scripts/lib/orchestration/run-scoped-config.js +13 -81
  368. package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
  369. package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
  370. package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
  371. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
  372. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +18 -80
  373. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
  374. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
  375. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
  376. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
  377. package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +9 -50
  378. package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
  379. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
  380. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
  381. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
  382. package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
  383. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
  384. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
  385. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
  386. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
  387. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
  388. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
  389. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
  390. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +110 -290
  391. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
  392. package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
  393. package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
  394. package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
  395. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
  396. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
  397. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
  398. package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
  399. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -201
  400. package/.agents/scripts/lib/orchestration/story-follow-ups.js +43 -245
  401. package/.agents/scripts/lib/orchestration/story-init-envelope.js +4 -23
  402. package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
  403. package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
  404. package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -126
  405. package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
  406. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
  407. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
  408. package/.agents/scripts/lib/orchestration/ticket-validator.js +39 -181
  409. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
  410. package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -250
  411. package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
  412. package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
  413. package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
  414. package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
  415. package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
  416. package/.agents/scripts/lib/path-security.js +3 -6
  417. package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
  418. package/.agents/scripts/lib/preflight-runner.js +13 -69
  419. package/.agents/scripts/lib/process-group.js +143 -0
  420. package/.agents/scripts/lib/project-root.js +2 -8
  421. package/.agents/scripts/lib/provider-factory.js +2 -25
  422. package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
  423. package/.agents/scripts/lib/qa/qa-session.js +15 -69
  424. package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
  425. package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
  426. package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
  427. package/.agents/scripts/lib/reserved-test-ids.js +9 -47
  428. package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
  429. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
  430. package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
  431. package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
  432. package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
  433. package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
  434. package/.agents/scripts/lib/signals/detectors/common.js +12 -38
  435. package/.agents/scripts/lib/signals/index.js +2 -19
  436. package/.agents/scripts/lib/signals/schema.js +14 -109
  437. package/.agents/scripts/lib/signals/write.js +2 -11
  438. package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
  439. package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
  440. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
  441. package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
  442. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
  443. package/.agents/scripts/lib/single-story-sweep.js +14 -97
  444. package/.agents/scripts/lib/skills/parse-skill.js +13 -59
  445. package/.agents/scripts/lib/skills/skills-index.js +8 -29
  446. package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
  447. package/.agents/scripts/lib/source-extensions.js +11 -42
  448. package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
  449. package/.agents/scripts/lib/stdio-flush.js +9 -36
  450. package/.agents/scripts/lib/story-adjacency.js +8 -40
  451. package/.agents/scripts/lib/story-body/body-format-lints.js +22 -83
  452. package/.agents/scripts/lib/story-body/footer-block.js +11 -44
  453. package/.agents/scripts/lib/story-body/story-body.js +83 -358
  454. package/.agents/scripts/lib/temp-retention.js +42 -143
  455. package/.agents/scripts/lib/templates/decomposer-prompts.js +11 -65
  456. package/.agents/scripts/lib/test-env.js +12 -65
  457. package/.agents/scripts/lib/test-run-credit.js +10 -65
  458. package/.agents/scripts/lib/test-runner-contract.js +19 -74
  459. package/.agents/scripts/lib/test-temp.js +38 -184
  460. package/.agents/scripts/lib/test-tiers.js +12 -96
  461. package/.agents/scripts/lib/ticket-body-sections.js +21 -96
  462. package/.agents/scripts/lib/transpile.js +15 -74
  463. package/.agents/scripts/lib/util/concurrent-map.js +6 -25
  464. package/.agents/scripts/lib/util/parse-id-list.js +8 -34
  465. package/.agents/scripts/lib/util/poll-loop.js +8 -28
  466. package/.agents/scripts/lib/util/with-timeout.js +2 -11
  467. package/.agents/scripts/lib/validation-evidence.js +21 -96
  468. package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
  469. package/.agents/scripts/lib/wave-runner/live-probe.js +53 -221
  470. package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
  471. package/.agents/scripts/lib/workers/crap-worker.js +11 -64
  472. package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
  473. package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
  474. package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
  475. package/.agents/scripts/lib/workflow-closure.js +22 -105
  476. package/.agents/scripts/lib/workspace-provisioner.js +16 -54
  477. package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
  478. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
  479. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
  480. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
  481. package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
  482. package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
  483. package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
  484. package/.agents/scripts/lib/worktree-manager.js +15 -40
  485. package/.agents/scripts/lint-issue-body.js +12 -68
  486. package/.agents/scripts/mandrel-update-preflight.js +10 -70
  487. package/.agents/scripts/merge-baseline.js +30 -104
  488. package/.agents/scripts/nav-registry-diff.js +22 -108
  489. package/.agents/scripts/notify.js +12 -69
  490. package/.agents/scripts/plan-context.js +27 -111
  491. package/.agents/scripts/plan-critics.js +12 -66
  492. package/.agents/scripts/plan-persist.js +31 -148
  493. package/.agents/scripts/plan-run-epilogue.js +11 -37
  494. package/.agents/scripts/pr-watch-with-update.js +76 -267
  495. package/.agents/scripts/providers/github/auth.js +3 -8
  496. package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
  497. package/.agents/scripts/providers/github/board-add.js +5 -21
  498. package/.agents/scripts/providers/github/branch-protection.js +11 -43
  499. package/.agents/scripts/providers/github/cache.js +2 -14
  500. package/.agents/scripts/providers/github/comments.js +7 -40
  501. package/.agents/scripts/providers/github/compose.js +3 -19
  502. package/.agents/scripts/providers/github/errors.js +22 -125
  503. package/.agents/scripts/providers/github/issues.js +31 -123
  504. package/.agents/scripts/providers/github/labels.js +24 -124
  505. package/.agents/scripts/providers/github/mappers.js +5 -27
  506. package/.agents/scripts/providers/github/merge-methods.js +3 -22
  507. package/.agents/scripts/providers/github/project-board.js +2 -17
  508. package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
  509. package/.agents/scripts/providers/github/request-helpers.js +5 -32
  510. package/.agents/scripts/providers/github/search-budget.js +9 -39
  511. package/.agents/scripts/providers/github/search-query.js +5 -26
  512. package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
  513. package/.agents/scripts/providers/github/sub-issues.js +7 -36
  514. package/.agents/scripts/providers/github/tickets.js +32 -134
  515. package/.agents/scripts/providers/github.js +18 -59
  516. package/.agents/scripts/prune-plan-run-labels.js +12 -46
  517. package/.agents/scripts/quality-preview.js +35 -220
  518. package/.agents/scripts/resolve-doc-tiers.js +3 -26
  519. package/.agents/scripts/resolve-stories.js +16 -67
  520. package/.agents/scripts/resync-status-column.js +6 -25
  521. package/.agents/scripts/run-tests.js +29 -104
  522. package/.agents/scripts/single-story-close.js +23 -135
  523. package/.agents/scripts/single-story-confirm-merge.js +32 -139
  524. package/.agents/scripts/single-story-init.js +47 -209
  525. package/.agents/scripts/stories-wave-tick.js +102 -472
  526. package/.agents/scripts/sync-agentrc.js +3 -21
  527. package/.agents/scripts/sync-claude-agents.js +9 -55
  528. package/.agents/scripts/sync-claude-commands.js +20 -110
  529. package/.agents/scripts/test-wrapper.js +6 -43
  530. package/.agents/scripts/update-coverage-baseline.js +5 -22
  531. package/.agents/scripts/update-crap-baseline.js +7 -30
  532. package/.agents/scripts/update-duplication-baseline.js +16 -92
  533. package/.agents/scripts/update-maintainability-baseline.js +8 -62
  534. package/.agents/scripts/update-ticket-state.js +1 -7
  535. package/.agents/scripts/validate-skills.js +6 -26
  536. package/.agents/templates/agent-protocol.md +2 -2
  537. package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
  538. package/.agents/workflows/audit-accessibility.md +4 -7
  539. package/.agents/workflows/audit-adrs.md +3 -6
  540. package/.agents/workflows/audit-architecture.md +3 -11
  541. package/.agents/workflows/audit-baselines.md +6 -9
  542. package/.agents/workflows/audit-clean-code.md +8 -12
  543. package/.agents/workflows/audit-data-model.md +3 -7
  544. package/.agents/workflows/audit-dependencies.md +4 -7
  545. package/.agents/workflows/audit-devops.md +4 -8
  546. package/.agents/workflows/audit-documentation.md +1 -4
  547. package/.agents/workflows/audit-mobile.md +4 -7
  548. package/.agents/workflows/audit-navigability.md +3 -6
  549. package/.agents/workflows/audit-performance.md +2 -4
  550. package/.agents/workflows/audit-privacy.md +4 -7
  551. package/.agents/workflows/audit-quality.md +4 -7
  552. package/.agents/workflows/audit-security.md +4 -7
  553. package/.agents/workflows/audit-seo.md +4 -7
  554. package/.agents/workflows/audit-sre.md +4 -7
  555. package/.agents/workflows/audit-to-stories.md +17 -30
  556. package/.agents/workflows/audit-ux-ui.md +4 -7
  557. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  558. package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
  559. package/.agents/workflows/helpers/deliver-digest.md +6 -4
  560. package/.agents/workflows/helpers/deliver-reference.md +114 -188
  561. package/.agents/workflows/helpers/deliver-story-reference.md +189 -533
  562. package/.agents/workflows/helpers/plan-reference.md +86 -139
  563. package/.agents/workflows/helpers/qa-core.md +12 -0
  564. package/.agents/workflows/memory-consolidate.md +1 -1
  565. package/.agents/workflows/qa-assist.md +27 -71
  566. package/.agents/workflows/qa-explore.md +19 -59
  567. package/.agents/workflows/qa-run.md +11 -33
  568. package/README.md +1 -1
  569. package/bin/mandrel.js +5 -46
  570. package/bin/postinstall.js +18 -107
  571. package/docs/CHANGELOG.md +25 -0
  572. package/lib/cli/doctor.js +11 -71
  573. package/lib/cli/init.js +26 -165
  574. package/lib/cli/migrate.js +5 -64
  575. package/lib/cli/registry.js +84 -467
  576. package/lib/cli/sync-agents.js +4 -64
  577. package/lib/cli/sync-commands.js +11 -64
  578. package/lib/cli/sync.js +34 -213
  579. package/lib/cli/uninstall.js +40 -219
  580. package/lib/cli/update.js +105 -661
  581. package/lib/cli/version-check.js +8 -72
  582. package/lib/cli/version-helpers.js +14 -87
  583. package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
  584. package/lib/migrations/index.js +15 -92
  585. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
  586. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
  587. package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
  588. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
  589. package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
  590. package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
  591. package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
  592. package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
  593. package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +2 -21
  594. package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
  595. package/package.json +16 -14
  596. package/.agents/docs/SDLC.md +0 -590
  597. package/.agents/docs/quality-gates.md +0 -1183
  598. package/.agents/rules/known-tooling-behavior.md +0 -200
  599. package/.agents/rules/orchestration-error-handling.md +0 -61
  600. package/.agents/rules/test-seams.md +0 -59
  601. package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
  602. package/.agents/schemas/baselines/lint.schema.json +0 -47
  603. package/.agents/scripts/check-action-pinning.js +0 -260
  604. package/.agents/scripts/check-audit-attribution.js +0 -302
  605. package/.agents/scripts/check-baseline-drift.js +0 -211
  606. package/.agents/scripts/check-baseline-scope.js +0 -362
  607. package/.agents/scripts/check-generated-validator.js +0 -202
  608. package/.agents/scripts/check-knip-entries.js +0 -159
  609. package/.agents/scripts/check-lifecycle-lint.js +0 -294
  610. package/.agents/scripts/check-pinned-override-notes.js +0 -102
  611. package/.agents/scripts/check-schema-references.js +0 -368
  612. package/.agents/scripts/check-test-portability.js +0 -512
  613. package/.agents/scripts/check-workflow-citations.js +0 -218
  614. package/.agents/scripts/check-workflow-cli-lint.js +0 -299
  615. package/.agents/scripts/check-workflow-timeouts.js +0 -291
  616. package/.agents/scripts/install-matrix-assert.js +0 -326
  617. package/.agents/scripts/lib/audit-advisories.js +0 -195
  618. package/.agents/scripts/lib/audit-attribution.js +0 -134
  619. package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
  620. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
  621. package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
  622. package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
  623. package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
  624. package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
  625. package/.agents/scripts/lib/c8-cli-path.js +0 -21
  626. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
  627. package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
  628. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
  629. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
  630. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
  631. package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
  632. package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
  633. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
  634. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
  635. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
  636. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
  637. package/.agents/scripts/lib/fs-walk.js +0 -52
  638. package/.agents/scripts/lib/knip-config-resolver.js +0 -181
  639. package/.agents/scripts/lib/knip-entry-sync.js +0 -452
  640. package/.agents/scripts/lib/pinned-override-notes.js +0 -88
  641. package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
  642. package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
  643. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
  644. package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
  645. package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
  646. package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
  647. package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
  648. package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
  649. package/.agents/scripts/lib/test-isolate/runner.js +0 -483
  650. package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
  651. package/.agents/scripts/lib/test-profile/render-report.js +0 -45
  652. package/.agents/scripts/lint-label-vocabulary.js +0 -214
  653. package/.agents/scripts/post-structured-comment.js +0 -127
  654. package/.agents/scripts/provision-git-hooks.js +0 -85
  655. package/.agents/scripts/prune-baseline-orphans.js +0 -181
  656. package/.agents/scripts/run-coverage.js +0 -197
  657. package/.agents/scripts/run-lint.js +0 -133
  658. package/.agents/scripts/run-test-profile.js +0 -129
  659. package/.agents/scripts/run-verify.js +0 -125
  660. package/.agents/scripts/test-isolate.js +0 -55
  661. package/.agents/scripts/update-dead-exports-baseline.js +0 -321
@@ -1,37 +1,8 @@
1
1
  /**
2
- * ColumnSync — derive the GitHub Projects v2 Status column from an issue's
3
- * agent:: labels, and push the update via the provider's GraphQL surface.
4
- *
5
- * The Status field carries only the three stock GitHub options
6
- * (`Todo` / `In Progress` / `Done`) — granular lifecycle state lives in the
7
- * `agent::*` labels themselves. This mapping collapses each lifecycle label
8
- * onto one of those three buckets:
9
- *
10
- * agent::review-spec → Todo
11
- * agent::ready → Todo
12
- * agent::executing → In Progress
13
- * agent::closing → In Progress
14
- * agent::blocked → In Progress (the `agent::blocked` label is the
15
- * granular signal; the board column just shows the
16
- * work is still in flight)
17
- * agent::done → Done
18
- *
19
- * No-op (soft fail) when:
20
- * - `projectNumber` is not configured
21
- * - The Status field or the required option is not present on the project
22
- * - The issue is not a project item (e.g. orchestrator running on a fork)
23
- *
24
- * The sync is implemented as pure functions plus a thin class wrapper so
25
- * tests can pump a fake provider's `graphql` calls without touching live
26
- * GitHub.
27
- *
28
- * Located at `lib/orchestration/column-sync.js` (Story #2548) so the
29
- * canonical state mutator `transitionTicketState`
30
- * (`lib/orchestration/ticketing/state.js`) can invoke it without an
31
- * upward dependency into the deleted `epic-runner/` tree. Prior to #2548 this module
32
- * lived under `epic-runner/` and was only wired against the Epic
33
- * ticket — Stories and Tasks never updated their Projects v2 Status
34
- * column on label flips.
2
+ * ColumnSync — collapse an issue's `agent::*` labels onto the stock Projects
3
+ * v2 Status options (`Todo` / `In Progress` / `Done`) and push it via
4
+ * GraphQL. Soft no-op when no project is configured, the Status field or
5
+ * option is missing, or the issue is not on the board.
35
6
  */
36
7
 
37
8
  import { AGENT_LABELS } from '../label-constants.js';
@@ -52,11 +23,8 @@ export const LABEL_TO_COLUMN = Object.freeze({
52
23
  });
53
24
 
54
25
  /**
55
- * Pick the target column for a set of labels. Terminal `done` wins
56
- * unconditionally; otherwise any in-flight label (executing / closing /
57
- * blocked) collapses to `In Progress`, and parking labels (review-spec /
58
- * ready) collapse to `Todo`. Returns null when no `agent::*` label is
59
- * present so the caller can skip the sync.
26
+ * `done` wins, then any in-flight label, then parking labels; `null` when no
27
+ * `agent::*` label is present.
60
28
  */
61
29
  export function columnForLabels(labels) {
62
30
  const set = new Set(labels);
@@ -95,23 +63,14 @@ export class ColumnSync {
95
63
  null;
96
64
  this.projectOwner = opts.projectOwner ?? provider.projectOwner ?? null;
97
65
  this.logger = opts.logger ?? ctx?.logger ?? console;
98
- // Resolved config bag used to locate the on-disk meta cache's tempRoot.
99
- // Optional — when omitted, the cache resolves the framework-default
100
- // `temp` root (Story #4252).
66
+ // Locates the meta cache's tempRoot; absent means the default `temp`.
101
67
  this.config = opts.config ?? ctx?.config ?? undefined;
102
68
  this._meta = null; // lazy-cached { projectId, fieldId, options: Map<name, id> }
103
- // Records whether the in-process `_meta` was hydrated from the on-disk
104
- // cache, so a GraphQL error against possibly-stale cached metadata can
105
- // invalidate the disk entry and force a fresh resolve on the next flip
106
- // (Story #4252).
69
+ // Disk-hydrated meta may be stale; a failed mutation then invalidates it.
107
70
  this._metaFromDiskCache = false;
108
71
  }
109
72
 
110
73
  /**
111
- * Sync a single issue to the column its `agent::*` labels imply. Returns a
112
- * result descriptor (`synced | skipped | failed`) so callers can log
113
- * without parsing errors.
114
- *
115
74
  * @param {number} issueId
116
75
  * @param {string[]} labels
117
76
  */
@@ -122,19 +81,8 @@ export class ColumnSync {
122
81
  }
123
82
 
124
83
  /**
125
- * Push one issue to a column named **directly**, skipping the label
126
- * derivation {@link sync} performs.
127
- *
128
- * Split out for the one caller whose target column cannot come from labels:
129
- * a container Epic carries no `agent::*` label by construction, so
130
- * {@link columnForLabels} returns `null` for it and `sync` can never move
131
- * it. The Epic's column is derived from its children instead
132
- * (`epic-rollup.js`) and handed here — which keeps that derivation from
133
- * having to fabricate a label on the container just to reach the board, the
134
- * one thing the container invariant forbids.
135
- *
136
- * Every skip path, the metadata cache and the stale-cache self-heal are
137
- * shared with `sync` because they live here rather than in it.
84
+ * Set a column directly, without label derivation — for container Epics,
85
+ * which carry no `agent::*` label by invariant.
138
86
  *
139
87
  * @param {number} issueId
140
88
  * @param {string} column Board column name (`Todo` | `In Progress` | `Done`).
@@ -177,12 +125,8 @@ export class ColumnSync {
177
125
  },
178
126
  );
179
127
  } catch (err) {
180
- // A failed mutation against metadata that came from the disk cache
181
- // most likely means the board was reconfigured since the entry was
182
- // written (a stale projectId / fieldId / optionId). Invalidate the
183
- // disk entry so the next flip re-resolves against the live board and
184
- // self-heals (Story #4252). Re-throw so the caller's existing error
185
- // handling (e.g. `syncProjectStatusColumn`'s warn) is preserved.
128
+ // Likely a reconfigured board: drop cached meta so the next flip
129
+ // self-heals, and re-throw for the caller's handling.
186
130
  this.#invalidateMetaCache();
187
131
  throw err;
188
132
  }
@@ -190,9 +134,7 @@ export class ColumnSync {
190
134
  }
191
135
 
192
136
  /**
193
- * The `(owner, projectNumber)` pair the disk cache is keyed by. Mirrors
194
- * the owner that `#loadMeta` resolves the board against so a cache hit and
195
- * a live resolve agree on the same board identity.
137
+ * Cache key; same owner `#loadMeta` resolves against.
196
138
  *
197
139
  * @returns {{ owner: string|null, projectNumber: number|null }}
198
140
  */
@@ -204,11 +146,8 @@ export class ColumnSync {
204
146
  }
205
147
 
206
148
  /**
207
- * Invalidate the on-disk metadata cache entry for this board and drop the
208
- * in-process copy, so the next `#loadMeta` re-resolves from the live
209
- * board. Only fires when the current `_meta` came from the disk cache —
210
- * a freshly-resolved entry that fails the mutation is a transient/live
211
- * problem, not a stale-cache problem.
149
+ * Only disk-hydrated meta is invalidated; a fresh resolve that fails is a
150
+ * live problem, not a stale cache.
212
151
  */
213
152
  #invalidateMetaCache() {
214
153
  if (!this._metaFromDiskCache) return;
@@ -220,9 +159,8 @@ export class ColumnSync {
220
159
 
221
160
  async #loadMeta() {
222
161
  if (this._meta !== null) return this._meta || null;
223
- // Disk cache hit short-circuits the ~2 metadata GraphQL round-trips
224
- // (resolveProjectMeta) — repo-invariant board metadata persists across
225
- // the cold CLI processes of a single-story delivery (Story #4252).
162
+ // Board meta is repo-invariant; the disk cache spares each cold CLI
163
+ // process the resolve round-trips.
226
164
  const cachedBoard = this.#cacheBoard;
227
165
  const cached = readProjectMetaCache({
228
166
  owner: cachedBoard.owner,
@@ -235,18 +173,9 @@ export class ColumnSync {
235
173
  return this._meta;
236
174
  }
237
175
  try {
238
- // Resolve the board by walking the owner-type ladder
239
- // (organization → user → viewer) via the shared resolver so the
240
- // org-owned path can't drift from `workflow-audit.js`. The Status
241
- // single-select field is projected alongside the board id in one
242
- // round-trip. (Story #4237; org-owner support extends the
243
- // user/viewer ladder added in #3560.)
176
+ // Shared org → user → viewer resolver; Status field in one round-trip.
244
177
  const project = await resolveProjectMeta({
245
178
  provider: this.provider,
246
- // Prefer the explicit `github.projectOwner`; fall back to the repo
247
- // owner so an org-owned board still gets a login to scope
248
- // `organization(login:)` / `user(login:)` by even when no separate
249
- // projectOwner is configured. `viewer` is always the final rung.
250
179
  owner: this.projectOwner ?? this.provider.owner ?? null,
251
180
  projectNumber: this.projectNumber,
252
181
  projectFields: `
@@ -269,9 +198,7 @@ export class ColumnSync {
269
198
  fieldId: field.id,
270
199
  options,
271
200
  };
272
- // Persist the freshly-resolved, repo-invariant metadata so the next
273
- // cold flip reads it from disk instead of re-paying the resolve
274
- // (Story #4252). Best-effort: a write failure never blocks the sync.
201
+ // Best-effort; a write failure never blocks the sync.
275
202
  writeProjectMetaCache({
276
203
  owner: cachedBoard.owner,
277
204
  projectNumber: cachedBoard.projectNumber,
@@ -290,17 +217,8 @@ export class ColumnSync {
290
217
  }
291
218
 
292
219
  /**
293
- * Read the live `Status` column for an issue from the Projects v2
294
- * board. Returns the column name (e.g. `'Done'`, `'In Progress'`)
295
- * or `null` when the issue is not on the configured project, the
296
- * Status field has no current value, or the metadata cannot be
297
- * resolved.
298
- *
299
- * Story #2876 — used by `reassertStatusColumn` to detect drift
300
- * between the orchestrator's intended column and the bot-rewritten
301
- * column. The labels alone don't move when the bot overwrites
302
- * Status — that's the bug class we defend against — so the
303
- * drift-check MUST read the live Status, not the issue labels.
220
+ * Live Status column, or `null`. Drift checks must read this, not labels:
221
+ * the Projects bot rewrites Status without touching labels.
304
222
  *
305
223
  * @param {number} issueId
306
224
  * @returns {Promise<string|null>}
@@ -336,14 +254,8 @@ export class ColumnSync {
336
254
  }
337
255
 
338
256
  async #getProjectItemId(issueId, projectId) {
339
- // Walk from the issue to its projectItems and pick the one whose
340
- // project.id matches the configured board. The previous implementation
341
- // paginated `node(projectId).items(first: 100)` and scanned for the
342
- // issue number, which silently returned null on any board with >100
343
- // items — the Mandrel board crossed that cliff at ~2,300 items, so
344
- // every recent ticket's Status flip became a no-op. The by-issue path
345
- // is O(1) per sync and has no pagination cliff (an issue is
346
- // realistically never on more than a handful of boards at once).
257
+ // Walk issue → projectItems, not board → items: scanning board items
258
+ // hits a pagination cliff on large boards; an issue is on few boards.
347
259
  const owner = this.provider.owner;
348
260
  const repo = this.provider.repo;
349
261
  if (!owner || !repo) return null;
@@ -1,49 +1,10 @@
1
1
  /**
2
- * lib/orchestration/complexity-gate.js — shape-derived Story routing for the
3
- * deliver side (Story #4722; plan-side lite claim deleted by Story #5312).
4
- *
5
- * Three surfaces survive, all read at delivery time:
6
- *
7
- * 1. **Seed signals ({@link buildComplexitySignals}).** `/mandrel-plan`'s
8
- * context envelope carries the paths a seed predicts, their repo state
9
- * (existing paths predict refactors; missing ones predict creates) and
10
- * the `audit-rules.json` sensitive-path classes the footprint intersects.
11
- * They ground the authoring template's `changes[]` skeleton and the
12
- * `/prototype` offer; they route nothing.
13
- * 2. **Story risk ({@link deriveStoryShape}).** The light path
14
- * (`deliver-light`) reads a predicted footprint's **risk** — a migration
15
- * paired with its consumers, and the `audit-rules.json` sensitive-path
16
- * classes the footprint intersects — to decide whether a prompt may skip
17
- * the Story-authoring ceremony. Effort is no longer an axis: Story #4764
18
- * removed the artifact counts, and Story #5344 removed the declared
19
- * effort ceilings that replaced them, because a prediction is a
20
- * declaration and size is enforced against ground truth by the light
21
- * path's diff backstop.
22
- * 3. **Dispatch mode ({@link resolveStoryDispatchMode}).** `/mandrel-deliver`
23
- * answers a different question from the route: may the engine run in the
24
- * router's own session? Only a **single-Story run** may (Story #4736).
25
- *
26
- * Story #5312 deleted the plan-side half: the planner's authored lite claim
27
- * (`--route-downgrade-reason`), the persist-time shape backstop that
28
- * validated it, the `route::lite` hint label, and the
29
- * `planning.complexityGate` knobs. Persist no longer routes; every Story
30
- * lands through the same engine and the same close gates.
31
- *
32
- * The risk taxonomy is deliberately the one `review-depth.js` already
33
- * applies to the landed diff at close (`deriveChangeLevel` over the
34
- * `audit-rules.json` sensitive-path classes): **predicted footprint at
35
- * dispatch, actual diff at close** — one taxonomy, two read points.
36
- * Sensitivity always wins: a small change whose footprint intersects a
37
- * sensitive-path class routes `full`, which keeps its deep code review
38
- * (`review-depth.js`).
39
- *
40
- * The light path still produces a Story ticket, still lands via a PR to
41
- * `main`, still runs every repo quality gate, and still honours
42
- * `rules/security-baseline.md`. That is a property of
43
- * `single-story-close.js`, which runs those gates regardless of route — the
44
- * router cannot and does not switch them off. Story #5366 deleted the frozen
45
- * `preserves` payload that used to restate it on every decision: nothing read
46
- * it, and a claim attached to a decision is not the thing that enforces it.
2
+ * lib/orchestration/complexity-gate.js — deliver-side Story routing: seed
3
+ * signals for `/mandrel-plan`, footprint risk for the light path, and
4
+ * inline-vs-subagent dispatch. Risk uses the same sensitive-path taxonomy
5
+ * `review-depth.js` applies to the landed diff at close (predicted footprint
6
+ * at dispatch, actual diff at close); sensitivity always wins. Close gates
7
+ * run regardless of route — the router cannot switch them off.
47
8
  *
48
9
  * @typedef {'lite'|'full'} ComplexityRoute
49
10
  */
@@ -53,37 +14,17 @@ import path from 'node:path';
53
14
  import { extractChangePaths } from '../story-body/story-body.js';
54
15
  import { deriveChangeLevel } from './review-depth.js';
55
16
 
56
- /**
57
- * ## Why no predicted-effort ceilings live here any more (Story #5344)
58
- *
59
- * This module used to export a frozen shape-ceilings constant — declared kinds,
60
- * a magnitude bucket, an uncertainty bucket, and a deployable span — which the
61
- * light path judged a prompt's predicted footprint against. Two rounds of
62
- * evidence retired them. Story #4764 had already removed the artifact counts
63
- * (`maxChanges`, `maxAcceptance`) because cardinality is the wrong axis in both
64
- * directions. Story #5313 then demoted the remaining four axes from a gate to a
65
- * `warnings[]` entry, at which point they decided nothing at all: every one was
66
- * SELF-DECLARED by the same agent asking to proceed, and an axis a caller sets
67
- * and no one verifies is not a measurement. Story #5344 deleted them.
68
- *
69
- * What survives is what reads something other than the caller's own claim: the
70
- * two absolute risk rules below (a migration paired with its consumers, and a
71
- * footprint intersecting a registered sensitive-path class), derived from the
72
- * predicted PATHS, and the diff-derived backstop that measures the actual
73
- * change set
74
- * ({@link module:lib/orchestration/light-suitability.checkLightDiffBackstop}).
75
- * The backstop's `LIGHT_DIFF_CEILINGS` are now the only size block on the
76
- * light path, and they are the only ceilings measured against ground truth.
77
- */
17
+ // No predicted-size ceilings: a size the caller declares about itself is not
18
+ // a measurement. Size is bounded only by the diff backstop
19
+ // (`light-suitability.checkLightDiffBackstop`); the rules here read paths.
78
20
 
79
21
  /** Paths that are schema migrations rather than ordinary source. */
80
22
  const MIGRATION_PATH_RE =
81
23
  /(?:^|\/)(?:migrations?|migrate)(?:\/|$)|\.sql$|(?:^|\/)schema\.(?:prisma|rb)$/i;
82
24
 
83
25
  /**
84
- * Does the footprint pair a schema migration with its consumers? A migration
85
- * plus the code that reads through it is epic scope: the two have to land
86
- * together and the ordering is the design work.
26
+ * A migration plus the code that reads through it is epic scope: the
27
+ * ordering is the design work.
87
28
  *
88
29
  * @param {string[]} paths
89
30
  * @returns {boolean}
@@ -94,29 +35,10 @@ function spansMigrationAndConsumers(paths) {
94
35
  }
95
36
 
96
37
  /**
97
- * Stable machine-readable identifiers for every reason a footprint routes
98
- * `full` — the `code` field on a {@link deriveStoryShape} decision
99
- * (Story #4815).
100
- *
101
- * The prose in `reasons[]` is written for a human reading a gate envelope and
102
- * is free to be re-worded; a caller that must **branch** on *which* rule
103
- * objected reads this code instead — keying that decision off reason text
104
- * would make a copy-edit a routing change.
105
- *
106
- * Split two ways since Story #5344 deleted the ceiling rules
107
- * (`change-kinds`, `magnitude`, `uncertainty`, `deployable-span`), and the
108
- * grouping is the contract:
109
- *
110
- * - **Absolute rules** — `migration-span`, `sensitive-path`. Risk, not size,
111
- * and derived from the predicted PATHS rather than a self-declared bucket.
112
- * No re-slicing satisfies one.
113
- * - **Unknown-footprint rejections** — `no-changes`, `unreadable-changes`,
114
- * `glob-footprint`, `classification-unavailable`. Nothing was judged, so
115
- * there is nothing to appeal. Story #5366 deleted `no-acceptance` with
116
- * the `--acceptance` flag that was its only source: the flag clamped to a
117
- * floor of one, so the zero-check behind this code could never fire.
118
- *
119
- * A `lite` route carries `code: null`.
38
+ * Stable codes for why a footprint routes `full`; callers branch on these,
39
+ * never on `reasons[]` prose. Absolute risk rules (`migration-span`,
40
+ * `sensitive-path`) no re-slicing satisfies; the rest are unknown-footprint
41
+ * rejections. `lite` carries `code: null`.
120
42
  */
121
43
  export const SHAPE_CODES = Object.freeze({
122
44
  MIGRATION_SPAN: 'migration-span',
@@ -128,10 +50,7 @@ export const SHAPE_CODES = Object.freeze({
128
50
  });
129
51
 
130
52
  /**
131
- * Ordered **absolute risk** rules, evaluated in order; the first hit is the
132
- * recorded reason for a `full` route. Neither reads a bucket the caller
133
- * declared about itself — both are derived from the predicted paths, which is
134
- * exactly why they survived the Story #5344 deletion of the effort ceilings.
53
+ * Absolute risk rules, in order; the first hit is the `full` reason.
135
54
  *
136
55
  * @type {ReadonlyArray<{
137
56
  * code: string,
@@ -155,9 +74,6 @@ const RISK_RULES = Object.freeze([
155
74
  ]);
156
75
 
157
76
  /**
158
- * First absolute risk rule the footprint violates as a `{ code, reason }`
159
- * pair, or `null` when it clears them all.
160
- *
161
77
  * @param {object} shape
162
78
  * @returns {{ code: string, reason: string }|null}
163
79
  */
@@ -171,8 +87,7 @@ function firstRiskViolation(shape) {
171
87
  }
172
88
 
173
89
  /**
174
- * Count top-level enumerated items (`- `, `* `, `1. `) in a free-form seed —
175
- * each enumerated line is one predicted artifact.
90
+ * Count enumerated lines (`- `, `* `, `1. `) in a seed.
176
91
  *
177
92
  * @param {string} text
178
93
  * @returns {number}
@@ -188,9 +103,7 @@ function countSeedArtifacts(text) {
188
103
  const MAX_PREDICTED_PATHS = 50;
189
104
 
190
105
  /**
191
- * Extract path-like tokens (at least one `/` plus a dotted extension) from a
192
- * free-form seed — the predicted footprint the sensitive-path and repo-state
193
- * signals classify.
106
+ * Path-like tokens (a `/` plus a dotted extension) in a seed.
194
107
  *
195
108
  * @param {string} text
196
109
  * @returns {string[]} Deduplicated, in order of first appearance.
@@ -208,25 +121,10 @@ function extractPredictedPaths(text) {
208
121
  }
209
122
 
210
123
  /**
211
- * Build the advisory complexity **signals** for a planning seed. Signals,
212
- * not routing: the result carries `routingAuthority: false` and no `route`
213
- * field — they ground the authoring template's pre-resolved `changes[]` and
214
- * the `/prototype` offer, nothing else (Story #5312 deleted the risk-heuristic
215
- * hits and the `planning.complexityGate` echo that used to ride alongside).
216
- *
217
- * - `artifactCount` — enumerated items in the seed, a rough width
218
- * signal for the operator's eye only.
219
- * - `predictedPaths` — path-like tokens the seed names, in order of
220
- * first appearance (capped).
221
- * - `repoState` — which predicted paths exist in the repo (existing
222
- * paths predict refactors; missing predict
223
- * creates).
224
- * - `sensitivePathClasses` — `audit-rules.json` sensitive-path classes the
225
- * predicted footprint intersects (the same
226
- * taxonomy close applies to the landed diff).
227
- *
228
- * Total: never throws; a failed classification degrades to an empty class
229
- * list (the honest "no signal", never a verdict).
124
+ * Advisory signals for a planning seed — they ground the authoring
125
+ * template's `changes[]` and the `/prototype` offer and route nothing.
126
+ * Existing paths predict refactors, missing ones creates. Never throws; a
127
+ * failed classification yields an empty class list.
230
128
  *
231
129
  * @param {{
232
130
  * seedText?: string,
@@ -284,10 +182,6 @@ export function buildComplexitySignals({
284
182
  }
285
183
 
286
184
  /**
287
- * Assemble one decision object. Module-level rather than a closure inside
288
- * {@link deriveStoryShape}, so each rejection family below can build its own
289
- * verdict through one shape.
290
- *
291
185
  * @param {'lite'|'full'} route
292
186
  * @param {string|null} code
293
187
  * @param {string} reason
@@ -299,10 +193,8 @@ function decide(route, code, reason, shape = null) {
299
193
  }
300
194
 
301
195
  /**
302
- * Read the declared footprint into path entries, or the rejection that stands
303
- * in for one when it cannot be read at all — the first of the three rejection
304
- * families {@link SHAPE_CODES} groups. Nothing has been judged at this point,
305
- * so neither rejection carries a shape.
196
+ * Read the footprint into path entries, or a shape-less rejection when it
197
+ * cannot be read.
306
198
  *
307
199
  * @param {unknown} changes
308
200
  * @returns {{ entries: Array<{ path: string, isGlob?: boolean }>|null, rejection: object|null }}
@@ -333,14 +225,7 @@ function readFootprintEntries(changes) {
333
225
  }
334
226
 
335
227
  /**
336
- * The one rejection a footprint that WAS read can still earn before any risk
337
- * rule is reached: an unknowable width (a glob). Returns `null` when the
338
- * footprint is judgeable.
339
- *
340
- * It used to have a sibling — a zero-length acceptance list — which Story
341
- * #5366 removed along with the `--acceptance` flag that fed it. The flag
342
- * clamped its own value to a floor of one, so the branch was unreachable from
343
- * the only caller in the tree.
228
+ * A glob footprint has unknowable width; `null` when judgeable.
344
229
  *
345
230
  * @param {Array<{ isGlob?: boolean }>} entries
346
231
  * @param {object} shape
@@ -359,9 +244,6 @@ function unjudgeableFootprintRejection(entries, shape) {
359
244
  }
360
245
 
361
246
  /**
362
- * Assemble the risk shape of a footprint — the evidence
363
- * {@link deriveStoryShape} decides on and carries on its result.
364
- *
365
247
  * @param {{
366
248
  * paths: string[],
367
249
  * sensitiveClasses: string[],
@@ -381,31 +263,11 @@ function buildRiskShape({ paths, sensitiveClasses }) {
381
263
  }
382
264
 
383
265
  /**
384
- * Derive the complexity route from a footprint's **risk** (Story #4722
385
- * AC-3/AC-4; re-anchored off artifact cardinality by Story #4764; the declared
386
- * effort ceilings deleted by Story #5344) — the single function the light
387
- * path's suitability gate reads, so prediction-time and close-time can never
388
- * disagree about what is sensitive.
389
- *
390
- * `lite` requires:
391
- *
392
- * - a declared, parseable, glob-free `changes[]` footprint — width is not
393
- * counted, but an unknown footprint cannot be classified for risk;
394
- * - no migration-with-consumers span;
395
- * - a footprint intersecting **no** sensitive-path class
396
- * (`deriveChangeLevel`, the taxonomy close applies to the landed diff).
397
- * Sensitivity always wins (AC-6): a sensitive footprint routes `full`
398
- * however small or mechanical, which keeps the deep code review via
399
- * `review-depth.js#resolveDepth`. Since Story #5343 it does NOT also buy a
400
- * fresh acceptance critic — that owner follows the ceremony profile.
401
- *
402
- * **Size is not a rule here.** It was, and Story #5344 removed it: every size
403
- * axis was a bucket the caller declared about its own request, and the light
404
- * path's diff backstop measures the real change set afterwards. What is left
405
- * reads the predicted paths, which is evidence.
406
- *
407
- * Everything else — an unknown/undeclared footprint or an unreadable
408
- * sensitive-path manifest — fails toward `full`. Total: never throws.
266
+ * Route a footprint by risk. `lite` requires a declared, parseable,
267
+ * glob-free `changes[]`, no migration-with-consumers span, and no
268
+ * sensitive-path class (a sensitive footprint keeps deep code review however
269
+ * small). Anything unknown or unclassifiable fails toward `full`. Never
270
+ * throws.
409
271
  *
410
272
  * @param {{
411
273
  * changes?: unknown,
@@ -417,9 +279,7 @@ function buildRiskShape({ paths, sensitiveClasses }) {
417
279
  * reasons: string[],
418
280
  * code: string|null,
419
281
  * shape: ReturnType<typeof buildRiskShape>|null,
420
- * }} `code` is the stable {@link SHAPE_CODES} identifier for the rule that
421
- * rejected the footprint (`null` on `lite`) — the field a caller branches
422
- * on, since `reasons[]` is human prose and free to be re-worded.
282
+ * }}
423
283
  */
424
284
  export function deriveStoryShape({
425
285
  changes,
@@ -446,9 +306,7 @@ export function deriveStoryShape({
446
306
  }
447
307
 
448
308
  if (level !== 'low') {
449
- // `deriveChangeLevel` degraded to its null fail-safe (unreadable
450
- // manifest / failed selector): there is no evidence the footprint is
451
- // non-sensitive, and a classification failure must never buy lite.
309
+ // Classification failed; that must never buy lite.
452
310
  return decide(
453
311
  'full',
454
312
  SHAPE_CODES.CLASSIFICATION_UNAVAILABLE,
@@ -466,49 +324,19 @@ export function deriveStoryShape({
466
324
  }
467
325
 
468
326
  /**
469
- * Decide how `/mandrel-deliver` executes a Story: **run topology, and nothing else.**
470
- *
471
- * **`inline` names one indivisible resource: the router's own session.** Two
472
- * Stories cannot both own it, so exactly one premise can grant it —
473
- * **run topology (Story #4736)**: a run resolving a *single* Story executes
474
- * inline whatever its shape, because sub-agent isolation is load-bearing only
475
- * for CONCURRENT dispatch (two workers sharing a checkout race on worktrees and
476
- * branch refs) and a one-Story run has no sibling to race. It therefore pays
477
- * the spawn premium (a boot is a cache WRITE at full rate, where an inline
478
- * continuation is a cache read at ~10%; ~$1.43/M vs ~$1.07/M on comparable
479
- * bench work) for nothing.
480
- *
481
- * **Shape cannot grant it (Story #4829).** The shape read used to return
482
- * `inline` for any lite-shaped body in a multi-Story run, inheriting no
483
- * topology guard. Measured twice on 2026-07-29: a two-Story and a three-Story
484
- * run came back `inline` for *every* Story while `stories-wave-tick.js`
485
- * reported the whole set ready under a concurrency cap of five — a router
486
- * following both signals literally runs several engines over one session and
487
- * one checkout, the precise hazard the sub-agent path exists to prevent.
488
- *
489
- * **So this function reads only `storyCount` (Story #5006).** #4829 left the
490
- * body parse, the shape derivation, the `route::lite` hint note and the
491
- * `planning.complexityGate.enabled` branch in place to populate a `route`
492
- * field for reporting — but the sole consumer, `resolve-stories.js`, reads
493
- * `.mode` and discards the rest, so every one of those inputs was a parse
494
- * whose result nothing could act on. A caller that wants the shape calls
495
- * {@link deriveStoryShape} directly, as the light path and plan-persist do.
496
- *
497
- * Inline execution removes model-side fan-out only — it changes **where** the
498
- * engine runs, never **what** runs. Every deterministic
499
- * `single-story-close.js` gate, the PR to `main`, and the
500
- * `story-deliver-terminal` envelope are identical in both modes; see the
501
- * module header's non-negotiables.
502
- *
503
- * @param {{ storyCount?: unknown }} [args] `storyCount` is the number of
504
- * Stories the invoking `/mandrel-deliver` run resolved. Omitted (or not exactly 1)
505
- * means the run cannot be shown sibling-free and therefore dispatches as a
506
- * sub-agent — never an assumed 1.
327
+ * Decide where `/mandrel-deliver` runs a Story, from run topology only.
328
+ * `inline` claims the router's own session, which only one Story can own:
329
+ * sub-agent isolation matters only for concurrent dispatch (siblings race
330
+ * worktrees and branch refs), so a single-Story run goes inline to skip the
331
+ * spawn's cache-write premium. Shape must never grant inline — a multi-Story
332
+ * run would put several engines on one session and checkout. Only *where*
333
+ * changes; close gates, PR and terminal envelope are identical.
334
+ *
335
+ * @param {{ storyCount?: unknown }} [args] Anything but exactly 1 dispatches
336
+ * as a sub-agent.
507
337
  * @returns {{ mode: 'inline'|'subagent', reasons: string[] }}
508
338
  */
509
339
  export function resolveStoryDispatchMode({ storyCount } = {}) {
510
- // The ONLY `inline` exit in this function, and the guard is the whole
511
- // contract: an inline verdict must mean the engine can actually run inline.
512
340
  if (storyCount === 1) {
513
341
  return {
514
342
  mode: 'inline',