mandrel 2.59.0 → 2.61.0

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