mandrel 2.60.0 → 2.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (661) hide show
  1. package/.agents/README.md +10 -10
  2. package/.agents/agents/story-worker.md +1 -1
  3. package/.agents/docs/agentrc-reference.json +4 -82
  4. package/.agents/docs/configuration.md +20 -87
  5. package/.agents/docs/workflows.md +1 -1
  6. package/.agents/instructions.md +1 -3
  7. package/.agents/rules/gherkin-standards.md +4 -0
  8. package/.agents/schemas/agentrc.schema.json +11 -486
  9. package/.agents/schemas/story-deliver-terminal.schema.json +10 -0
  10. package/.agents/schemas/validation-evidence.schema.json +2 -1
  11. package/.agents/scripts/README.md +14 -14
  12. package/.agents/scripts/acceptance-eval.js +32 -164
  13. package/.agents/scripts/agents-bootstrap-github.js +27 -129
  14. package/.agents/scripts/apply-quality-bootstrap.js +4 -40
  15. package/.agents/scripts/audit-baselines.js +6 -27
  16. package/.agents/scripts/audit-labels-bootstrap.js +5 -29
  17. package/.agents/scripts/audit-to-stories.js +91 -361
  18. package/.agents/scripts/boot-sweep.js +19 -72
  19. package/.agents/scripts/bootstrap.js +74 -395
  20. package/.agents/scripts/ceremony-derive.js +9 -45
  21. package/.agents/scripts/check-arch-cycles.js +14 -64
  22. package/.agents/scripts/check-baselines.js +8 -48
  23. package/.agents/scripts/check-context-budget.js +46 -172
  24. package/.agents/scripts/check-cyclomatic.js +12 -44
  25. package/.agents/scripts/check-dead-exports.js +13 -64
  26. package/.agents/scripts/check-doc-links.js +38 -186
  27. package/.agents/scripts/check-gherkin-corpus.js +24 -127
  28. package/.agents/scripts/check-test-temp-hygiene.js +28 -169
  29. package/.agents/scripts/coverage-capture.js +32 -99
  30. package/.agents/scripts/deliver-light.js +14 -101
  31. package/.agents/scripts/deliver-recover.js +6 -42
  32. package/.agents/scripts/deliver-run.js +36 -133
  33. package/.agents/scripts/diagnose-friction.js +24 -116
  34. package/.agents/scripts/drain-pending-cleanup.js +1 -1
  35. package/.agents/scripts/evidence-gate.js +23 -85
  36. package/.agents/scripts/file-ci-gap.js +10 -50
  37. package/.agents/scripts/generate-config-docs.js +30 -170
  38. package/.agents/scripts/generate-lens-checklists.js +8 -52
  39. package/.agents/scripts/generate-skills-index.js +14 -112
  40. package/.agents/scripts/generate-workflows-doc.js +10 -70
  41. package/.agents/scripts/git-cleanup.js +2 -34
  42. package/.agents/scripts/lib/Graph.js +24 -81
  43. package/.agents/scripts/lib/ITicketingProvider.js +47 -143
  44. package/.agents/scripts/lib/Logger.js +14 -76
  45. package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
  46. package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
  47. package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
  48. package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
  49. package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
  50. package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
  51. package/.agents/scripts/lib/audit-baselines/read.js +3 -16
  52. package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
  53. package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
  54. package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
  55. package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
  56. package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
  57. package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
  58. package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
  59. package/.agents/scripts/lib/audit-suite/findings.js +12 -52
  60. package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
  61. package/.agents/scripts/lib/audit-suite/index.js +1 -15
  62. package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
  63. package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
  64. package/.agents/scripts/lib/audit-suite/runner.js +13 -43
  65. package/.agents/scripts/lib/audit-suite/selector.js +49 -349
  66. package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
  67. package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
  68. package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
  69. package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
  70. package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
  71. package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
  72. package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
  73. package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
  74. package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
  75. package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
  76. package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
  77. package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
  78. package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
  79. package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
  80. package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
  81. package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
  82. package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
  83. package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
  84. package/.agents/scripts/lib/baseline-loader.js +12 -51
  85. package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
  86. package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
  87. package/.agents/scripts/lib/baselines/components.js +10 -61
  88. package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
  89. package/.agents/scripts/lib/baselines/crap-preview-incremental.js +5 -21
  90. package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
  91. package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
  92. package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
  93. package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
  94. package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
  95. package/.agents/scripts/lib/baselines/envelope.js +13 -129
  96. package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
  97. package/.agents/scripts/lib/baselines/git-base.js +23 -142
  98. package/.agents/scripts/lib/baselines/kernel.js +11 -111
  99. package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
  100. package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
  101. package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
  102. package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
  103. package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
  104. package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
  105. package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
  106. package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
  107. package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
  108. package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
  109. package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
  110. package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
  111. package/.agents/scripts/lib/baselines/path-canon.js +19 -128
  112. package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
  113. package/.agents/scripts/lib/baselines/reader.js +14 -107
  114. package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
  115. package/.agents/scripts/lib/baselines/scope.js +11 -135
  116. package/.agents/scripts/lib/baselines/writer.js +16 -149
  117. package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
  118. package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
  119. package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
  120. package/.agents/scripts/lib/bdd-step-index.js +26 -100
  121. package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
  122. package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
  123. package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
  124. package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
  125. package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
  126. package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
  127. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
  128. package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
  129. package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
  130. package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
  131. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
  132. package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
  133. package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
  134. package/.agents/scripts/lib/bootstrap/summary.js +1 -8
  135. package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
  136. package/.agents/scripts/lib/branch-name-guard.js +4 -23
  137. package/.agents/scripts/lib/changed-files.js +31 -143
  138. package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
  139. package/.agents/scripts/lib/checks/index.js +18 -101
  140. package/.agents/scripts/lib/checks/loop-health.js +11 -53
  141. package/.agents/scripts/lib/checks/state.js +16 -91
  142. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
  143. package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
  144. package/.agents/scripts/lib/child-exec.js +39 -108
  145. package/.agents/scripts/lib/cli/standard-args.js +9 -116
  146. package/.agents/scripts/lib/cli-args.js +31 -146
  147. package/.agents/scripts/lib/cli-usage.js +5 -27
  148. package/.agents/scripts/lib/cli-utils.js +2 -12
  149. package/.agents/scripts/lib/close-validation/commands.js +13 -76
  150. package/.agents/scripts/lib/close-validation/gates.js +92 -331
  151. package/.agents/scripts/lib/close-validation/process.js +121 -151
  152. package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
  153. package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
  154. package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
  155. package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
  156. package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
  157. package/.agents/scripts/lib/close-validation/runner.js +53 -110
  158. package/.agents/scripts/lib/command-header.js +6 -28
  159. package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
  160. package/.agents/scripts/lib/config/baselines.js +3 -14
  161. package/.agents/scripts/lib/config/ci.js +8 -38
  162. package/.agents/scripts/lib/config/commands.js +1 -15
  163. package/.agents/scripts/lib/config/defaults.js +4 -33
  164. package/.agents/scripts/lib/config/delivery-routing.js +6 -35
  165. package/.agents/scripts/lib/config/explain.js +9 -80
  166. package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
  167. package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +2 -30
  168. package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
  169. package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
  170. package/.agents/scripts/lib/config/gates/index.js +2 -17
  171. package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
  172. package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
  173. package/.agents/scripts/lib/config/gates/shared.js +4 -64
  174. package/.agents/scripts/lib/config/github.js +4 -22
  175. package/.agents/scripts/lib/config/limits.js +4 -57
  176. package/.agents/scripts/lib/config/paths.js +2 -21
  177. package/.agents/scripts/lib/config/qa.js +4 -38
  178. package/.agents/scripts/lib/config/quality.js +76 -432
  179. package/.agents/scripts/lib/config/runners.js +12 -56
  180. package/.agents/scripts/lib/config/runtime.js +13 -57
  181. package/.agents/scripts/lib/config/shared.js +2 -16
  182. package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
  183. package/.agents/scripts/lib/config/temp-paths.js +40 -280
  184. package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
  185. package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
  186. package/.agents/scripts/lib/config-resolver.js +10 -52
  187. package/.agents/scripts/lib/config-schema-shared.js +1 -4
  188. package/.agents/scripts/lib/config-settings-schema-delivery.js +12 -294
  189. package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
  190. package/.agents/scripts/lib/config-settings-schema.js +37 -274
  191. package/.agents/scripts/lib/coverage-baseline.js +20 -110
  192. package/.agents/scripts/lib/coverage-capture-fullscope.js +12 -37
  193. package/.agents/scripts/lib/coverage-capture-incremental.js +12 -43
  194. package/.agents/scripts/lib/coverage-capture-usage.js +4 -24
  195. package/.agents/scripts/lib/coverage-capture.js +99 -224
  196. package/.agents/scripts/lib/coverage-utils.js +14 -79
  197. package/.agents/scripts/lib/cpu-pool.js +17 -123
  198. package/.agents/scripts/lib/crap-baseline-join.js +16 -88
  199. package/.agents/scripts/lib/crap-coordinates.js +6 -25
  200. package/.agents/scripts/lib/crap-engine.js +40 -153
  201. package/.agents/scripts/lib/crap-method-identity.js +16 -78
  202. package/.agents/scripts/lib/crap-utils.js +31 -155
  203. package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
  204. package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
  205. package/.agents/scripts/lib/dead-exports-knip.js +18 -56
  206. package/.agents/scripts/lib/dead-exports-mode.js +5 -24
  207. package/.agents/scripts/lib/degraded-mode.js +3 -26
  208. package/.agents/scripts/lib/dependency-parser.js +8 -40
  209. package/.agents/scripts/lib/dependency-version.js +13 -35
  210. package/.agents/scripts/lib/detect-package-manager.js +6 -36
  211. package/.agents/scripts/lib/doc-tiers.js +22 -126
  212. package/.agents/scripts/lib/duplicate-search.js +8 -72
  213. package/.agents/scripts/lib/env-loader.js +5 -27
  214. package/.agents/scripts/lib/error-redactor.js +6 -31
  215. package/.agents/scripts/lib/errors/index.js +2 -22
  216. package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
  217. package/.agents/scripts/lib/escomplex-kernel.js +21 -123
  218. package/.agents/scripts/lib/feedback-loop/graduator-core.js +93 -419
  219. package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
  220. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -151
  221. package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
  222. package/.agents/scripts/lib/findings/classify-finding.js +14 -69
  223. package/.agents/scripts/lib/findings/promote-finding.js +14 -112
  224. package/.agents/scripts/lib/findings/provenance-field.js +11 -52
  225. package/.agents/scripts/lib/findings/route-finding.js +37 -255
  226. package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
  227. package/.agents/scripts/lib/findings/severity.js +18 -104
  228. package/.agents/scripts/lib/format-generated-json.js +12 -44
  229. package/.agents/scripts/lib/full-suite-lock.js +160 -429
  230. package/.agents/scripts/lib/full-suite-queue.js +213 -0
  231. package/.agents/scripts/lib/gates/baseline-store.js +5 -9
  232. package/.agents/scripts/lib/gates/friction.js +1 -3
  233. package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
  234. package/.agents/scripts/lib/gh-exec.js +31 -259
  235. package/.agents/scripts/lib/git/cached-fetch.js +9 -52
  236. package/.agents/scripts/lib/git/sync-from-base.js +15 -107
  237. package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
  238. package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
  239. package/.agents/scripts/lib/git-utils.js +37 -161
  240. package/.agents/scripts/lib/github/framework-repo.js +8 -71
  241. package/.agents/scripts/lib/github-url.js +2 -17
  242. package/.agents/scripts/lib/import-graph.js +11 -38
  243. package/.agents/scripts/lib/install-cmd-parser.js +4 -13
  244. package/.agents/scripts/lib/json-utils.js +3 -18
  245. package/.agents/scripts/lib/label-constants.js +16 -111
  246. package/.agents/scripts/lib/label-taxonomy.js +4 -30
  247. package/.agents/scripts/lib/maintainability-engine.js +12 -80
  248. package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
  249. package/.agents/scripts/lib/maintainability-utils.js +16 -92
  250. package/.agents/scripts/lib/mandrel-catalog.js +12 -70
  251. package/.agents/scripts/lib/notifications/notifier.js +13 -38
  252. package/.agents/scripts/lib/npm-scripts.js +4 -23
  253. package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
  254. package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
  255. package/.agents/scripts/lib/observability/signal-validator.js +5 -37
  256. package/.agents/scripts/lib/observability/signals-writer.js +11 -121
  257. package/.agents/scripts/lib/observability/source-classifier.js +21 -203
  258. package/.agents/scripts/lib/observability/terse-result.js +14 -47
  259. package/.agents/scripts/lib/onboard/init-tail.js +13 -74
  260. package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
  261. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
  262. package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
  263. package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
  264. package/.agents/scripts/lib/orchestration/ceremony-routing.js +5 -75
  265. package/.agents/scripts/lib/orchestration/change-set.js +7 -36
  266. package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
  267. package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
  268. package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
  269. package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
  270. package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
  271. package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
  272. package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
  273. package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
  274. package/.agents/scripts/lib/orchestration/check-state.js +92 -0
  275. package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
  276. package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +42 -189
  277. package/.agents/scripts/lib/orchestration/code-review.js +24 -128
  278. package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
  279. package/.agents/scripts/lib/orchestration/complexity-gate.js +42 -214
  280. package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
  281. package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
  282. package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
  283. package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
  284. package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
  285. package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
  286. package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
  287. package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
  288. package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
  289. package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
  290. package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
  291. package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
  292. package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
  293. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
  294. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
  295. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
  296. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
  297. package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
  298. package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
  299. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
  300. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
  301. package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
  302. package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
  303. package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
  304. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
  305. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
  306. package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
  307. package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
  308. package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
  309. package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
  310. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
  311. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
  312. package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
  313. package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
  314. package/.agents/scripts/lib/orchestration/light-suitability.js +26 -231
  315. package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
  316. package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
  317. package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
  318. package/.agents/scripts/lib/orchestration/plan-context.js +52 -303
  319. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
  320. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
  321. package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
  322. package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
  323. package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
  324. package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
  325. package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +14 -78
  326. package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
  327. package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
  328. package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
  329. package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
  330. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
  331. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
  332. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +49 -248
  333. package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
  334. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +85 -368
  335. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +8 -38
  336. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +30 -190
  337. package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
  338. package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
  339. package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
  340. package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
  341. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
  342. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
  343. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
  344. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
  345. package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
  346. package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
  347. package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
  348. package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
  349. package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
  350. package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
  351. package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
  352. package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
  353. package/.agents/scripts/lib/orchestration/review-depth.js +12 -94
  354. package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
  355. package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
  356. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
  357. package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
  358. package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
  359. package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
  360. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
  361. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
  362. package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
  363. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
  364. package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
  365. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
  366. package/.agents/scripts/lib/orchestration/run-epilogue.js +40 -199
  367. package/.agents/scripts/lib/orchestration/run-scoped-config.js +13 -81
  368. package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
  369. package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
  370. package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
  371. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
  372. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +18 -80
  373. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
  374. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
  375. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
  376. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
  377. package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +9 -50
  378. package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
  379. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
  380. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
  381. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
  382. package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
  383. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
  384. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
  385. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
  386. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
  387. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
  388. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
  389. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
  390. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +110 -290
  391. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
  392. package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
  393. package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
  394. package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
  395. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
  396. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
  397. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
  398. package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
  399. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -201
  400. package/.agents/scripts/lib/orchestration/story-follow-ups.js +43 -245
  401. package/.agents/scripts/lib/orchestration/story-init-envelope.js +4 -23
  402. package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
  403. package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
  404. package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -126
  405. package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
  406. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
  407. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
  408. package/.agents/scripts/lib/orchestration/ticket-validator.js +39 -181
  409. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
  410. package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -250
  411. package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
  412. package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
  413. package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
  414. package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
  415. package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
  416. package/.agents/scripts/lib/path-security.js +3 -6
  417. package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
  418. package/.agents/scripts/lib/preflight-runner.js +13 -69
  419. package/.agents/scripts/lib/process-group.js +143 -0
  420. package/.agents/scripts/lib/project-root.js +2 -8
  421. package/.agents/scripts/lib/provider-factory.js +2 -25
  422. package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
  423. package/.agents/scripts/lib/qa/qa-session.js +15 -69
  424. package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
  425. package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
  426. package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
  427. package/.agents/scripts/lib/reserved-test-ids.js +9 -47
  428. package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
  429. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
  430. package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
  431. package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
  432. package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
  433. package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
  434. package/.agents/scripts/lib/signals/detectors/common.js +12 -38
  435. package/.agents/scripts/lib/signals/index.js +2 -19
  436. package/.agents/scripts/lib/signals/schema.js +14 -109
  437. package/.agents/scripts/lib/signals/write.js +2 -11
  438. package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
  439. package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
  440. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
  441. package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
  442. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
  443. package/.agents/scripts/lib/single-story-sweep.js +14 -97
  444. package/.agents/scripts/lib/skills/parse-skill.js +13 -59
  445. package/.agents/scripts/lib/skills/skills-index.js +8 -29
  446. package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
  447. package/.agents/scripts/lib/source-extensions.js +11 -42
  448. package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
  449. package/.agents/scripts/lib/stdio-flush.js +9 -36
  450. package/.agents/scripts/lib/story-adjacency.js +8 -40
  451. package/.agents/scripts/lib/story-body/body-format-lints.js +22 -83
  452. package/.agents/scripts/lib/story-body/footer-block.js +11 -44
  453. package/.agents/scripts/lib/story-body/story-body.js +83 -358
  454. package/.agents/scripts/lib/temp-retention.js +42 -143
  455. package/.agents/scripts/lib/templates/decomposer-prompts.js +11 -65
  456. package/.agents/scripts/lib/test-env.js +12 -65
  457. package/.agents/scripts/lib/test-run-credit.js +10 -65
  458. package/.agents/scripts/lib/test-runner-contract.js +19 -74
  459. package/.agents/scripts/lib/test-temp.js +38 -184
  460. package/.agents/scripts/lib/test-tiers.js +12 -96
  461. package/.agents/scripts/lib/ticket-body-sections.js +21 -96
  462. package/.agents/scripts/lib/transpile.js +15 -74
  463. package/.agents/scripts/lib/util/concurrent-map.js +6 -25
  464. package/.agents/scripts/lib/util/parse-id-list.js +8 -34
  465. package/.agents/scripts/lib/util/poll-loop.js +8 -28
  466. package/.agents/scripts/lib/util/with-timeout.js +2 -11
  467. package/.agents/scripts/lib/validation-evidence.js +21 -96
  468. package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
  469. package/.agents/scripts/lib/wave-runner/live-probe.js +53 -221
  470. package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
  471. package/.agents/scripts/lib/workers/crap-worker.js +11 -64
  472. package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
  473. package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
  474. package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
  475. package/.agents/scripts/lib/workflow-closure.js +22 -105
  476. package/.agents/scripts/lib/workspace-provisioner.js +16 -54
  477. package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
  478. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
  479. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
  480. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
  481. package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
  482. package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
  483. package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
  484. package/.agents/scripts/lib/worktree-manager.js +15 -40
  485. package/.agents/scripts/lint-issue-body.js +12 -68
  486. package/.agents/scripts/mandrel-update-preflight.js +10 -70
  487. package/.agents/scripts/merge-baseline.js +30 -104
  488. package/.agents/scripts/nav-registry-diff.js +22 -108
  489. package/.agents/scripts/notify.js +12 -69
  490. package/.agents/scripts/plan-context.js +27 -111
  491. package/.agents/scripts/plan-critics.js +12 -66
  492. package/.agents/scripts/plan-persist.js +31 -148
  493. package/.agents/scripts/plan-run-epilogue.js +11 -37
  494. package/.agents/scripts/pr-watch-with-update.js +76 -267
  495. package/.agents/scripts/providers/github/auth.js +3 -8
  496. package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
  497. package/.agents/scripts/providers/github/board-add.js +5 -21
  498. package/.agents/scripts/providers/github/branch-protection.js +11 -43
  499. package/.agents/scripts/providers/github/cache.js +2 -14
  500. package/.agents/scripts/providers/github/comments.js +7 -40
  501. package/.agents/scripts/providers/github/compose.js +3 -19
  502. package/.agents/scripts/providers/github/errors.js +22 -125
  503. package/.agents/scripts/providers/github/issues.js +31 -123
  504. package/.agents/scripts/providers/github/labels.js +24 -124
  505. package/.agents/scripts/providers/github/mappers.js +5 -27
  506. package/.agents/scripts/providers/github/merge-methods.js +3 -22
  507. package/.agents/scripts/providers/github/project-board.js +2 -17
  508. package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
  509. package/.agents/scripts/providers/github/request-helpers.js +5 -32
  510. package/.agents/scripts/providers/github/search-budget.js +9 -39
  511. package/.agents/scripts/providers/github/search-query.js +5 -26
  512. package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
  513. package/.agents/scripts/providers/github/sub-issues.js +7 -36
  514. package/.agents/scripts/providers/github/tickets.js +32 -134
  515. package/.agents/scripts/providers/github.js +18 -59
  516. package/.agents/scripts/prune-plan-run-labels.js +12 -46
  517. package/.agents/scripts/quality-preview.js +35 -220
  518. package/.agents/scripts/resolve-doc-tiers.js +3 -26
  519. package/.agents/scripts/resolve-stories.js +16 -67
  520. package/.agents/scripts/resync-status-column.js +6 -25
  521. package/.agents/scripts/run-tests.js +29 -104
  522. package/.agents/scripts/single-story-close.js +23 -135
  523. package/.agents/scripts/single-story-confirm-merge.js +32 -139
  524. package/.agents/scripts/single-story-init.js +47 -209
  525. package/.agents/scripts/stories-wave-tick.js +102 -472
  526. package/.agents/scripts/sync-agentrc.js +3 -21
  527. package/.agents/scripts/sync-claude-agents.js +9 -55
  528. package/.agents/scripts/sync-claude-commands.js +20 -110
  529. package/.agents/scripts/test-wrapper.js +6 -43
  530. package/.agents/scripts/update-coverage-baseline.js +5 -22
  531. package/.agents/scripts/update-crap-baseline.js +7 -30
  532. package/.agents/scripts/update-duplication-baseline.js +16 -92
  533. package/.agents/scripts/update-maintainability-baseline.js +8 -62
  534. package/.agents/scripts/update-ticket-state.js +1 -7
  535. package/.agents/scripts/validate-skills.js +6 -26
  536. package/.agents/templates/agent-protocol.md +2 -2
  537. package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
  538. package/.agents/workflows/audit-accessibility.md +4 -7
  539. package/.agents/workflows/audit-adrs.md +3 -6
  540. package/.agents/workflows/audit-architecture.md +3 -11
  541. package/.agents/workflows/audit-baselines.md +6 -9
  542. package/.agents/workflows/audit-clean-code.md +8 -12
  543. package/.agents/workflows/audit-data-model.md +3 -7
  544. package/.agents/workflows/audit-dependencies.md +4 -7
  545. package/.agents/workflows/audit-devops.md +4 -8
  546. package/.agents/workflows/audit-documentation.md +1 -4
  547. package/.agents/workflows/audit-mobile.md +4 -7
  548. package/.agents/workflows/audit-navigability.md +3 -6
  549. package/.agents/workflows/audit-performance.md +2 -4
  550. package/.agents/workflows/audit-privacy.md +4 -7
  551. package/.agents/workflows/audit-quality.md +4 -7
  552. package/.agents/workflows/audit-security.md +4 -7
  553. package/.agents/workflows/audit-seo.md +4 -7
  554. package/.agents/workflows/audit-sre.md +4 -7
  555. package/.agents/workflows/audit-to-stories.md +17 -30
  556. package/.agents/workflows/audit-ux-ui.md +4 -7
  557. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  558. package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
  559. package/.agents/workflows/helpers/deliver-digest.md +6 -4
  560. package/.agents/workflows/helpers/deliver-reference.md +114 -188
  561. package/.agents/workflows/helpers/deliver-story-reference.md +189 -533
  562. package/.agents/workflows/helpers/plan-reference.md +86 -139
  563. package/.agents/workflows/helpers/qa-core.md +12 -0
  564. package/.agents/workflows/memory-consolidate.md +1 -1
  565. package/.agents/workflows/qa-assist.md +27 -71
  566. package/.agents/workflows/qa-explore.md +19 -59
  567. package/.agents/workflows/qa-run.md +11 -33
  568. package/README.md +1 -1
  569. package/bin/mandrel.js +5 -46
  570. package/bin/postinstall.js +18 -107
  571. package/docs/CHANGELOG.md +25 -0
  572. package/lib/cli/doctor.js +11 -71
  573. package/lib/cli/init.js +26 -165
  574. package/lib/cli/migrate.js +5 -64
  575. package/lib/cli/registry.js +84 -467
  576. package/lib/cli/sync-agents.js +4 -64
  577. package/lib/cli/sync-commands.js +11 -64
  578. package/lib/cli/sync.js +34 -213
  579. package/lib/cli/uninstall.js +40 -219
  580. package/lib/cli/update.js +105 -661
  581. package/lib/cli/version-check.js +8 -72
  582. package/lib/cli/version-helpers.js +14 -87
  583. package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
  584. package/lib/migrations/index.js +15 -92
  585. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
  586. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
  587. package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
  588. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
  589. package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
  590. package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
  591. package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
  592. package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
  593. package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +2 -21
  594. package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
  595. package/package.json +16 -14
  596. package/.agents/docs/SDLC.md +0 -590
  597. package/.agents/docs/quality-gates.md +0 -1183
  598. package/.agents/rules/known-tooling-behavior.md +0 -200
  599. package/.agents/rules/orchestration-error-handling.md +0 -61
  600. package/.agents/rules/test-seams.md +0 -59
  601. package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
  602. package/.agents/schemas/baselines/lint.schema.json +0 -47
  603. package/.agents/scripts/check-action-pinning.js +0 -260
  604. package/.agents/scripts/check-audit-attribution.js +0 -302
  605. package/.agents/scripts/check-baseline-drift.js +0 -211
  606. package/.agents/scripts/check-baseline-scope.js +0 -362
  607. package/.agents/scripts/check-generated-validator.js +0 -202
  608. package/.agents/scripts/check-knip-entries.js +0 -159
  609. package/.agents/scripts/check-lifecycle-lint.js +0 -294
  610. package/.agents/scripts/check-pinned-override-notes.js +0 -102
  611. package/.agents/scripts/check-schema-references.js +0 -368
  612. package/.agents/scripts/check-test-portability.js +0 -512
  613. package/.agents/scripts/check-workflow-citations.js +0 -218
  614. package/.agents/scripts/check-workflow-cli-lint.js +0 -299
  615. package/.agents/scripts/check-workflow-timeouts.js +0 -291
  616. package/.agents/scripts/install-matrix-assert.js +0 -326
  617. package/.agents/scripts/lib/audit-advisories.js +0 -195
  618. package/.agents/scripts/lib/audit-attribution.js +0 -134
  619. package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
  620. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
  621. package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
  622. package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
  623. package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
  624. package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
  625. package/.agents/scripts/lib/c8-cli-path.js +0 -21
  626. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
  627. package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
  628. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
  629. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
  630. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
  631. package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
  632. package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
  633. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
  634. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
  635. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
  636. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
  637. package/.agents/scripts/lib/fs-walk.js +0 -52
  638. package/.agents/scripts/lib/knip-config-resolver.js +0 -181
  639. package/.agents/scripts/lib/knip-entry-sync.js +0 -452
  640. package/.agents/scripts/lib/pinned-override-notes.js +0 -88
  641. package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
  642. package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
  643. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
  644. package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
  645. package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
  646. package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
  647. package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
  648. package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
  649. package/.agents/scripts/lib/test-isolate/runner.js +0 -483
  650. package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
  651. package/.agents/scripts/lib/test-profile/render-report.js +0 -45
  652. package/.agents/scripts/lint-label-vocabulary.js +0 -214
  653. package/.agents/scripts/post-structured-comment.js +0 -127
  654. package/.agents/scripts/provision-git-hooks.js +0 -85
  655. package/.agents/scripts/prune-baseline-orphans.js +0 -181
  656. package/.agents/scripts/run-coverage.js +0 -197
  657. package/.agents/scripts/run-lint.js +0 -133
  658. package/.agents/scripts/run-test-profile.js +0 -129
  659. package/.agents/scripts/run-verify.js +0 -125
  660. package/.agents/scripts/test-isolate.js +0 -55
  661. package/.agents/scripts/update-dead-exports-baseline.js +0 -321
