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
@@ -11,36 +11,17 @@ import {
11
11
  } from './config/github.js';
12
12
  import { PATHS_DEFAULTS } from './config/paths.js';
13
13
  import { SHELL_INJECTION_PATTERN_STRING } from './config-schema-shared.js';
14
- // `delivery.*` sub-schemas were extracted to a sibling module (refs #3457)
15
- // to keep this aggregate module above the maintainability floor. The
16
- // resolved AGENTRC_SCHEMA is unchanged.
17
14
  import { DELIVERY_SCHEMA } from './config-settings-schema-delivery.js';
18
15
  import compiledAgentrcValidator from './generated/agentrc-validator.js';
19
16
  import { DEFAULT_FRAMEWORK_REPO } from './github/framework-repo.js';
20
17
  import { SKILL_ID_RE } from './skills/walk-skill-files.js';
21
18
 
22
19
  /**
23
- * Annotation contract (Story #5007). These schema literals are the SINGLE
24
- * annotated source for the whole `.agentrc.json` surface:
25
- *
26
- * - `description` — the operator-facing gloss. `generate-config-docs.js`
27
- * serializes it into the shipped JSON-Schema mirror
28
- * (`.agents/schemas/agentrc.schema.json`, which every consumer config
29
- * points `$schema` at) and into the `configuration.md` key table.
30
- * - `default` — the value that appears in the generated defaults
31
- * inventory `.agents/docs/agentrc-reference.json` (the SSOT
32
- * `lib/config/defaults.js` reads for `mandrel explain` and the
33
- * sync-agentrc redundancy advisory). Import the matching runtime
34
- * `*_DEFAULTS` constant rather than restating a literal wherever one
35
- * exists, so the annotation and the resolver cannot drift.
36
- *
37
- * A key with a runtime default but no `default` annotation is deliberately
38
- * out of the inventory — annotating it would change what `mandrel explain`
39
- * reports and what sync-agentrc flags redundant, which is a behaviour
40
- * change, not a representation one.
41
- *
42
- * Nothing here is hand-mirrored any more: run `npm run docs:gen` after
43
- * editing, and `npm run docs:check` fails closed on drift.
20
+ * The single annotated source for `.agentrc.json`: `description` feeds the
21
+ * generated JSON-Schema mirror and configuration.md; `default` feeds the
22
+ * defaults inventory (import the runtime `*_DEFAULTS` constant, never restate
23
+ * a literal). A runtime default left unannotated is deliberately out of the
24
+ * inventory. Run `npm run docs:gen` after editing.
44
25
  */
45
26
 