@@ -1,34 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  /**
4
- * evidence-gate.js — evidence-aware wrapper around a single shell gate.
5
- *
6
- * Tech Spec #819 §"Evidence record (Story 7)" — `/mandrel-deliver` Phase 3
7
- * (close-validation) runs `npm run lint` and `npm test` against the Epic
8
- * branch before opening the PR.
9
- * If the same gate has already passed against the current `git rev-parse
10
- * HEAD` (recorded earlier in the local hot path), this wrapper logs a skip
11
- * and exits 0 instead of re-spawning the runner. On run, a successful
12
- * gate is recorded so the next invocation can skip in turn.
13
- *
14
- * Usage:
15
- * node .agents/scripts/evidence-gate.js \
16
- * --standalone --scope-id <storyId> --gate <name> \
17
- * [--worktree <path>] [--no-evidence] -- <cmd> [args...]
18
- *
19
- * Examples:
20
- * node .agents/scripts/evidence-gate.js --standalone --scope-id 4250 --gate lint \
21
- * --worktree .worktrees/story-4250 -- npm run lint
22
- * node .agents/scripts/evidence-gate.js --standalone --scope-id 4250 --gate test \
23
- * --worktree .worktrees/story-4250 -- npm test
24
- *
25
- * `--standalone` (Story #4250) is required: the evidence file is anchored on
26
- * the Story id at
27
- * `<tempRoot>/standalone/stories/story-<sid>/validation-evidence.json` — the
28
- * same keyspace the standalone close consults, so the acceptance-self-eval
29
- * critic's verify[] runs (lint / typecheck) are shared with the close.
30
- * v2.0.0 removed the Epic tier along with the `--epic-id` Epic-keyed
31
- * keyspace.
4
+ * Runs one gate, skipping it when evidence shows the same gate already
5
+ * passed for the current HEAD and tree, and recording a pass for the next
6
+ * caller. `--standalone` is required: it keys evidence by Story id, the same
7
+ * keyspace close consults, so worker-side verify[] runs credit the close.
32
8
  */
33
9
 
34
10
  import { spawnSync } from 'node:child_process';
@@ -44,12 +20,6 @@ import {
44
20
  treeFingerprint,
45
21
  } from './lib/validation-evidence.js';
46
22
 
47
- /**
48
- * Split argv at the first `--` and return both halves. The wrapper consumes
49
- * everything before `--`; the runner receives everything after.
50
- *
51
- * Exported for testing.
52
- */
53
23
  export function splitOnDashDash(argv) {
54
24
  const idx = argv.indexOf('--');
55
25
  if (idx === -1) return { wrapperArgs: argv, runnerArgs: [] };
@@ -59,11 +29,6 @@ export function splitOnDashDash(argv) {
59
29
  };
60
30
  }
61
31
 
62
- /**
63
- * Parse the wrapper-side argv (before `--`).
64
- *
65
- * Exported for testing.
66
- */
67
32
  export function parseWrapperArgs(argv) {
68
33
  const { values } = parseArgs({
69
34
  args: argv,
@@ -96,16 +61,9 @@ function resolveHeadShaDefault(cwd, gitSpawnFn) {
96
61
  }
97
62
 
98
63
  /**
99
- * The pair of keys an evidence record is written and read under: the commit
100
- * this gate ran at, and the content identity of the tree it ran against
101
- * (Story #5278).
102
- *
103
- * Both are read from the **spawn** cwd — the Story worktree when one is
104
- * supplied — so the keys describe the tree the gate actually saw. The tree
105
- * fingerprint is what keeps this gate credited across close's own base-sync
106
- * fast-forward, which moves HEAD between the deposit and the gates that would
107
- * spend it; see `validation-evidence.js#treeFingerprint`.
108
- *
64
+ * Read from the spawn cwd so the keys describe the tree the gate saw. The
65
+ * tree fingerprint keeps credit across close's base-sync fast-forward, which
66
+ * moves HEAD between deposit and spend.
109
67
  * @param {{ spawnCwd: string, gitSpawnFn: Function, useEvidence: boolean }} args
110
68
  * @returns {{ headSha: string|null, inputFingerprint: string|null }}
111
69
  */
@@ -118,34 +76,21 @@ function resolveEvidenceKeys({ spawnCwd, gitSpawnFn, useEvidence }) {
118
76
  }
119
77
 
120
78
  /**
121
- * Runner-shaped entry-point: takes the parsed wrapper args + runner args and
122
- * executes the gate. Pure-ish (modulo IO) — all side-effects are routed via
123
- * the injection hooks so tests can stub `gitSpawn`, `spawnSync`, and the
124
- * evidence store without touching disk or spawning processes.
125
- *
126
- * Exported for tests + the CLI `main()`.
127
- *
128
79
  * @param {object} params
129
- * @param {number} params.scopeId — Story ID (positive integer).
130
- * @param {boolean} [params.standalone] — Required. Routes to the
131
- * storyId-anchored standalone keyspace (Story #4250).
132
- * @param {string} params.gate — Logical gate name (`lint`, `typecheck`, …).
133
- * @param {boolean} params.useEvidence — When false, force the runner.
134
- * @param {string} params.cwd — Evidence cwd (locates the temp
135
- * tree). The runner is spawned in `worktreePath` when set, else `cwd`.
136
- * @param {string|null} [params.worktreePath] — Spawn cwd override (Story #1120).
137
- * When set, the runner runs in the Story worktree and the HEAD-SHA used as
138
- * the evidence cache key is read from the worktree, not from `cwd`.
139
- * @param {string[]} params.runnerArgs — `[cmd, ...args]` from after `--`.
140
- * @param {object} [deps] — Optional injection hooks (tests).
141
- * @param {Function} [deps.gitSpawnFn] — Stub for `gitSpawn`.
142
- * @param {Function} [deps.spawnFn] — Stub for `spawnSync`.
143
- * @param {Function} [deps.shouldSkipFn] — Stub for `shouldSkip`.
144
- * @param {Function} [deps.recordPassFn] — Stub for `recordPass`.
145
- * @param {object} [deps.logger] — Logger-shaped object (info/error/warn/fatal).
146
- * @returns {{ status: number, skipped: boolean }} Outcome summary. `status`
147
- * is the runner's exit code (0 = pass), `skipped` is true when evidence
148
- * short-circuited the runner.
80
+ * @param {number} params.scopeId
81
+ * @param {boolean} [params.standalone]
82
+ * @param {string} params.gate
83
+ * @param {boolean} params.useEvidence
84
+ * @param {string} params.cwd — evidence cwd (locates the temp tree)
85
+ * @param {string|null} [params.worktreePath] — spawn cwd and HEAD source
86
+ * @param {string[]} params.runnerArgs
87
+ * @param {object} [deps]
88
+ * @param {Function} [deps.gitSpawnFn]
89
+ * @param {Function} [deps.spawnFn]
90
+ * @param {Function} [deps.shouldSkipFn]
91
+ * @param {Function} [deps.recordPassFn]
92
+ * @param {object} [deps.logger]
93
+ * @returns {{ status: number, skipped: boolean }}
149
94
  */
150
95
  export async function runEvidenceGate(params, deps = {}) {
151
96
  const {
@@ -165,9 +110,6 @@ export async function runEvidenceGate(params, deps = {}) {
165
110
  runnerArgs,
166
111
  } = params ?? {};
167
112
 
168
- // `--standalone` (Story #4250) routes the evidence file to the
169
- // storyId-anchored keyspace so the acceptance-self-eval critic can record
170
- // verify[] evidence into the same keyspace the standalone close consults.
171
113
  if (
172
114
  !scopeId ||
173
115
  !standalone ||
@@ -180,14 +122,10 @@ export async function runEvidenceGate(params, deps = {}) {
180
122
  );
181
123
  return { status: 1, skipped: false };
182
124
  }
183
- // Evidence-store opts shared by shouldSkip + recordPass below.
184
125
  const evidenceStoreOpts = { cwd, standalone };
185
126
 
186
- // Spawn cwd is the worktree when supplied — every gate command sees the
187
- // Story branch's tree, not the main checkout. Evidence cwd stays anchored
188
- // to the main checkout so the temp tree resolves under the main
189
- // `.git/`. The HEAD-SHA used as the cache key is read from the spawn cwd
190
- // (the worktree), so cache entries key against the Story branch's HEAD.
127
+ // The gate runs in the worktree; evidence stays anchored to the main
128
+ // checkout so the temp tree resolves under the main `.git/`.
191
129
  const spawnCwd = worktreePath ?? cwd;
192
130
  const [cmd, ...cmdArgs] = runnerArgs;
193
131
  const configHash = hashCommandConfig({ cmd, args: cmdArgs, cwd: spawnCwd });
@@ -1,18 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * file-ci-gap.js — the CI-remediation Option-2 filing command.
4
- *
5
- * `rules/ci-remediation.md` sends three verdicts here — `pre-existing`,
6
- * `capacity`, `unreproducible-tier` — each meaning "this red check is real,
7
- * and fixing it is not this delivery's job". The rule used to say "file a
8
- * `meta::framework-gap` issue" and stop, leaving the agent to hand-run
9
- * `gh issue create` wherever it was standing. This is the mechanism behind
10
- * that sentence: evidence from the CI digest, ownership routing, fingerprint
11
- * dedup, the `friction` comment, and the `agent::blocked` flip in one call.
12
- *
13
- * It files an **intake** issue, never a Story: `/mandrel-plan <id>` graduates
14
- * it on the next planning pass. Delivery never blocks on planning — see
15
- * `lib/orchestration/ci-gap-intake.js` for why that split is load-bearing.
3
+ * CI-remediation Option-2 filing: for a red check that is real but not this
4
+ * delivery's to fix, files (or updates, by fingerprint) an intake issue in
5
+ * the owning repo, comments `friction` on the Story, and optionally blocks it.
6
+ * It files intake, never a Story, so delivery never blocks on planning.
16
7
  */
17
8
 
18
9
  import { parseArgs } from 'node:util';
@@ -84,15 +75,9 @@ const USAGE = {
84
75
  };
85
76
 
86
77
  /**
87
- * Wire the live GitHub ports the intake filer writes through.
88
- *
89
- * `gh` is the transport rather than the provider facade because a filing can
90
- * target a repository other than the configured one, and `gh issue create
91
- * --repo` is the surface that already does that (the graduators file
92
- * cross-repo the same way).
93
- *
78
+ * `gh` rather than the provider facade: a filing may target another repo.
94
79
  * @param {object} opts
95
- * @returns {object} ports for `fileCiGapIntake`
80
+ * @returns {object}
96
81
  */
97
82
  function liveIntakePorts({ provider, searchRepo, cwd, logger }) {
98
83
  const labelCache = new Map();
@@ -104,9 +89,7 @@ function liveIntakePorts({ provider, searchRepo, cwd, logger }) {
104
89
  repo: searchRepo.repo,
105
90
  }),
106
91
  createIssue: async ({ owner, repo, title, body, labels }) => {
107
- // `gh issue create --label <absent>` fails outright, so a brand-new
108
- // routing label (meta::platform-gap, friction::unreproducible-tier)
109
- // has to exist before the create — not after it errors.
92
+ // `gh issue create` fails outright on an absent label; ensure first.
110
93
  const ensured = await ensureIssueLabels({
111
94
  owner,
112
95
  repo,
@@ -136,9 +119,6 @@ function liveIntakePorts({ provider, searchRepo, cwd, logger }) {
136
119
  }
137
120
 
138
121
  /**
139
- * Render the `friction` comment the Story carries so the blocker is legible
140
- * on the ticket itself, not only in the intake issue.
141
- *
142
122
  * @param {object} opts
143
123
  * @returns {string}
144
124
  */
@@ -171,16 +151,10 @@ export function renderFrictionComment({
171
151
  return lines.join('\n');
172
152
  }
173
153
 
174
- /** The graduation instruction every filing carries, verdict-independent. */
175
154
  const GRADUATE_LINE =
176
155
  'Graduate the intake issue with `/mandrel-plan <issue number>` to turn it into a Story.';
177
156
 
178
157
  /**
179
- * What this filing says about rerunning the failed job (Story #5343). An
180
- * allowance is stated with its head SHA and its one-shot bound, because the
181
- * comment is where an operator reads whether the rerun they are about to do
182
- * is the sanctioned one.
183
- *
184
158
  * @param {{ headSha: string } | null} rerunAllowance
185
159
  * @returns {string}
186
160
  */
@@ -193,14 +167,8 @@ function renderRerunLine(rerunAllowance) {
193
167
  }
194
168
 
195
169
  /**
196
- * File the CI-gap intake issue for one Story, post the `friction` comment,
197
- * and optionally flip the Story to `agent::blocked`.
198
- *
199
- * Every port is injectable so the unit tests exercise the whole command with
200
- * no network and no live tracker.
201
- *
202
170
  * @param {object} opts
203
- * @returns {Promise<object>} the intake result, plus what the command did.
171
+ * @returns {Promise<object>}
204
172
  */
205
173
  export async function runFileCiGap({
206
174
  storyId,
@@ -224,9 +192,7 @@ export async function runFileCiGap({
224
192
  throw new Error('--story <id> is required (a positive issue number).');
225
193
  }
226
194
  const resolved = config ?? resolveConfig();
227
- // The digest's temp root, resolved exactly as `pr-watch-with-update.js`
228
- // resolves it when it WRITES the digest — the CLI never passed one, so the
229
- // default read crashed on `undefined` before it could find the file.
195
+ // Must resolve exactly as `pr-watch-with-update.js` does when writing it.
230
196
  const digestRoot = tempRoot ?? resolved?.project?.paths?.tempRoot ?? 'temp';
231
197
  const ciDigest =
232
198
  digest ?? readCiDigest({ storyId: sid, tempRoot: digestRoot, cwd });
@@ -268,9 +234,7 @@ export async function runFileCiGap({
268
234
  now,
269
235
  });
270
236
 
271
- // Story #5343 — a proven-environmental verdict earns the one same-SHA
272
- // rerun the watcher's guard will admit. Recorded on the digest, keyed to
273
- // the head SHA the red was observed on, and never on a dry run.
237
+ // A proven-environmental verdict earns one same-SHA rerun; never on dry run.
274
238
  const rerunAllowance = dryRun
275
239
  ? null
276
240
  : recordRerunAllowance({
@@ -310,8 +274,6 @@ export async function runFileCiGap({
310
274
  }
311
275
 
312
276
  /**
313
- * CLI entrypoint.
314
- *
315
277
  * @returns {Promise<void>}
316
278
  */
317
279
  async function main() {
@@ -338,8 +300,6 @@ async function main() {
338
300
  block: values.block,
339
301
  });
340
302
 
341
- // Single-line JSON per the script-output contract — an orchestrator parses
342
- // this, and a pretty dump is noise in a delivery transcript.
343
303
  process.stdout.write(`${JSON.stringify(result)}\n`);
344
304
  for (const err of result.errors) {
345
305
  Logger.error(`[file-ci-gap] ${err}`);
@@ -1,58 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * .agents/scripts/generate-config-docs.js — the `.agentrc` config surface
4
- * generator (Story #5007).
5
- *
6
- * **One annotated source, three generated artifacts.** The runtime AJV schema
7
- * (`AGENTRC_SCHEMA`, composed from `lib/config-settings-schema*.js` and
8
- * `lib/config/gates/*`) is the single hand-authored enumeration of the
9
- * `.agentrc.json` surface. `description` and `default` annotations live on
10
- * those literals — AJV ignores both — and this generator emits everything
11
- * downstream of them:
12
- *
13
- * 1. `.agents/schemas/agentrc.schema.json` — the JSON-Schema mirror every
14
- * consumer `.agentrc.json` points `$schema` at. Serialized 2020-12,
15
- * fully inlined (no `$defs`): it IS the runtime schema, so the class of
16
- * bug where a key exists in the mirror but not in the runtime AJV — and
17
- * a consumer's whole config is therefore dead on arrival (Epic #4131) —
18
- * cannot be expressed any more.
19
- * 2. `.agents/docs/agentrc-reference.json` — the defaults inventory
20
- * `lib/config/defaults.js` reads for `mandrel explain` and the
21
- * sync-agentrc redundancy advisory. Built from the `default`
22
- * annotations: a node carrying one contributes its value verbatim and is
23
- * not descended into; a node carrying none contributes nothing.
24
- * 3. The bounded key-table region inside `.agents/docs/configuration.md`,
25
- * delimited by:
26
- *
27
- * <!-- BEGIN GENERATED:agentrc -->
28
- * ...generated tables...
29
- * <!-- END GENERATED:agentrc -->
30
- *
31
- * One Markdown section per top-level schema key, each table columned
32
- * `| Key | Required | Type | Default | Description |`, with nested
33
- * properties flattened into dot-paths (`paths.agentRoot`,
34
- * `branchProtection.requiredChecks[]`).
35
- *
36
- * Until this Story the first two were hand-maintained alongside the runtime
37
- * schema and reconciled by two parity suites; those suites are now
38
- * generator-fidelity checks.
39
- *
40
- * Modes:
41
- * (default) — rewrite any artifact whose content is stale.
42
- * --check — exit 0 when all three are current, exit 1 naming the stale
43
- * ones. Wired into `npm run docs:check`, hence `npm run lint`.
44
- *
45
- * **Whitespace is not content.** The two JSON artifacts are re-formatted by
46
- * Biome via lint-staged after they are written, so comparing raw bytes would
47
- * make the check fail on formatting alone. Both comparison and write go
48
- * through {@link canonicalJson}: parse, re-serialize, compare. That is
49
- * insensitive to whitespace and *sensitive* to key order, which is what
50
- * actually matters — key order drives the doc-table order and the ordering a
51
- * consumer's editor offers completions in.
52
- *
53
- * Per `.agents/rules/orchestration-error-handling.md`, unrecoverable
54
- * failures surface via `throw new Error(...)` so `runAsCli` can map the
55
- * throw to `process.exit(1)` deterministically (no `Logger.fatal`).
3
+ * Generates the `.agentrc` config surface from the annotated runtime AJV
4
+ * schema (the single source): the JSON-Schema mirror (fully inlined, so it
5
+ * cannot disagree with runtime), the defaults inventory, and the key-table
6
+ * region of `configuration.md`. JSON artifacts compare canonically — Biome
7
+ * reformats them after write, so whitespace is ignored but key order counts.
56
8
  */
57
9
 
58
10
  import fs from 'node:fs';
@@ -82,7 +34,6 @@ const DOC_PATH = path.join(PROJECT_ROOT, '.agents', 'docs', 'configuration.md');
82
34
  const REGION_BEGIN = '<!-- BEGIN GENERATED:agentrc -->';
83
35
  const REGION_END = '<!-- END GENERATED:agentrc -->';
84
36
 
85
- /** Envelope keys prepended to the serialized runtime schema. */
86
37
  const MIRROR_ENVELOPE = {
87
38
  $schema: 'https://json-schema.org/draft/2020-12/schema',
88
39
  $id: 'https://github.com/dsj1984/mandrel/blob/main/.agents/schemas/agentrc.schema.json',
@@ -91,16 +42,12 @@ const MIRROR_ENVELOPE = {
91
42
  'GENERATED — do not edit. Emitted by `node .agents/scripts/generate-config-docs.js` from the runtime AJV schema in `.agents/scripts/lib/config-settings-schema.js` (plus its `-delivery` / `-quality` / `config/gates/*` modules), which is the single source of truth for the `.agentrc.json` surface. This file exists for editor tooling and human readers; because it is a serialization of the runtime schema rather than a hand-kept mirror, the two cannot disagree. Edit the annotated schema literals and re-run `npm run docs:gen`.',
92
43
  };
93
44
 
94
- /** `$schema` pointer written into the generated defaults inventory. */
95
45
  const REFERENCE_SCHEMA_POINTER = '../schemas/agentrc.schema.json';
96
46
 
97
- // Order matters — drives the per-section emission sequence.
47
+ // Order drives section emission.
98
48
  const TOP_LEVEL_KEYS = ['project', 'github', 'planning', 'delivery', 'qa'];
99
49
 
100
50
  /**
101
- * Canonical JSON text for comparison and for writing. Key order is preserved
102
- * (and therefore compared); whitespace is normalized away.
103
- *
104
51
  * @param {unknown} value
105
52
  * @returns {string}
106
53
  */
@@ -109,10 +56,7 @@ function canonicalJson(value) {
109
56
  }
110
57
 
111
58
  /**
112
- * Read a JSON artifact and return its canonical text, or `null` when the file
113
- * is absent (first generation) or unparseable (a hand-mangled artifact is
114
- * treated as stale, not as a crash).
115
- *
59
+ * `null` when absent or unparseable — a mangled artifact is stale, not a crash.
116
60
  * @param {string} file
117
61
  * @returns {string | null}
118
62
  */
@@ -126,16 +70,7 @@ function readCanonicalJson(file) {
126
70
  }
127
71
 
128
72
  /**
129
- * Build the shipped JSON-Schema mirror: the 2020-12 envelope followed by the
130
- * runtime schema verbatim.
131
- *
132
- * The runtime schema is a plain, cycle-free object literal (no RegExp or
133
- * function values), so `structuredClone` is a faithful serialization. Shared
134
- * sub-schema objects — `TOLERANCE_SCHEMA` and friends, referenced by several
135
- * gates — are inlined at each use rather than hoisted into `$defs`. The
136
- * inlined document is smaller than the hand-maintained `$defs` mirror it
137
- * replaces, and it removes the naming heuristic a hoisting pass would need.
138
- *
73
+ * Shared sub-schemas are inlined at each use rather than hoisted to `$defs`.
139
74
  * @param {object} schema
140
75
  * @returns {object}
141
76
  */
@@ -144,17 +79,10 @@ function buildMirrorSchema(schema) {
144
79
  }
145
80
 
146
81
  /**
147
- * Collect the `default` annotations under `node` into a nested plain object.
148
- *
149
- * A node carrying `default` contributes that value verbatim and is NOT
150
- * descended into — that is what lets an object-shaped or array-shaped default
151
- * (`github.branchProtection.requiredChecks`, `qa.environments`) be declared in
152
- * one place. A properties-bearing node with no `default` contributes an object
153
- * built from whichever children contributed something, or nothing at all when
154
- * none did.
155
- *
82
+ * A node carrying `default` contributes it verbatim and is not descended
83
+ * into, so an object- or array-shaped default is declared in one place.
156
84
  * @param {object} node
157
- * @returns {unknown} The built value, or `undefined` for "contributes nothing".
85
+ * @returns {unknown} `undefined` when nothing is contributed.
158
86
  */
159
87
  function collectDefaults(node) {
160
88
  if (!node || typeof node !== 'object') return undefined;
@@ -169,8 +97,6 @@ function collectDefaults(node) {
169
97
  }
170
98
 
171
99
  /**
172
- * Build the defaults inventory shipped as `.agents/docs/agentrc-reference.json`.
173
- *
174
100
  * @param {object} schema
175
101
  * @returns {object}
176
102
  */
@@ -182,11 +108,9 @@ function buildReferenceInventory(schema) {
182
108
  }
183
109
 
184
110
  /**
185
- * Collapse an `allOf` envelope down onto its base node. The schema uses
186
- * `allOf` only to hang a conditional (`if`/`then`) constraint off a block, so
187
- * the merged view carries the base type for documentation purposes.
188
- *
189
- * @param {object} node The schema node to flatten.
111
+ * `allOf` only hangs `if`/`then` constraints off a block, so the base type is
112
+ * what the docs need.
113
+ * @param {object} node
190
114
  * @returns {object}
191
115
  */
192
116
  function flattenAllOf(node) {
@@ -203,11 +127,7 @@ function flattenAllOf(node) {
203
127
  }
204
128
 
205
129
  /**
206
- * Render the "Type" cell for an `array`-typed node by inspecting its `items`
207
- * schema: an enum item renders `array<enum>`, a typed item renders
208
- * `array<type>`, and anything else collapses to a bare `array`.
209
- *
210
- * @param {object} flat Flattened array node.
130
+ * @param {object} flat
211
131
  * @returns {string}
212
132
  */
213
133
  function renderArrayType(flat) {
@@ -224,11 +144,7 @@ function renderArrayType(flat) {
224
144
  }
225
145
 
226
146
  /**
227
- * Render the "Type" cell for an `object`-typed node — `object<map>` when it
228
- * carries an `additionalProperties` schema (the map form), `object`
229
- * otherwise.
230
- *
231
- * @param {object} flat Flattened object node.
147
+ * @param {object} flat
232
148
  * @returns {string}
233
149
  */
234
150
  function renderObjectType(flat) {
@@ -242,20 +158,12 @@ function renderObjectType(flat) {
242
158
  }
243
159
 
244
160
  /**
245
- * Ordered dispatch table for the "Type" cell. Each rule pairs a `when(flat)`
246
- * predicate with a `render(flat)` producer; {@link renderType} walks the
247
- * table once and returns the first match, so a new schema shape becomes a new
248
- * row here rather than another nested branch.
249
- *
250
- * Order is load-bearing — `oneOf` and `enum` are matched before the plain
251
- * `type` rules.
252
- *
161
+ * First match wins; `oneOf` and `enum` must precede the plain `type` rules.
253
162
  * @type {Array<{ when: (flat: object) => boolean, render: (flat: object) => string }>}
254
163
  */
255
164
  const TYPE_RULES = [
256
165
  {
257
- // The list-or-extender union: a plain `string[]` (replace) or an
258
- // `{ append?, prepend? }` object that deep-merges with the framework list.
166
+ // List-or-extender union: replace, or deep-merge with the framework list.
259
167
  when: (flat) =>
260
168
  Array.isArray(flat.oneOf) &&
261
169
  flat.oneOf.some((m) => m?.properties?.append || m?.properties?.prepend),
@@ -290,10 +198,7 @@ const TYPE_RULES = [
290
198
  ];
291
199
 
292
200
  /**
293
- * Render the "Type" cell for a schema node. Anything the table does not match
294
- * falls through to a `?` so missing coverage is visible rather than silently
295
- * wrong.
296
- *
201
+ * An unmatched shape renders `?` so the gap is visible.
297
202
  * @param {object} node
298
203
  * @returns {string}
299
204
  */
@@ -305,10 +210,6 @@ function renderType(node) {
305
210
  }
306
211
 
307
212
  /**
308
- * Render the "Default" cell. Nodes without an explicit `default` annotation
309
- * get an em dash — see the annotation contract in `config-settings-schema.js`
310
- * for why a key can have a runtime default and no annotation.
311
- *
312
213
  * @param {object} node
313
214
  * @returns {string}
314
215
  */
@@ -328,8 +229,6 @@ function renderDefault(node) {
328
229
  }
329
230
 
330
231
  /**
331
- * Escape pipe characters so they survive Markdown table cell parsing.
332
- *
333
232
  * @param {string} text
334
233
  * @returns {string}
335
234
  */
@@ -338,11 +237,7 @@ function escapeCell(text) {
338
237
  }
339
238
 
340
239
  /**
341
- * Emit the rows for a nested-object property: a header row carrying the
342
- * parent's description followed by the recursively-flattened child rows.
343
- * Returns `null` when `flat` is not a properties-bearing object, so the
344
- * caller can fall through to the next row shape.
345
- *
240
+ * `null` when not a properties-bearing object, so the next builder runs.
346
241
  * @param {{flat: object, keyPath: string, pathParts: string[], propName: string, isRequired: boolean, description: string}} ctx
347
242
  * @returns {Array<object> | null}
348
243
  */
@@ -365,10 +260,7 @@ function nestedObjectRows(ctx) {
365
260
  }
366
261
 
367
262
  /**
368
- * Emit the single `[]`-suffixed row for an array-of-objects property,
369
- * describing the item shape in the Description cell. Returns `null` when the
370
- * property is not an array whose items are a properties-bearing object.
371
- *
263
+ * One `[]`-suffixed row per array of objects, item keys in the Description.
372
264
  * @param {{flat: object, keyPath: string, isRequired: boolean, description: string}} ctx
373
265
  * @returns {Array<object> | null}
374
266
  */
@@ -393,10 +285,6 @@ function arrayOfObjectsRows(ctx) {
393
285
  }
394
286
 
395
287
  /**
396
- * Emit the leaf (scalar / non-recursed) row for a property. Always matches —
397
- * it is the fallthrough shape when neither the nested-object nor the
398
- * array-of-objects builder applied.
399
- *
400
288
  * @param {{flat: object, keyPath: string, isRequired: boolean, description: string}} ctx
401
289
  * @returns {Array<object>}
402
290
  */
@@ -413,24 +301,13 @@ function leafRow(ctx) {
413
301
  ];
414
302
  }
415
303
 
416
- // Ordered row-shape builders for one property. The loop in flattenObject
417
- // returns the first builder that yields rows (non-null): nested-object first,
418
- // array-of-objects next, scalar leaf as the always-matching fallthrough.
304
+ // First builder returning non-null wins; leafRow always matches.
419
305
  const ROW_BUILDERS = [nestedObjectRows, arrayOfObjectsRows, leafRow];
420
306
 
421
307
  /**
422
- * Flatten one object-typed schema node into table rows. Recurses into nested
423
- * `object` properties so dot-paths like `paths.agentRoot` and
424
- * `branchProtection.requiredChecks` show up as individual rows.
425
- *
426
- * Arrays of objects (`requiredChecks[]`, `routes[]`, `bundles[]`) are emitted
427
- * as a single row whose Key column carries a `[]` suffix; the item shape is
428
- * captured in the Description cell. This keeps the output legible without
429
- * exploding into per-item-property rows.
430
- *
431
- * @param {object} node Schema node to flatten.
432
- * @param {string[]} pathParts Dot-path accumulator.
433
- * @param {Set<string>} required Required-property names on the parent.
308
+ * @param {object} node
309
+ * @param {string[]} pathParts
310
+ * @param {Set<string>} required
434
311
  * @returns {Array<{key:string, required:string, type:string, def:string, description:string}>}
435
312
  */
436
313
  function flattenObject(node, pathParts, required) {
@@ -463,8 +340,6 @@ function flattenObject(node, pathParts, required) {
463
340
  }
464
341
 
465
342
  /**
466
- * Render the Markdown body for one top-level section.
467
- *
468
343
  * @param {object} schema
469
344
  * @param {string} topKey
470
345
  * @returns {string}
@@ -508,8 +383,6 @@ function renderSection(schema, topKey) {
508
383
  }
509
384
 
510
385
  /**
511
- * Render the full bounded-region body (excluding the markers themselves).
512
- *
513
386
  * @param {object} schema
514
387
  * @returns {string}
515
388
  */
@@ -533,14 +406,10 @@ function renderRegion(schema) {
533
406
  }
534
407
 
535
408
  /**
536
- * Substitute the bounded region inside `original`. If the markers are
537
- * absent, inject them just after the "## Top-level shape" section's
538
- * trailing horizontal rule (the first `---` after that heading) so the
539
- * generated reference lands before the hand-authored per-section docs.
540
- * If no anchor is found, prepend the markers above the first `## ` heading.
541
- *
409
+ * Absent markers are inserted after the "## Top-level shape" block's `---`,
410
+ * else above the first `## ` heading, else appended.
542
411
  * @param {string} original
543
- * @param {string} body Region body including leading/trailing blank lines.
412
+ * @param {string} body
544
413
  * @returns {string}
545
414
  */
546
415
  function spliceRegion(original, body) {
@@ -564,11 +433,9 @@ function spliceRegion(original, body) {
564
433
  );
565
434
  }
566
435
 
567
- // Markers absent — insert them after the "## Top-level shape" block.
568
436
  const anchor = '## Top-level shape';
569
437
  const anchorIdx = original.indexOf(anchor);
570
438
  if (anchorIdx !== -1) {
571
- // Find the next `---` separator after the anchor.
572
439
  const ruleIdx = original.indexOf('\n---\n', anchorIdx);
573
440
  if (ruleIdx !== -1) {
574
441
  const insertAt = ruleIdx + '\n---\n'.length;
@@ -579,7 +446,6 @@ function spliceRegion(original, body) {
579
446
  }
580
447
  }
581
448
 
582
- // Fallback: insert above the first `## ` heading.
583
449
  const headingMatch = original.match(/^## /m);
584
450
  if (headingMatch && headingMatch.index !== undefined) {
585
451
  const before = original.slice(0, headingMatch.index);
@@ -588,18 +454,12 @@ function spliceRegion(original, body) {
588
454
  return `${before}${block}${after}`;
589
455
  }
590
456
 
591
- // Last-ditch: append.
592
457
  return `${original}\n${REGION_BEGIN}\n${body}\n${REGION_END}\n`;
593
458
  }
594
459
 
595
460
  /**
596
- * Build every generated artifact from `schema` and pair each with what is on
597
- * disk today.
598
- *
599
- * The JSON artifacts compare canonically (see the module header); the
600
- * Markdown artifact compares raw, because its region is spliced into
601
- * hand-authored prose that must survive byte-for-byte.
602
- *
461
+ * The Markdown artifact compares raw: its hand-authored prose must survive
462
+ * byte-for-byte.
603
463
  * @param {{ schema?: object, schemaPath?: string, referencePath?: string,
604
464
  * docPath?: string }} [opts]
605
465
  * @returns {Array<{ name: string, file: string, generated: string,