46
27
  const SAFE_STRING = {
@@ -53,35 +34,18 @@ const _NULLABLE_SAFE_STRING = {
53
34
  not: { type: 'string', pattern: SHELL_INJECTION_PATTERN_STRING },
54
35
  };
55
36
 
56
- /**
57
- * Optional commands that may be `null` to mean "disabled" but, when set as a
58
- * string, must be non-empty. `minLength` is a string-only keyword so it is a
59
- * no-op for `null`; the empty string is explicitly rejected.
60
- */
37
+ /** `null` allowed; a string must be non-empty (`minLength` ignores `null`). */
61
38
  const NULLABLE_NONEMPTY_SAFE_STRING = {
62
39
  type: ['string', 'null'],
63
40
  minLength: 1,
64
41
  not: { type: 'string', pattern: SHELL_INJECTION_PATTERN_STRING },
65
42
  };
66
43
 
67
- /**
68
- * Backwards-compatible export used by a handful of call sites that historically
69
- * scanned the schema for string-shaped fields. Post-reshape, the only
70
- * top-level flat string field of the legacy agentSettings bag is gone; the
71
- * export is kept (empty) so old imports don't fail.
72
- */
44
+ /** Kept empty so existing imports still resolve. */
73
45
  export const AGENT_SETTINGS_STRING_FIELDS = Object.freeze([]);
74
46
 
75
- // ---------------------------------------------------------------------------
76
- // project.* — identity, conventions, commands
77
- // ---------------------------------------------------------------------------
47
+ // project.*
78
48
 
79
- /**
80
- * `project.paths` carries the three required filesystem roots. The seven
81
- * legacy `*Root` subdirectory keys and the legacy `auditOutputDir` were
82
- * dropped — every `${dir}Root` is derived at runtime as `${agentRoot}/<dir>`
83
- * and `auditOutputDir` is derived as `${tempRoot}/audits`.
84
- */
85
49
  const PATHS_SCHEMA = {
86
50
  type: 'object',
87
51
  description:
@@ -113,12 +77,6 @@ const PATHS_SCHEMA = {
113
77
  additionalProperties: false,
114
78
  };
115
79
 
116
- /**
117
- * `project.commands` — names of the test/typecheck/lint/format commands the
118
- * close-validation chain spawns. `typecheck` accepts `null` to mean
119
- * "disabled"; `lint` accepts `null` to mean "use the framework default",
120
- * because that gate is mandatory and cannot be switched off. `validate` and `build` were dropped (no production consumers).
121
- */
122
80
  const COMMANDS_SCHEMA = {
123
81
  type: 'object',
124
82
  description:
@@ -190,35 +148,11 @@ const PROJECT_SCHEMA = {
190
148
  additionalProperties: false,
191
149
  };
192
150
 
193
- // ---------------------------------------------------------------------------
194
- // github.* — provider identity, bootstrap, notifications
195
- // ---------------------------------------------------------------------------
151
+ // github.*
196
152
 
197
153
  /**
198
- * Curated webhook event vocabulary. The webhook channel is gated by an
199
- * explicit allowlist of event names — the vocabulary mirrors the events the
200
- * v2 runtime actually emits through `notify()` (Story transitions and merge
201
- * outcomes).
202
- *
203
- * `loop.tick` was retired here on the same rule (Story #5024). Its only
204
- * producer was `emit-loop-tick.js`, which published to the lifecycle bus and
205
- * never called `notify()` at all — and the bus had no production caller, so
206
- * the event could not reach a webhook by any path. The notify CLI cannot
207
- * substitute: it hardcodes `event: 'operator-message'` and exposes no
208
- * `--event` flag, so a consumer could not dispatch it either. It shipped in
209
- * `NOTIFICATIONS_DEFAULTS`, which meant every consumer was subscribed by
210
- * default to something that could never fire.
211
- *
212
- * `story.heartbeat` was retired here first (A22): the vocabulary's contract is
213
- * "events the runtime actually emits", and nothing could emit this one. Its
214
- * emitter (`emit-story-heartbeat.js`) demanded an `epicId >= 1` while the
215
- * sole call path (`single-story-init.js` → `setActiveStoryEnv`) passed
216
- * `epicId: null`, so `CC_EPIC_ID` was never set and the hook that would have
217
- * fired the beat always short-circuited. Emitter, hook, and schema are all
218
- * deleted; keeping the name allowlistable would let an operator subscribe to
219
- * a channel that can never deliver. Removing it from the enum makes a
220
- * resurrection fail loudly at config-validation time rather than silently
221
- * never firing.
154
+ * Webhook allowlist vocabulary: only events the runtime can actually emit, so
155
+ * an operator can never subscribe to a channel that cannot deliver.
222
156
  */
223
157
  export const WEBHOOK_EVENT_NAMES = Object.freeze([
224
158
  'state-transition',
@@ -230,32 +164,11 @@ export const WEBHOOK_EVENT_NAMES = Object.freeze([
230
164
  ]);
231
165
 
232
166
  /**
233
- * Curated GitHub-comment event vocabulary. The comment channel is gated by
234
- * an explicit allowlist of event names — same model as `webhookEvents`.
235
- *
236
- * **Deliberately narrower than {@link WEBHOOK_EVENT_NAMES}**, and the axis
237
- * is ticket scope, not importance. A comment is written *onto a Story
238
- * issue*, so only events that are about one Story, and whose message reads
239
- * as narrative an operator wants durably on the ticket, belong here. The
240
- * webhook-only remainder — `merge.unlanded` and `merge.flip-failed` — are
241
- * run-scoped beats; mirroring them onto the ticket would bury the narrative
242
- * under machine chatter, and `notify()` drops a comment for any dispatch
243
- * without a resolvable ticket id regardless.
244
- *
245
- * Note both webhook-only names are allowlistable but have no `notify()`
246
- * dispatcher today — they reach the run ledger via `appendLedgerEvent`, not
247
- * the notify path. That is a wiring gap, deliberately left alone by Story
248
- * #5024 (which only removed `loop.tick`, whose producer went with the bus):
249
- * unlike `loop.tick` these two have a live producer, so whether to wire the
250
- * dispatch or drop the allowlist entries is an open decision, not dead code.
251
- *
252
- * `story-closing` IS in scope by that rule (Story-scoped, `level: 'story'`,
253
- * human-readable — the same shape as `story-merged`) and its earlier
254
- * absence was an oversight: the event was emittable to webhooks but could
255
- * not be allowlisted for comments at all. It is in the vocabulary but NOT
256
- * in the shipped default (`config/github.js` `NOTIFICATIONS_DEFAULTS`) —
257
- * opting in is an operator choice, not a behaviour change forced on every
258
- * consumer.
167
+ * Comment allowlist vocabulary, deliberately narrower than
168
+ * {@link WEBHOOK_EVENT_NAMES}: only Story-scoped narrative events belong on a
169
+ * ticket. The run-scoped `merge.*` beats stay webhook-only (they reach the
170
+ * run ledger, not `notify()`; wiring them is an open decision, not dead code).
171
+ * `story-closing` is allowlistable but not in the shipped default.
259
172
  */
260
173
  export const COMMENT_EVENT_NAMES = Object.freeze([
261
174
  'state-transition',
@@ -372,12 +285,8 @@ const MERGE_METHODS_SCHEMA = {
372
285
  };
373
286
 
374
287
  /**
375
- * Where follow-up work is filed when the repository that surfaced it does not
376
- * own it. Ownership splits three ways — consumer / framework / platform — and
377
- * `github.owner`/`github.repo` already carry the consumer bucket, so only the
378
- * other two are configured here. Routing itself lives in
379
- * `lib/github/framework-repo.js`; an unset bucket is reported as unroutable
380
- * rather than silently re-pointed at the consumer's own tracker.
288
+ * The non-consumer follow-up buckets (`github.owner/repo` is the consumer
289
+ * one). An unset bucket is reported unroutable, never re-pointed locally.
381
290
  */
382
291
  const FOLLOW_UP_REPOS_SCHEMA = {
383
292
  type: 'object',
@@ -441,13 +350,6 @@ const GITHUB_SCHEMA = {
441
350
  'The human the framework escalates to, `@`-prefixed. Used for HITL @-mentions on `agent::blocked`.',
442
351
  default: '@[USERNAME]',
443
352
  },
444
- defaultTimeoutMs: {
445
- type: 'integer',
446
- minimum: 1000,
447
- description:
448
- 'Default `timeoutMs` applied to every `gh` subprocess the provider facade spawns, so a stalled socket or long-poll cannot hang an orchestration indefinitely. A `GhExecTimeoutError` from a hit ceiling is classified `transient` and retried by `withTransientRetry`. Story #2860.',
449
- default: 60000,
450
- },
451
353
  followUpRepos: FOLLOW_UP_REPOS_SCHEMA,
452
354
  branchProtection: BRANCH_PROTECTION_SCHEMA,
453
355
  mergeMethods: MERGE_METHODS_SCHEMA,
@@ -456,63 +358,13 @@ const GITHUB_SCHEMA = {
456
358
  additionalProperties: false,
457
359
  };
458
360
 
459
- // ---------------------------------------------------------------------------
460
- // planning.* — inputs to /mandrel-plan
461
- // ---------------------------------------------------------------------------
462
-
463
- // Story #4541: `planning.context.{maxBytes, summaryMode}` was retired. The
464
- // `applyBudget` pass it fed lost its last caller in the v2 cutover, and it
465
- // bounded a field the envelope builders discarded before shipping the raw seed
466
- // anyway — so the key resolved but capped nothing. The live bound on
467
- // planner-context size is the fixed `PLAN_CONTEXT_ENVELOPE_BYTE_CEILING` in
468
- // `lib/orchestration/plan-context.js`. Setting `planning.context` is now
469
- // rejected as an additional property, so a resurrected key fails loudly rather
470
- // than silently doing nothing.
471
-
472
- // Story #4811: the `planning` block's structural-snapshot key was retired
473
- // along with the snapshot itself. The pre-computed view it configured grounded
474
- // nothing — its default include globs missed the standard monorepo layout, and
475
- // its knobs only re-filtered the same matched set. Spec authoring is grounded
476
- // by the author's own targeted repo retrieval plus the Phase 8
477
- // `validateStoryFileAssumptions` gate, neither of which is configurable here.
478
- // `planning` carries `additionalProperties: false`, so a resurrected key fails
479
- // loudly; the 2.20.0 retirement migration strips it on upgrade.
480
-
481
- // Story #5312 — the planning diet. `riskHeuristics`, `complexityGate`,
482
- // `memoryPool.{staleAfterDays, growthDelta}`, `failOnSharedEditors`,
483
- // `requireExplicitCrossStoryDeps`, `failOnRegistryConflicts`,
484
- // `failOnLargeFanOut`, `largeFanOutThreshold` and `crossCuttingRegistries`
485
- // were retired together: every one either never fired on real work, duplicated
486
- // a judgment the authoring model already makes, or guarded a consumer that no
487
- // longer exists. The block stays `additionalProperties: false`, so a config
488
- // still carrying one fails loudly; the 2.57.0 retirement migration strips them
489
- // on upgrade.
361
+ // planning.* — `additionalProperties: false`, so a retired key fails loudly.
490
362
 
491
363
  const PLANNING_SCHEMA = {
492
364
  type: 'object',
493
365
  description:
494
- 'Inputs to `/mandrel-plan`: the memory-hygiene advisory ceiling and the opt-in navigability reachability gate.',
366
+ 'Inputs to `/mandrel-plan`: the opt-in navigability reachability gate.',
495
367
  properties: {
496
- // The `/mandrel-plan` Phase 0 memory-hygiene advisory's one surviving
497
- // arm (Story #5285; the age and growth arms went with Story #5312).
498
- memoryPool: {
499
- type: 'object',
500
- description:
501
- 'Threshold for the memory-hygiene advisory `/mandrel-plan` surfaces at Gate #1. Advisory only: it recommends `/memory-consolidate` and never gates, reroutes, or mutates the memory pool.',
502
- properties: {
503
- indexByteCeiling: {
504
- type: 'integer',
505
- minimum: 1,
506
- description:
507
- "Recommend a consolidation pass once the pool's `MEMORY.md` index exceeds this many bytes. The harness truncates the index it loads into each session at its own byte cap, so an oversized index is a loss already happening — every entry listed after the cut is invisible — rather than a hygiene forecast. Default 24576, the harness cap itself.",
508
- default: 24576,
509
- },
510
- },
511
- additionalProperties: false,
512
- },
513
- // Navigability-reachability config consumed by the plan-persist draft
514
- // reachability gate (Epic #4131 F7; demoted into persist by #4474 PR6).
515
- // Opt-in: absent or empty routeGlobs degrades to a silent no-op.
516
368
  navigation: {
517
369
  type: 'object',
518
370
  description:
@@ -539,49 +391,10 @@ const PLANNING_SCHEMA = {
539
391
  additionalProperties: false,
540
392
  };
541
393
 
542
- // ---------------------------------------------------------------------------
543
- // delivery.* — /mandrel-deliver + story-deliver consume. The full block of
544
- // per-key sub-schemas lives in `config-settings-schema-delivery.js` (refs
545
- // #3457); DELIVERY_SCHEMA is imported above and referenced unchanged below.
546
- // ---------------------------------------------------------------------------
547
- // Top-level: { project, github, planning, delivery }
548
- // ---------------------------------------------------------------------------
394
+ // qa.* — agent-driven QA harness contract.
549
395
 
550
- /**
551
- * The top-level `.agentrc.json` shape, post-reshape (Epic #1720 Story #1739).
552
- *
553
- * The four blocks mirror SDLC phases:
554
- * - `project` — identity, paths, commands, docs context.
555
- * - `github` — provider identity, branch protection, merge methods,
556
- * notifications.
557
- * - `planning` — the memory-hygiene advisory ceiling, navigability gate.
558
- * - `delivery` — execution timeouts, worktree isolation, deliver-runner
559
- * concurrency, docs-freshness, signals, quality.
560
- *
561
- * Hard cutover (Epic #2646, Story #2687; finalized by Epic #2880, Story
562
- * #2935): the legacy `agentSettings.*` / `orchestration.*` input shape is
563
- * rejected entirely by this schema (top-level `additionalProperties: false`
564
- * fails any document carrying those keys), the corresponding resolver-side
565
- * compat branches were swept across the seven `lib/config/*.js` accessors,
566
- * and the output-side shim on `resolveConfig` was deleted — every consumer
567
- * now reads the canonical `project` / `github` / `planning` / `delivery`
568
- * blocks directly.
569
- */
570
- // ---------------------------------------------------------------------------
571
- // qa.* — Agent-driven QA harness contract (Epic #3214)
572
- // ---------------------------------------------------------------------------
573
-
574
- // The per-environment sign-in seam. `{ urlTemplate }` is a dev
575
- // impersonation route; `{ skill }` names a skill by its tier-relative id
576
- // (e.g. `stack/qa/acme-sso`), resolved against the payload skills root and
577
- // then the consumer-writable `.agents/local/skills/` zone (Story #5135).
578
- //
579
- // No default anywhere in this file may name a skill id: the framework ships
580
- // no sign-in skill, so any id baked into an inventory value would be a
581
- // dangling pointer a consumer copies verbatim — the exact defect #5134
582
- // reported. The `{ skill }` arm is taught in prose (`.agents/README.md`
583
- // § "Expose a `signInSeam`"), and `resolveQaEnvironment` fails loudly on an
584
- // id that resolves under neither root.
396
+ // No default in this file may name a skill id: the framework ships no sign-in
397
+ // skill, so any baked-in id is a dangling pointer consumers copy verbatim.
585
398
  const QA_SIGN_IN_SEAM_SCHEMA = {
586
399
  oneOf: [
587
400
  {
@@ -595,10 +408,8 @@ const QA_SIGN_IN_SEAM_SCHEMA = {
595
408
  {
596
409
  type: 'object',
597
410
  properties: {
598
- // The id is joined onto a skills root to reach a `SKILL.md`, so the
599
- // shape is validated here rather than at the path join (Story #5285).
600
- // `SKILL_ID_RE` is imported, never restated: one regex, two
601
- // enforcement points — this schema and `resolveSkillFile`.
411
+ // The id is joined onto a skills root, so its shape is validated here;
412
+ // `SKILL_ID_RE` is shared with `resolveSkillFile`, never restated.
602
413
  skill: {
603
414
  ...SAFE_STRING,
604
415
  minLength: 1,
@@ -613,21 +424,11 @@ const QA_SIGN_IN_SEAM_SCHEMA = {
613
424
  ],
614
425
  };
615
426
 
616
- // `personas` accepts two shapes (Story #3306). The plain `string[]` of
617
- // persona names is the honest shape for a `urlTemplate` dev-impersonation
618
- // seam, where the workflow substitutes only the persona name into the URL
619
- // and never reads per-persona auth material. The object-map form (keyed by
620
- // persona name, each entry carrying `credentialRef` or `signInSkill`) is
621
- // for `skill`/credential seams where per-persona material is genuinely
622
- // consulted. The resolver normalizes both to one canonical internal form.
427
+ // The resolver normalizes both shapes to one canonical internal form.
623
428
  const QA_PERSONAS_SCHEMA = {
624
429
  description:
625
430
  'Personas the QA-harness sign-in seam accepts. Two accepted shapes: (1) a plain array of persona names — the honest shape for a `urlTemplate` dev-impersonation seam, where the persona name is the sole input the workflow consumes; (2) the object-map form keyed by persona name, where each entry carries per-persona auth material (`credentialRef` or `signInSkill`) consulted only under a skill-based or credential-based seam.',
626
- // Inventory value: an illustrative map showing both per-persona shapes.
627
- // Inventory value: illustrative credential references, not resolvable
628
- // ones. It deliberately does NOT illustrate the `signInSkill` arm — a
629
- // skill id in a shipped default is a dangling pointer (see
630
- // QA_SIGN_IN_SEAM_SCHEMA above); that arm is taught in prose instead.
431
+ // Illustrative only; omits the `signInSkill` arm (no skill ids in defaults).
631
432
  default: {
632
433
  admin: { credentialRef: 'QA_ADMIN_CREDENTIAL' },
633
434
  member: { credentialRef: 'QA_MEMBER_CREDENTIAL' },
@@ -665,23 +466,11 @@ const QA_PERSONAS_SCHEMA = {
665
466
  ],
666
467
  };
667
468
 
668
- // `environments` is the environment-keyed contract (Epic #4326, Story #4327).
669
- // It replaces the retired top-level single `signInSeam` shape: each named
670
- // environment carries its own `baseUrl`, its own per-environment `signInSeam`
671
- // (reusing the same url-template/skill union), and an optional `allowWrites`
672
- // gate. Downstream, `resolveQaEnvironment` selects one environment per
673
- // invocation by name or by raw-URL origin match against `baseUrl`. The map
674
- // must carry at least one environment. This is a hard cutover — there is no
675
- // top-level `signInSeam` acceptance branch (see
676
- // `.agents/rules/git-conventions.md` § Contract Cutovers).
677
469
  const QA_ENVIRONMENTS_SCHEMA = {
678
470
  type: 'object',
679
471
  description:
680
472
  'Deployment targets the QA harness can run against (Epic #4326). A map keyed by environment name (e.g. `local`, `staging`), each carrying its own `baseUrl`, an optional per-environment sign-in seam, and an optional `allowWrites` gate. `signInSeam` is the union `{ urlTemplate }` (a dev impersonation route) or `{ skill }` (a skill id such as `stack/qa/acme-sso`, resolved against `.agents/skills/` then the consumer-writable `.agents/local/skills/` zone, and rejected loudly by resolveQaEnvironment when it resolves under neither); omit it entirely for a target with no sign-in seam. resolveQaEnvironment selects one environment per invocation by name or by raw-URL origin match against `baseUrl`; `allowWrites` defaults to true only for the `local` environment. Replaces the retired top-level single `signInSeam`.',
681
- // Inventory value: an illustrative two-environment map, not a resolvable
682
- // default. `staging` deliberately carries NO `signInSeam` — that is the
683
- // honest shape for a deployed target with no dev sign-in seam, and it
684
- // shows the field is optional (Story #5135).
473
+ // Illustrative; `staging` omits `signInSeam` to show it is optional.
685
474
  default: {
686
475
  local: {
687
476
  baseUrl: 'http://localhost:3000',
@@ -700,29 +489,19 @@ const QA_ENVIRONMENTS_SCHEMA = {
700
489
  signInSeam: QA_SIGN_IN_SEAM_SCHEMA,
701
490
  allowWrites: { type: 'boolean' },
702
491
  },
703
- // `signInSeam` is OPTIONAL (Story #5135). An environment that resolves no
704
- // seam is a state the QA workflows already branch on — they drive the
705
- // unauthenticated surface and record the gap — so requiring it made an
706
- // honestly seamless remote target undeclarable.
492
+ // No seam is a state QA workflows handle (unauthenticated drive).
707
493
  required: ['baseUrl'],
708
494
  additionalProperties: false,
709
495
  },
710
496
  };
711
497
 
712
- // `gherkinLint` is the static corpus gate's contract (Story #5013). It is
713
- // deliberately its own sub-block rather than more top-level `qa` keys: the
714
- // gate is opt-in as a whole, so presence of the block IS the opt-in signal,
715
- // and `check-gherkin-corpus.js` needs exactly one thing to test for. `scopes`
716
- // is a map rather than an array because a scope's name appears verbatim in
717
- // every finding, and a map makes naming it mandatory. Defaults for the two
718
- // escape hatches live in `lib/config/qa.js` (GHERKIN_LINT_DEFAULTS).
498
+ // Presence of the block is the opt-in signal. `scopes` is a map so every
499
+ // scope is named (the name appears in each finding).
719
500
  const QA_GHERKIN_LINT_SCHEMA = {
720
501
  type: 'object',
721
502
  description:
722
503
  'Static Gherkin corpus gate (Story #5013). Optional; the gate runs only when this block is present, so an upgrade never reddens the lint of a consumer that never asked the framework to police its `.feature` files. Inside the opt-in it fails closed: an unresolvable `@cucumber/gherkin` parser, or a scope resolving zero step definitions, exits 1 rather than reporting a clean run.',
723
- // Inventory value: an illustrative single-scope map, not a resolvable
724
- // default. Every path here is project-specific; the entry exists so
725
- // `mandrel explain` can show the expected shape.
504
+ // Illustrative shape for `mandrel explain`, not a resolvable default.
726
505
  default: {
727
506
  scopes: {
728
507
  web: {
@@ -841,13 +620,7 @@ export const AGENTRC_SCHEMA = {
841
620
  let _agentrcValidator = null;
842
621
 
843
622
  /**
844
- * Compile `AGENTRC_SCHEMA` with a live AJV instance.
845
- *
846
- * `ajv` is pulled in through `createRequire` rather than a top-level
847
- * `import` so the module never enters the graph on the fast path
848
- * (Story #5109). Loading AJV was itself a measurable share of the ~35 ms
849
- * this function used to cost in each of the 36 config-touching entry
850
- * scripts, and the precompiled validator needs none of it.
623
+ * `ajv` loads via `createRequire` so it stays off the fast path entirely.
851
624
  *
852
625
  * @returns {import('ajv').ValidateFunction}
853
626
  */
@@ -860,20 +633,10 @@ function compileAgentrcValidatorDynamically() {
860
633
  }
861
634
 
862
635
  /**
863
- * The `.agentrc.json` validator.
864
- *
865
- * Returns the **precompiled** validator committed at
866
- * `lib/generated/agentrc-validator.js` — AJV's standalone emit for the exact
867
- * `AGENTRC_SCHEMA` literal above, kept in step by
868
- * `check-generated-validator.js --check` inside `npm run lint`. The verdicts
869
- * are AJV's own, produced by AJV's own generated code with the same
870
- * `allErrors: true` option the dynamic path uses, so nothing about what a
871
- * config is allowed to contain changes — only when the codegen runs.
872
- *
873
- * Set `MANDREL_AGENTRC_VALIDATOR=dynamic` to compile at runtime instead. That
874
- * escape hatch exists so a consumer who has hand-edited the schema (or hit a
875
- * platform where the generated module will not load) is never stuck with a
876
- * validator they cannot regenerate; it costs the ~35 ms the artifact removes.
636
+ * Returns the precompiled AJV standalone validator (kept in step with
637
+ * `AGENTRC_SCHEMA` by `check-generated-validator.js`).
638
+ * `MANDREL_AGENTRC_VALIDATOR=dynamic` compiles at runtime instead, for a
639
+ * hand-edited schema or a platform where the generated module won't load.
877
640
  *
878
641
  * @returns {import('ajv').ValidateFunction}
879
642
  */