mandrel 2.59.0 → 2.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (678) hide show
  1. package/.agents/README.md +21 -19
  2. package/.agents/agents/acceptance-critic.md +24 -43
  3. package/.agents/agents/story-worker.md +20 -21
  4. package/.agents/docs/agentrc-reference.json +5 -84
  5. package/.agents/docs/configuration.md +48 -132
  6. package/.agents/docs/workflows.md +2 -2
  7. package/.agents/instructions.md +5 -8
  8. package/.agents/rules/ci-remediation.md +41 -8
  9. package/.agents/rules/gherkin-standards.md +4 -0
  10. package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
  11. package/.agents/schemas/agentrc.schema.json +16 -496
  12. package/.agents/schemas/story-deliver-terminal.schema.json +13 -3
  13. package/.agents/schemas/validation-evidence.schema.json +2 -1
  14. package/.agents/scripts/README.md +23 -13
  15. package/.agents/scripts/acceptance-eval.js +35 -169
  16. package/.agents/scripts/agents-bootstrap-github.js +27 -129
  17. package/.agents/scripts/apply-quality-bootstrap.js +4 -40
  18. package/.agents/scripts/audit-baselines.js +6 -27
  19. package/.agents/scripts/audit-labels-bootstrap.js +5 -29
  20. package/.agents/scripts/audit-to-stories.js +91 -361
  21. package/.agents/scripts/boot-sweep.js +19 -72
  22. package/.agents/scripts/bootstrap.js +74 -395
  23. package/.agents/scripts/ceremony-derive.js +10 -41
  24. package/.agents/scripts/check-arch-cycles.js +14 -64
  25. package/.agents/scripts/check-baselines.js +8 -48
  26. package/.agents/scripts/check-context-budget.js +105 -311
  27. package/.agents/scripts/check-cyclomatic.js +12 -44
  28. package/.agents/scripts/check-dead-exports.js +13 -64
  29. package/.agents/scripts/check-doc-links.js +38 -186
  30. package/.agents/scripts/check-gherkin-corpus.js +24 -127
  31. package/.agents/scripts/check-test-temp-hygiene.js +28 -169
  32. package/.agents/scripts/coverage-capture.js +34 -98
  33. package/.agents/scripts/deliver-light.js +25 -171
  34. package/.agents/scripts/deliver-recover.js +6 -42
  35. package/.agents/scripts/deliver-run.js +534 -0
  36. package/.agents/scripts/diagnose-friction.js +24 -116
  37. package/.agents/scripts/drain-pending-cleanup.js +1 -1
  38. package/.agents/scripts/evidence-gate.js +23 -85
  39. package/.agents/scripts/file-ci-gap.js +57 -49
  40. package/.agents/scripts/generate-config-docs.js +30 -170
  41. package/.agents/scripts/generate-lens-checklists.js +8 -52
  42. package/.agents/scripts/generate-skills-index.js +14 -112
  43. package/.agents/scripts/generate-workflows-doc.js +10 -70
  44. package/.agents/scripts/git-cleanup.js +2 -34
  45. package/.agents/scripts/lib/Graph.js +24 -81
  46. package/.agents/scripts/lib/ITicketingProvider.js +47 -143
  47. package/.agents/scripts/lib/Logger.js +14 -76
  48. package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
  49. package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
  50. package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
  51. package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
  52. package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
  53. package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
  54. package/.agents/scripts/lib/audit-baselines/read.js +3 -16
  55. package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
  56. package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
  57. package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
  58. package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
  59. package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
  60. package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
  61. package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
  62. package/.agents/scripts/lib/audit-suite/findings.js +12 -52
  63. package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
  64. package/.agents/scripts/lib/audit-suite/index.js +1 -15
  65. package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
  66. package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
  67. package/.agents/scripts/lib/audit-suite/runner.js +13 -43
  68. package/.agents/scripts/lib/audit-suite/selector.js +49 -349
  69. package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
  70. package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
  71. package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
  72. package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
  73. package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
  74. package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
  75. package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
  76. package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
  77. package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
  78. package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
  79. package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
  80. package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
  81. package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
  82. package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
  83. package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
  84. package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
  85. package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
  86. package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
  87. package/.agents/scripts/lib/baseline-loader.js +12 -51
  88. package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
  89. package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
  90. package/.agents/scripts/lib/baselines/components.js +10 -61
  91. package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
  92. package/.agents/scripts/lib/baselines/crap-preview-incremental.js +7 -19
  93. package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
  94. package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
  95. package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
  96. package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
  97. package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
  98. package/.agents/scripts/lib/baselines/envelope.js +13 -129
  99. package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
  100. package/.agents/scripts/lib/baselines/git-base.js +23 -142
  101. package/.agents/scripts/lib/baselines/kernel.js +11 -111
  102. package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
  103. package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
  104. package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
  105. package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
  106. package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
  107. package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
  108. package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
  109. package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
  110. package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
  111. package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
  112. package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
  113. package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
  114. package/.agents/scripts/lib/baselines/path-canon.js +19 -128
  115. package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
  116. package/.agents/scripts/lib/baselines/reader.js +14 -107
  117. package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
  118. package/.agents/scripts/lib/baselines/scope.js +11 -135
  119. package/.agents/scripts/lib/baselines/writer.js +16 -149
  120. package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
  121. package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
  122. package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
  123. package/.agents/scripts/lib/bdd-step-index.js +26 -100
  124. package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
  125. package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
  126. package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
  127. package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
  128. package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
  129. package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
  130. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
  131. package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
  132. package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
  133. package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
  134. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
  135. package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
  136. package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
  137. package/.agents/scripts/lib/bootstrap/summary.js +1 -8
  138. package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
  139. package/.agents/scripts/lib/branch-name-guard.js +4 -23
  140. package/.agents/scripts/lib/changed-files.js +39 -121
  141. package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
  142. package/.agents/scripts/lib/checks/index.js +18 -101
  143. package/.agents/scripts/lib/checks/loop-health.js +11 -53
  144. package/.agents/scripts/lib/checks/state.js +16 -91
  145. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
  146. package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
  147. package/.agents/scripts/lib/child-exec.js +39 -108
  148. package/.agents/scripts/lib/cli/standard-args.js +9 -116
  149. package/.agents/scripts/lib/cli-args.js +31 -146
  150. package/.agents/scripts/lib/cli-usage.js +5 -27
  151. package/.agents/scripts/lib/cli-utils.js +2 -12
  152. package/.agents/scripts/lib/close-validation/commands.js +13 -76
  153. package/.agents/scripts/lib/close-validation/gates.js +92 -331
  154. package/.agents/scripts/lib/close-validation/process.js +121 -151
  155. package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
  156. package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
  157. package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
  158. package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
  159. package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
  160. package/.agents/scripts/lib/close-validation/runner.js +53 -110
  161. package/.agents/scripts/lib/command-header.js +6 -28
  162. package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
  163. package/.agents/scripts/lib/config/baselines.js +3 -14
  164. package/.agents/scripts/lib/config/ci.js +8 -38
  165. package/.agents/scripts/lib/config/commands.js +1 -15
  166. package/.agents/scripts/lib/config/defaults.js +4 -33
  167. package/.agents/scripts/lib/config/delivery-routing.js +6 -34
  168. package/.agents/scripts/lib/config/explain.js +10 -83
  169. package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
  170. package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +3 -31
  171. package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
  172. package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
  173. package/.agents/scripts/lib/config/gates/index.js +2 -17
  174. package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
  175. package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
  176. package/.agents/scripts/lib/config/gates/shared.js +4 -64
  177. package/.agents/scripts/lib/config/github.js +4 -22
  178. package/.agents/scripts/lib/config/limits.js +4 -57
  179. package/.agents/scripts/lib/config/paths.js +2 -21
  180. package/.agents/scripts/lib/config/qa.js +4 -38
  181. package/.agents/scripts/lib/config/quality.js +76 -432
  182. package/.agents/scripts/lib/config/runners.js +12 -56
  183. package/.agents/scripts/lib/config/runtime.js +13 -57
  184. package/.agents/scripts/lib/config/shared.js +2 -16
  185. package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
  186. package/.agents/scripts/lib/config/temp-paths.js +40 -280
  187. package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
  188. package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
  189. package/.agents/scripts/lib/config-resolver.js +11 -52
  190. package/.agents/scripts/lib/config-schema-shared.js +1 -4
  191. package/.agents/scripts/lib/config-settings-schema-delivery.js +16 -291
  192. package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
  193. package/.agents/scripts/lib/config-settings-schema.js +37 -274
  194. package/.agents/scripts/lib/coverage-baseline.js +20 -110
  195. package/.agents/scripts/lib/coverage-capture-fullscope.js +18 -35
  196. package/.agents/scripts/lib/coverage-capture-incremental.js +15 -45
  197. package/.agents/scripts/lib/coverage-capture-usage.js +8 -25
  198. package/.agents/scripts/lib/coverage-capture.js +99 -224
  199. package/.agents/scripts/lib/coverage-utils.js +14 -79
  200. package/.agents/scripts/lib/cpu-pool.js +17 -123
  201. package/.agents/scripts/lib/crap-baseline-join.js +16 -88
  202. package/.agents/scripts/lib/crap-coordinates.js +6 -25
  203. package/.agents/scripts/lib/crap-engine.js +40 -153
  204. package/.agents/scripts/lib/crap-method-identity.js +16 -78
  205. package/.agents/scripts/lib/crap-utils.js +31 -155
  206. package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
  207. package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
  208. package/.agents/scripts/lib/dead-exports-knip.js +18 -56
  209. package/.agents/scripts/lib/dead-exports-mode.js +5 -24
  210. package/.agents/scripts/lib/degraded-mode.js +3 -26
  211. package/.agents/scripts/lib/dependency-parser.js +8 -40
  212. package/.agents/scripts/lib/dependency-version.js +13 -35
  213. package/.agents/scripts/lib/detect-package-manager.js +6 -36
  214. package/.agents/scripts/lib/doc-tiers.js +22 -124
  215. package/.agents/scripts/lib/duplicate-search.js +8 -72
  216. package/.agents/scripts/lib/env-loader.js +5 -27
  217. package/.agents/scripts/lib/error-redactor.js +6 -31
  218. package/.agents/scripts/lib/errors/index.js +2 -22
  219. package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
  220. package/.agents/scripts/lib/escomplex-kernel.js +21 -123
  221. package/.agents/scripts/lib/feedback-loop/graduator-core.js +94 -419
  222. package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
  223. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -149
  224. package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
  225. package/.agents/scripts/lib/findings/classify-finding.js +14 -69
  226. package/.agents/scripts/lib/findings/promote-finding.js +14 -112
  227. package/.agents/scripts/lib/findings/provenance-field.js +11 -52
  228. package/.agents/scripts/lib/findings/route-finding.js +37 -255
  229. package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
  230. package/.agents/scripts/lib/findings/severity.js +18 -104
  231. package/.agents/scripts/lib/format-generated-json.js +12 -44
  232. package/.agents/scripts/lib/full-suite-lock.js +160 -429
  233. package/.agents/scripts/lib/full-suite-queue.js +213 -0
  234. package/.agents/scripts/lib/gates/baseline-store.js +5 -9
  235. package/.agents/scripts/lib/gates/friction.js +1 -3
  236. package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
  237. package/.agents/scripts/lib/gh-exec.js +123 -191
  238. package/.agents/scripts/lib/git/cached-fetch.js +9 -52
  239. package/.agents/scripts/lib/git/sync-from-base.js +15 -107
  240. package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
  241. package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
  242. package/.agents/scripts/lib/git-utils.js +37 -161
  243. package/.agents/scripts/lib/github/framework-repo.js +8 -71
  244. package/.agents/scripts/lib/github-url.js +2 -17
  245. package/.agents/scripts/lib/import-graph.js +11 -38
  246. package/.agents/scripts/lib/install-cmd-parser.js +4 -13
  247. package/.agents/scripts/lib/json-utils.js +3 -18
  248. package/.agents/scripts/lib/label-constants.js +16 -111
  249. package/.agents/scripts/lib/label-taxonomy.js +4 -30
  250. package/.agents/scripts/lib/maintainability-engine.js +12 -80
  251. package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
  252. package/.agents/scripts/lib/maintainability-utils.js +16 -92
  253. package/.agents/scripts/lib/mandrel-catalog.js +12 -70
  254. package/.agents/scripts/lib/notifications/notifier.js +13 -38
  255. package/.agents/scripts/lib/npm-scripts.js +4 -23
  256. package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
  257. package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
  258. package/.agents/scripts/lib/observability/signal-validator.js +5 -37
  259. package/.agents/scripts/lib/observability/signals-writer.js +11 -121
  260. package/.agents/scripts/lib/observability/source-classifier.js +22 -203
  261. package/.agents/scripts/lib/observability/terse-result.js +14 -47
  262. package/.agents/scripts/lib/onboard/init-tail.js +13 -74
  263. package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
  264. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
  265. package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
  266. package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
  267. package/.agents/scripts/lib/orchestration/ceremony-routing.js +28 -156
  268. package/.agents/scripts/lib/orchestration/change-set.js +7 -36
  269. package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
  270. package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
  271. package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
  272. package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
  273. package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
  274. package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
  275. package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
  276. package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
  277. package/.agents/scripts/lib/orchestration/check-state.js +92 -0
  278. package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
  279. package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +121 -157
  280. package/.agents/scripts/lib/orchestration/code-review.js +24 -128
  281. package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
  282. package/.agents/scripts/lib/orchestration/complexity-gate.js +118 -462
  283. package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
  284. package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
  285. package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
  286. package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
  287. package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
  288. package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
  289. package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
  290. package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
  291. package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
  292. package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
  293. package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
  294. package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
  295. package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
  296. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
  297. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
  298. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
  299. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
  300. package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
  301. package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
  302. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
  303. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
  304. package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
  305. package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
  306. package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
  307. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
  308. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
  309. package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
  310. package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
  311. package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
  312. package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
  313. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
  314. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
  315. package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
  316. package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
  317. package/.agents/scripts/lib/orchestration/light-suitability.js +37 -307
  318. package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
  319. package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
  320. package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
  321. package/.agents/scripts/lib/orchestration/plan-context.js +55 -318
  322. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
  323. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
  324. package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
  325. package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
  326. package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
  327. package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
  328. package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +16 -78
  329. package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
  330. package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
  331. package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
  332. package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
  333. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
  334. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
  335. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +71 -289
  336. package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
  337. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +96 -362
  338. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +9 -39
  339. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +60 -186
  340. package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
  341. package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
  342. package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
  343. package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
  344. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
  345. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
  346. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
  347. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
  348. package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
  349. package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
  350. package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
  351. package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
  352. package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
  353. package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
  354. package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
  355. package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
  356. package/.agents/scripts/lib/orchestration/review-depth.js +12 -91
  357. package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
  358. package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
  359. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
  360. package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
  361. package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
  362. package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
  363. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
  364. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
  365. package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
  366. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
  367. package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
  368. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
  369. package/.agents/scripts/lib/orchestration/run-epilogue.js +245 -326
  370. package/.agents/scripts/lib/orchestration/run-scoped-config.js +55 -159
  371. package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
  372. package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
  373. package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
  374. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
  375. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +20 -82
  376. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
  377. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
  378. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
  379. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
  380. package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +96 -0
  381. package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
  382. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
  383. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
  384. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
  385. package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
  386. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
  387. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
  388. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
  389. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
  390. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
  391. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
  392. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
  393. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +180 -273
  394. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
  395. package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
  396. package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
  397. package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
  398. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
  399. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
  400. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
  401. package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
  402. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -200
  403. package/.agents/scripts/lib/orchestration/story-follow-ups.js +167 -252
  404. package/.agents/scripts/lib/orchestration/story-init-envelope.js +52 -0
  405. package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
  406. package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
  407. package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -135
  408. package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
  409. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
  410. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
  411. package/.agents/scripts/lib/orchestration/ticket-validator.js +63 -344
  412. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
  413. package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -261
  414. package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
  415. package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
  416. package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
  417. package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
  418. package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
  419. package/.agents/scripts/lib/path-security.js +3 -6
  420. package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
  421. package/.agents/scripts/lib/preflight-runner.js +13 -69
  422. package/.agents/scripts/lib/process-group.js +143 -0
  423. package/.agents/scripts/lib/project-root.js +2 -8
  424. package/.agents/scripts/lib/provider-factory.js +2 -25
  425. package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
  426. package/.agents/scripts/lib/qa/qa-session.js +15 -69
  427. package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
  428. package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
  429. package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
  430. package/.agents/scripts/lib/reserved-test-ids.js +9 -47
  431. package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
  432. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
  433. package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
  434. package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
  435. package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
  436. package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
  437. package/.agents/scripts/lib/signals/detectors/common.js +12 -38
  438. package/.agents/scripts/lib/signals/index.js +2 -19
  439. package/.agents/scripts/lib/signals/schema.js +14 -109
  440. package/.agents/scripts/lib/signals/write.js +2 -11
  441. package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
  442. package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
  443. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
  444. package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
  445. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
  446. package/.agents/scripts/lib/single-story-sweep.js +14 -97
  447. package/.agents/scripts/lib/skills/parse-skill.js +13 -59
  448. package/.agents/scripts/lib/skills/skills-index.js +8 -29
  449. package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
  450. package/.agents/scripts/lib/source-extensions.js +11 -42
  451. package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
  452. package/.agents/scripts/lib/stdio-flush.js +9 -36
  453. package/.agents/scripts/lib/story-adjacency.js +8 -40
  454. package/.agents/scripts/lib/story-body/body-format-lints.js +51 -66
  455. package/.agents/scripts/lib/story-body/footer-block.js +11 -44
  456. package/.agents/scripts/lib/story-body/story-body.js +123 -344
  457. package/.agents/scripts/lib/temp-retention.js +42 -143
  458. package/.agents/scripts/lib/templates/decomposer-prompts.js +18 -80
  459. package/.agents/scripts/lib/test-env.js +12 -65
  460. package/.agents/scripts/lib/test-run-credit.js +10 -65
  461. package/.agents/scripts/lib/test-runner-contract.js +19 -74
  462. package/.agents/scripts/lib/test-temp.js +38 -184
  463. package/.agents/scripts/lib/test-tiers.js +12 -96
  464. package/.agents/scripts/lib/ticket-body-sections.js +21 -96
  465. package/.agents/scripts/lib/transpile.js +15 -74
  466. package/.agents/scripts/lib/util/concurrent-map.js +6 -25
  467. package/.agents/scripts/lib/util/parse-id-list.js +8 -34
  468. package/.agents/scripts/lib/util/poll-loop.js +8 -28
  469. package/.agents/scripts/lib/util/with-timeout.js +2 -11
  470. package/.agents/scripts/lib/validation-evidence.js +21 -96
  471. package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
  472. package/.agents/scripts/lib/wave-runner/live-probe.js +67 -209
  473. package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
  474. package/.agents/scripts/lib/workers/crap-worker.js +11 -64
  475. package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
  476. package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
  477. package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
  478. package/.agents/scripts/lib/workflow-closure.js +22 -105
  479. package/.agents/scripts/lib/workspace-provisioner.js +16 -54
  480. package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
  481. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
  482. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
  483. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
  484. package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
  485. package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
  486. package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
  487. package/.agents/scripts/lib/worktree-manager.js +15 -40
  488. package/.agents/scripts/lint-issue-body.js +12 -68
  489. package/.agents/scripts/mandrel-update-preflight.js +10 -70
  490. package/.agents/scripts/merge-baseline.js +30 -105
  491. package/.agents/scripts/nav-registry-diff.js +22 -108
  492. package/.agents/scripts/notify.js +12 -69
  493. package/.agents/scripts/plan-context.js +97 -92
  494. package/.agents/scripts/plan-critics.js +12 -66
  495. package/.agents/scripts/plan-persist.js +71 -137
  496. package/.agents/scripts/plan-run-epilogue.js +20 -43
  497. package/.agents/scripts/pr-watch-with-update.js +79 -263
  498. package/.agents/scripts/providers/github/auth.js +3 -8
  499. package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
  500. package/.agents/scripts/providers/github/board-add.js +5 -21
  501. package/.agents/scripts/providers/github/branch-protection.js +11 -43
  502. package/.agents/scripts/providers/github/cache.js +2 -14
  503. package/.agents/scripts/providers/github/comments.js +7 -40
  504. package/.agents/scripts/providers/github/compose.js +3 -19
  505. package/.agents/scripts/providers/github/errors.js +22 -125
  506. package/.agents/scripts/providers/github/issues.js +31 -123
  507. package/.agents/scripts/providers/github/labels.js +24 -124
  508. package/.agents/scripts/providers/github/mappers.js +5 -27
  509. package/.agents/scripts/providers/github/merge-methods.js +3 -22
  510. package/.agents/scripts/providers/github/project-board.js +2 -17
  511. package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
  512. package/.agents/scripts/providers/github/request-helpers.js +5 -32
  513. package/.agents/scripts/providers/github/search-budget.js +9 -39
  514. package/.agents/scripts/providers/github/search-query.js +5 -26
  515. package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
  516. package/.agents/scripts/providers/github/sub-issues.js +7 -36
  517. package/.agents/scripts/providers/github/tickets.js +32 -134
  518. package/.agents/scripts/providers/github.js +18 -59
  519. package/.agents/scripts/prune-plan-run-labels.js +12 -46
  520. package/.agents/scripts/quality-preview.js +35 -220
  521. package/.agents/scripts/resolve-doc-tiers.js +3 -26
  522. package/.agents/scripts/resolve-stories.js +16 -67
  523. package/.agents/scripts/resync-status-column.js +6 -25
  524. package/.agents/scripts/run-tests.js +29 -104
  525. package/.agents/scripts/single-story-close.js +23 -135
  526. package/.agents/scripts/single-story-confirm-merge.js +32 -139
  527. package/.agents/scripts/single-story-init.js +47 -259
  528. package/.agents/scripts/stories-wave-tick.js +179 -415
  529. package/.agents/scripts/sync-agentrc.js +3 -21
  530. package/.agents/scripts/sync-claude-agents.js +9 -55
  531. package/.agents/scripts/sync-claude-commands.js +20 -110
  532. package/.agents/scripts/test-wrapper.js +6 -43
  533. package/.agents/scripts/update-coverage-baseline.js +5 -22
  534. package/.agents/scripts/update-crap-baseline.js +7 -30
  535. package/.agents/scripts/update-duplication-baseline.js +16 -92
  536. package/.agents/scripts/update-maintainability-baseline.js +8 -62
  537. package/.agents/scripts/update-ticket-state.js +1 -7
  538. package/.agents/scripts/validate-skills.js +6 -26
  539. package/.agents/skills/core/gates-and-baselines/reference.md +0 -1
  540. package/.agents/skills/skills.index.json +2 -2
  541. package/.agents/skills/stack/qa/playwright/SKILL.md +26 -0
  542. package/.agents/templates/agent-protocol.md +2 -2
  543. package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
  544. package/.agents/workflows/audit-accessibility.md +4 -7
  545. package/.agents/workflows/audit-adrs.md +3 -6
  546. package/.agents/workflows/audit-architecture.md +3 -11
  547. package/.agents/workflows/audit-baselines.md +6 -9
  548. package/.agents/workflows/audit-clean-code.md +8 -12
  549. package/.agents/workflows/audit-data-model.md +3 -7
  550. package/.agents/workflows/audit-dependencies.md +4 -7
  551. package/.agents/workflows/audit-devops.md +4 -8
  552. package/.agents/workflows/audit-documentation.md +1 -4
  553. package/.agents/workflows/audit-mobile.md +4 -7
  554. package/.agents/workflows/audit-navigability.md +3 -6
  555. package/.agents/workflows/audit-performance.md +2 -4
  556. package/.agents/workflows/audit-privacy.md +4 -7
  557. package/.agents/workflows/audit-quality.md +4 -7
  558. package/.agents/workflows/audit-security.md +4 -7
  559. package/.agents/workflows/audit-seo.md +4 -7
  560. package/.agents/workflows/audit-sre.md +4 -7
  561. package/.agents/workflows/audit-to-stories.md +17 -30
  562. package/.agents/workflows/audit-ux-ui.md +4 -7
  563. package/.agents/workflows/helpers/acceptance-self-eval.md +84 -157
  564. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  565. package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
  566. package/.agents/workflows/helpers/code-review.md +4 -2
  567. package/.agents/workflows/helpers/deliver-digest.md +37 -28
  568. package/.agents/workflows/helpers/deliver-light.md +92 -101
  569. package/.agents/workflows/helpers/deliver-reference.md +162 -220
  570. package/.agents/workflows/helpers/deliver-story-reference.md +197 -607
  571. package/.agents/workflows/helpers/deliver-story.md +17 -18
  572. package/.agents/workflows/helpers/plan-reference.md +125 -167
  573. package/.agents/workflows/helpers/qa-core.md +12 -0
  574. package/.agents/workflows/mandrel-deliver.md +47 -31
  575. package/.agents/workflows/mandrel-plan.md +22 -21
  576. package/.agents/workflows/mandrel-update.md +36 -21
  577. package/.agents/workflows/memory-consolidate.md +1 -1
  578. package/.agents/workflows/qa-assist.md +27 -71
  579. package/.agents/workflows/qa-explore.md +19 -59
  580. package/.agents/workflows/qa-run.md +11 -33
  581. package/README.md +1 -1
  582. package/bin/mandrel.js +5 -46
  583. package/bin/postinstall.js +18 -107
  584. package/docs/CHANGELOG.md +60 -0
  585. package/lib/cli/doctor.js +11 -71
  586. package/lib/cli/init.js +26 -165
  587. package/lib/cli/migrate.js +5 -64
  588. package/lib/cli/registry.js +84 -467
  589. package/lib/cli/sync-agents.js +4 -64
  590. package/lib/cli/sync-commands.js +11 -64
  591. package/lib/cli/sync.js +34 -213
  592. package/lib/cli/uninstall.js +40 -219
  593. package/lib/cli/update.js +326 -523
  594. package/lib/cli/version-check.js +8 -72
  595. package/lib/cli/version-helpers.js +14 -87
  596. package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
  597. package/lib/migrations/index.js +17 -92
  598. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
  599. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
  600. package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
  601. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
  602. package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
  603. package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
  604. package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
  605. package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
  606. package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +21 -0
  607. package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
  608. package/package.json +17 -14
  609. package/.agents/docs/SDLC.md +0 -590
  610. package/.agents/docs/quality-gates.md +0 -1179
  611. package/.agents/rules/known-tooling-behavior.md +0 -150
  612. package/.agents/rules/orchestration-error-handling.md +0 -61
  613. package/.agents/rules/test-seams.md +0 -59
  614. package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
  615. package/.agents/schemas/baselines/lint.schema.json +0 -47
  616. package/.agents/schemas/model-attribution.schema.json +0 -53
  617. package/.agents/scripts/check-action-pinning.js +0 -260
  618. package/.agents/scripts/check-audit-attribution.js +0 -302
  619. package/.agents/scripts/check-baseline-drift.js +0 -211
  620. package/.agents/scripts/check-baseline-scope.js +0 -362
  621. package/.agents/scripts/check-generated-validator.js +0 -202
  622. package/.agents/scripts/check-knip-entries.js +0 -159
  623. package/.agents/scripts/check-lifecycle-lint.js +0 -294
  624. package/.agents/scripts/check-pinned-override-notes.js +0 -102
  625. package/.agents/scripts/check-schema-references.js +0 -366
  626. package/.agents/scripts/check-test-portability.js +0 -512
  627. package/.agents/scripts/check-workflow-citations.js +0 -332
  628. package/.agents/scripts/check-workflow-cli-lint.js +0 -299
  629. package/.agents/scripts/check-workflow-timeouts.js +0 -291
  630. package/.agents/scripts/install-matrix-assert.js +0 -326
  631. package/.agents/scripts/lib/audit-advisories.js +0 -195
  632. package/.agents/scripts/lib/audit-attribution.js +0 -134
  633. package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
  634. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
  635. package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
  636. package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
  637. package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
  638. package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
  639. package/.agents/scripts/lib/c8-cli-path.js +0 -21
  640. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
  641. package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
  642. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
  643. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
  644. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
  645. package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
  646. package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
  647. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
  648. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
  649. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
  650. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
  651. package/.agents/scripts/lib/fs-walk.js +0 -52
  652. package/.agents/scripts/lib/knip-config-resolver.js +0 -181
  653. package/.agents/scripts/lib/knip-entry-sync.js +0 -452
  654. package/.agents/scripts/lib/orchestration/model-attribution.js +0 -418
  655. package/.agents/scripts/lib/orchestration/story-plan-state.js +0 -33
  656. package/.agents/scripts/lib/orchestration/structured-comment-parser.js +0 -67
  657. package/.agents/scripts/lib/pinned-override-notes.js +0 -88
  658. package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
  659. package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
  660. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
  661. package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
  662. package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
  663. package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
  664. package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
  665. package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
  666. package/.agents/scripts/lib/test-isolate/runner.js +0 -483
  667. package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
  668. package/.agents/scripts/lib/test-profile/render-report.js +0 -45
  669. package/.agents/scripts/lint-label-vocabulary.js +0 -214
  670. package/.agents/scripts/post-structured-comment.js +0 -127
  671. package/.agents/scripts/provision-git-hooks.js +0 -85
  672. package/.agents/scripts/prune-baseline-orphans.js +0 -181
  673. package/.agents/scripts/run-coverage.js +0 -197
  674. package/.agents/scripts/run-lint.js +0 -133
  675. package/.agents/scripts/run-test-profile.js +0 -129
  676. package/.agents/scripts/run-verify.js +0 -118
  677. package/.agents/scripts/test-isolate.js +0 -55
  678. package/.agents/scripts/update-dead-exports-baseline.js +0 -321
@@ -1,284 +0,0 @@
1
- // .agents/scripts/lib/dynamic-workflow/audit-orchestrator.js
2
- /**
3
- * Reusable audit-lens orchestration engine (Epic #3597, Story #3609).
4
- *
5
- * Every audit lens that runs as a Claude Code **dynamic workflow**
6
- * (https://code.claude.com/docs/en/workflows) shares the same three-phase
7
- * fan-out:
8
- *
9
- * 1. **analyze** — one read-only sub-agent per analysis dimension, run in
10
- * parallel, each producing raw findings for its dimension only.
11
- * 2. **adversarial cross-check** — an independent read-only reviewer
12
- * re-verifies each dimension's findings, dropping false positives.
13
- * 3. **synthesize** — a single agent assembles the cross-checked findings
14
- * into the lens's report contract and writes the artifact.
15
- *
16
- * Before this engine existed, each lens (starting with `audit-clean-code`)
17
- * inlined a private copy of this loop. `runAuditOrchestration` extracts it
18
- * once so a lens workflow only has to declare *what* is lens-specific —
19
- * its dimension list, its prompt builders, its read-only tool allowlist, and
20
- * its report-contract self-check — and delegate the fan-out plumbing here.
21
- *
22
- * ## Read-only guarantee
23
- *
24
- * Analysis and cross-check agents receive only the caller-supplied
25
- * `readOnlyTools` allowlist (read/search tools — no write/edit/shell). The
26
- * single write in the run is the report artifact, performed by the synthesis
27
- * agent, which is granted the read-only allowlist plus `Write`.
28
- *
29
- * ## Partial-failure posture
30
- *
31
- * The per-dimension fan-out is settled, not all-or-nothing (Story #4783). One
32
- * rejected dimension used to discard every sibling's completed work; the
33
- * engine now partitions the settled results, flows the fulfilled dimensions on
34
- * to the next phase, and records the rejected ones as an explicit
35
- * degraded-coverage note in the report's Executive Summary. This mirrors the
36
- * posture `close-validation/runner.js` already takes with per-gate errors:
37
- * capture the failure into the result rather than rejecting the whole run.
38
- * Only a *total* loss — every dimension rejected — throws, because there is
39
- * then nothing to synthesise.
40
- *
41
- * ## Report-contract self-check
42
- *
43
- * After synthesis the engine calls the caller-supplied `assertReportContract`
44
- * on the synthesis output and throws when the report is non-conformant, so a
45
- * lens can never silently emit a malformed report. The thrown message is
46
- * derived from the caller's `formatContractError` (when supplied) so each lens
47
- * can phrase the failure in its own terms.
48
- *
49
- * This module is dependency-free and lens-agnostic: it imports nothing from
50
- * any specific lens. It is exercised in isolation by
51
- * `tests/dynamic-workflow-audit-orchestrator.test.js` with a stub `agent` /
52
- * `phase` so the fan-out wiring is unit-testable without a live Claude Code
53
- * runtime.
54
- *
55
- * @module dynamic-workflow/audit-orchestrator
56
- */
57
-
58
- import { withDegradedCoverageNote } from './degraded-coverage.js';
59
-
60
- /**
61
- * A dimension that did not complete, as recorded by the settled fan-out.
62
- *
63
- * @typedef {import('./degraded-coverage.js').DimensionFailure} DimensionFailure
64
- */
65
-
66
- /**
67
- * The live dynamic-workflow runtime context the host passes to a saved
68
- * `.claude/workflows/*.workflow.js` entry point. Re-exported as a typedef so
69
- * every lens workflow references one canonical shape rather than re-declaring
70
- * it (and drifting from) the runtime contract.
71
- *
72
- * `agent` spawns a sub-agent and resolves to its result envelope (the textual
73
- * output is on `.output`). `phase` groups one or more agent calls under a
74
- * named phase surfaced in the `/workflows` view; it resolves to **whatever its
75
- * callback resolves to**, so it is generic over the callback's return type.
76
- *
77
- * @typedef {object} AgentResult
78
- * @property {string} output - The sub-agent's textual output.
79
- *
80
- * @typedef {object} WorkflowContext
81
- * @property {(opts: { prompt: string, allowedTools?: string[], model?: string }) => Promise<AgentResult>} agent
82
- * Spawn a sub-agent with the given prompt and (optional) tool allowlist /
83
- * model. Resolves to the agent's result envelope.
84
- * @property {<T>(name: string, fn: () => Promise<T>) => Promise<T>} phase
85
- * Group agent calls into a named phase (per-phase agent count, token total,
86
- * and elapsed time surface in `/workflows`). Resolves to the callback's
87
- * own resolved value.
88
- * @property {object} inputs - Caller-supplied workflow inputs.
89
- */
90
-
91
- /**
92
- * @template TReport
93
- * @typedef {object} AuditOrchestrationSpec
94
- * @property {WorkflowContext} ctx
95
- * The live dynamic-workflow runtime context (`agent` + `phase`).
96
- * @property {readonly string[]} dimensions
97
- * The independent analysis dimensions to fan out, one sub-agent each.
98
- * @property {readonly string[]} readOnlyTools
99
- * The read-only tool allowlist granted to analysis and cross-check agents.
100
- * The synthesis agent additionally receives `Write`.
101
- * @property {(dimension: string) => string} buildDimensionPrompt
102
- * Compose the analysis prompt for one dimension (lens-specific).
103
- * @property {(dimension: string, findings: string) => string} buildCrossCheckPrompt
104
- * Compose the adversarial cross-check prompt for one dimension's findings.
105
- * @property {(crossCheckedBlocks: string[], degraded: DimensionFailure[]) => string} buildSynthesisPrompt
106
- * Compose the synthesis prompt that assembles the report and writes it. The
107
- * second argument lists the dimensions that did not complete (empty on a
108
- * full-coverage run); lenses may ignore it — the engine annotates the report
109
- * with the degraded-coverage note either way.
110
- * @property {(report: string) => { conformant: boolean, missingSections: string[], hasTitle: boolean }} assertReportContract
111
- * Self-check the synthesised report against the lens's report contract.
112
- * @property {(check: { conformant: boolean, missingSections: string[], hasTitle: boolean }) => string} [formatContractError]
113
- * Optional: phrase the non-conformance error in the lens's own terms.
114
- * Defaults to a generic message naming the missing title / sections.
115
- * @property {(report: string) => TReport} [buildResult]
116
- * Optional: derive the engine's return value from the synthesised report.
117
- * Defaults to returning `{ report }`.
118
- */
119
-
120
- /**
121
- * The default phase names, exported so lenses and tests reference the exact
122
- * strings rather than hard-coding them.
123
- */
124
- export const ORCHESTRATION_PHASES = Object.freeze({
125
- ANALYZE: 'analyze-dimensions',
126
- CROSS_CHECK: 'adversarial-cross-check',
127
- SYNTHESIZE: 'synthesize-report',
128
- });
129
-
130
- /** The single mutating tool the synthesis agent is granted. */
131
- export const SYNTHESIS_WRITE_TOOL = 'Write';
132
-
133
- /**
134
- * Default phrasing for a report-contract self-check failure. Lenses can
135
- * override via `spec.formatContractError`.
136
- *
137
- * @param {{ conformant: boolean, missingSections: string[], hasTitle: boolean }} check
138
- * @returns {string}
139
- */
140
- export function defaultContractError(check) {
141
- const titlePart = check.hasTitle ? '' : 'title; ';
142
- const sections = Array.isArray(check.missingSections)
143
- ? check.missingSections.join(', ')
144
- : '';
145
- return `report failed contract check: missing ${titlePart}sections=[${sections}]`;
146
- }
147
-
148
- /**
149
- * Reduce a rejection reason to a single-line message.
150
- *
151
- * @param {unknown} reason
152
- * @returns {string}
153
- */
154
- function describeRejection(reason) {
155
- if (reason instanceof Error) return reason.message;
156
- return String(reason ?? 'unknown error');
157
- }
158
-
159
- /**
160
- * Partition settled fan-out results into the values that completed and the
161
- * dimensions that did not. `dimensions[i]` names the dimension behind
162
- * `settled[i]`, so a rejection is always attributable.
163
- *
164
- * @template T
165
- * @param {readonly string[]} dimensions
166
- * @param {readonly PromiseSettledResult<T>[]} settled
167
- * @param {string} phaseName Phase recorded on each failure.
168
- * @returns {{ fulfilled: T[], failures: DimensionFailure[] }}
169
- */
170
- function partitionSettled(dimensions, settled, phaseName) {
171
- const fulfilled = [];
172
- const failures = [];
173
- settled.forEach((result, index) => {
174
- if (result.status === 'fulfilled') {
175
- fulfilled.push(result.value);
176
- return;
177
- }
178
- failures.push({
179
- dimension: dimensions[index],
180
- phase: phaseName,
181
- reason: describeRejection(result.reason),
182
- });
183
- });
184
- return { fulfilled, failures };
185
- }
186
-
187
- /**
188
- * Run the shared three-phase audit-lens orchestration: parallel per-dimension
189
- * analysis → adversarial cross-check → synthesis + report-contract self-check.
190
- *
191
- * The caller supplies everything lens-specific (dimensions, prompt builders,
192
- * tool allowlist, contract assertion); this engine owns the fan-out plumbing
193
- * and the read-only / single-write tool discipline.
194
- *
195
- * @template TReport
196
- * @param {AuditOrchestrationSpec<TReport>} spec
197
- * @returns {Promise<TReport>}
198
- */
199
- export async function runAuditOrchestration(spec) {
200
- const {
201
- ctx,
202
- dimensions,
203
- readOnlyTools,
204
- buildDimensionPrompt,
205
- buildCrossCheckPrompt,
206
- buildSynthesisPrompt,
207
- assertReportContract,
208
- formatContractError = defaultContractError,
209
- buildResult = (report) => /** @type {TReport} */ ({ report }),
210
- } = spec;
211
-
212
- const { agent, phase } = ctx;
213
-
214
- // Phase 1 — parallel per-dimension analysis (read-only agents). Settled, not
215
- // all-or-nothing: one dimension's rejection must not discard its siblings.
216
- const analyzed = await phase(ORCHESTRATION_PHASES.ANALYZE, async () =>
217
- Promise.allSettled(
218
- dimensions.map(async (dimension) => {
219
- const { output } = await agent({
220
- prompt: buildDimensionPrompt(dimension),
221
- allowedTools: [...readOnlyTools],
222
- });
223
- return { dimension, findings: output };
224
- }),
225
- ),
226
- );
227
- const { fulfilled: rawFindings, failures: analyzeFailures } =
228
- partitionSettled(dimensions, analyzed, 'analyze');
229
-
230
- // Phase 2 — adversarial cross-check: an independent agent re-verifies each
231
- // surviving dimension's findings and filters false positives before
232
- // inclusion. Settled for the same reason as phase 1.
233
- const checkedDimensions = rawFindings.map((entry) => entry.dimension);
234
- const checked = await phase(ORCHESTRATION_PHASES.CROSS_CHECK, async () =>
235
- Promise.allSettled(
236
- rawFindings.map(async ({ dimension, findings }) => {
237
- const { output } = await agent({
238
- prompt: buildCrossCheckPrompt(dimension, findings),
239
- allowedTools: [...readOnlyTools],
240
- });
241
- return output;
242
- }),
243
- ),
244
- );
245
- const { fulfilled: crossChecked, failures: crossCheckFailures } =
246
- partitionSettled(checkedDimensions, checked, 'cross-check');
247
-
248
- const degraded = [...analyzeFailures, ...crossCheckFailures];
249
- if (dimensions.length > 0 && crossChecked.length === 0) {
250
- // Nothing survived — there is no partial report to salvage.
251
- throw new Error(
252
- `every audit dimension failed: ${degraded
253
- .map((f) => `${f.dimension} (${f.phase}: ${f.reason})`)
254
- .join('; ')}`,
255
- );
256
- }
257
-
258
- // Phase 3 — synthesis: assemble the report contract and write the artifact.
259
- const { output: synthesised } = await phase(
260
- ORCHESTRATION_PHASES.SYNTHESIZE,
261
- async () =>
262
- agent({
263
- prompt: buildSynthesisPrompt(crossChecked, degraded),
264
- // Synthesis is the one stage permitted to write the report artifact.
265
- allowedTools: [...readOnlyTools, SYNTHESIS_WRITE_TOOL],
266
- }),
267
- );
268
-
269
- // The coverage gap is annotated by the engine, never left to the synthesis
270
- // agent's discretion.
271
- const report = withDegradedCoverageNote(
272
- synthesised,
273
- degraded,
274
- dimensions.length,
275
- );
276
-
277
- // Self-verify report-contract conformance before returning.
278
- const check = assertReportContract(report);
279
- if (!check.conformant) {
280
- throw new Error(formatContractError(check));
281
- }
282
-
283
- return buildResult(report);
284
- }
@@ -1,80 +0,0 @@
1
- // .agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js
2
- import { assertSectionsContract } from './report-contract-core.js';
3
-
4
- /**
5
- * The `audit-clean-code` report contract (Story #3278).
6
- *
7
- * This is the **single source of truth** for the report shape that BOTH the
8
- * sequential lens (`.agents/workflows/audit-clean-code.md` Step 3) and the
9
- * orchestrated dynamic-workflow path
10
- * (`.claude/workflows/audit-clean-code.workflow.js`) MUST emit to
11
- * `{{auditOutputDir}}/audit-clean-code-results.md`. Keeping it here lets the
12
- * contract-tier test assert report conformance against one definition rather
13
- * than re-deriving headings from prose in two places.
14
- *
15
- * This module documents the **existing** report shape; it does not introduce
16
- * a new one. Changing the report contract is a separate, deliberate decision —
17
- * not a side effect of the dual-path orchestration work.
18
- *
19
- * @module dynamic-workflow/clean-code-report-contract
20
- */
21
-
22
- /** The artifact filename the lens writes under `auditOutputDir`. */
23
- export const REPORT_ARTIFACT_BASENAME = 'audit-clean-code-results.md';
24
-
25
- /**
26
- * The required top-level (`##`) section headings, in document order, that the
27
- * lens markdown's Step 3 template defines. A conformant report MUST contain
28
- * each of these headings; the orchestrated path assembles its sub-agent
29
- * findings into exactly this skeleton.
30
- */
31
- export const REQUIRED_SECTIONS = Object.freeze([
32
- 'Executive Summary',
33
- 'Detailed Findings',
34
- 'Dead Code Inventory',
35
- 'Technical Debt Backlog',
36
- ]);
37
-
38
- /** The H1 title the report opens with. */
39
- export const REPORT_TITLE = 'Clean Code Audit Report';
40
-
41
- /**
42
- * The required field labels inside each `### <finding>` block under
43
- * `## Detailed Findings`. Mirrors the strict per-finding structure in the
44
- * lens template.
45
- */
46
- export const FINDING_FIELDS = Object.freeze([
47
- 'Dimension',
48
- 'Impact',
49
- 'Current State',
50
- 'Recommendation & Rationale',
51
- 'Agent Prompt',
52
- ]);
53
-
54
- /**
55
- * The Dead Code Inventory table column headers, in order.
56
- */
57
- export const DEAD_CODE_COLUMNS = Object.freeze([
58
- 'File',
59
- 'Symbol / Block',
60
- 'Type',
61
- 'Estimated LOC',
62
- ]);
63
-
64
- /**
65
- * Assert that a rendered markdown report conforms to the contract: it has the
66
- * H1 title and every required `##` section heading. Returns a structured
67
- * result rather than throwing, so callers (tests, the orchestrated path's
68
- * self-check) can report precisely which sections are missing.
69
- *
70
- * Pure function — string analysis only.
71
- *
72
- * @param {string} markdown - The rendered report body.
73
- * @returns {{ conformant: boolean, missingSections: string[], hasTitle: boolean }}
74
- */
75
- export function assertReportContract(markdown) {
76
- return assertSectionsContract(markdown, {
77
- title: REPORT_TITLE,
78
- requiredSections: REQUIRED_SECTIONS,
79
- });
80
- }
@@ -1,81 +0,0 @@
1
- // .agents/scripts/lib/dynamic-workflow/degraded-coverage.js
2
- /**
3
- * Degraded-coverage annotation for audit-lens reports (Story #4783).
4
- *
5
- * An audit lens fans out one sub-agent per analysis dimension. When one of
6
- * those dimensions rejects — a sub-agent that ran out of context, a
7
- * measurement command that failed, a transient runtime error — the run used to
8
- * discard every sibling dimension's completed work along with it.
9
- *
10
- * The engine now partitions instead: the fulfilled dimensions flow on to
11
- * synthesis, and the rejected ones are recorded here as an explicit note in
12
- * the report's Executive Summary. A lens that covers four of five dimensions
13
- * *and says which one is missing* is strictly more useful than one that yields
14
- * nothing — but only if the gap is visible. An unannotated partial report is
15
- * worse than no report, because it reads as complete coverage.
16
- *
17
- * The annotation is applied by the engine, not requested of the synthesis
18
- * agent: a coverage disclaimer that depends on an LLM remembering to write it
19
- * is not a disclaimer.
20
- *
21
- * @module dynamic-workflow/degraded-coverage
22
- */
23
-
24
- /**
25
- * A dimension that did not complete.
26
- *
27
- * @typedef {object} DimensionFailure
28
- * @property {string} dimension The analysis dimension that failed.
29
- * @property {string} phase The phase it failed in (`analyze` / `cross-check`).
30
- * @property {string} reason The rejection's message.
31
- */
32
-
33
- /** Matches the Executive Summary heading at any heading level. */
34
- const EXECUTIVE_SUMMARY_HEADING = /^#{1,6}\s+Executive Summary\b/i;
35
-
36
- /**
37
- * Render the degraded-coverage note. Names every failed dimension, the phase
38
- * it failed in, and the reason, so a reader can tell coverage loss apart from
39
- * an absence of findings.
40
- *
41
- * @param {readonly DimensionFailure[]} failures
42
- * @param {number} totalDimensions Dimensions the run set out to cover.
43
- * @returns {string} A markdown blockquote.
44
- */
45
- function formatDegradedCoverageNote(failures, totalDimensions) {
46
- const detail = failures
47
- .map((f) => `**${f.dimension}** (${f.phase}: ${f.reason})`)
48
- .join('; ');
49
- const noun = failures.length === 1 ? 'dimension' : 'dimensions';
50
- return [
51
- `> ⚠️ **Degraded coverage** — ${failures.length} of ${totalDimensions} analysis ${noun} did not complete`,
52
- `> and ${failures.length === 1 ? 'is' : 'are'} unrepresented in this report: ${detail}.`,
53
- '> Findings for the remaining dimensions are complete; the gap above is not evidence of their absence.',
54
- ].join('\n');
55
- }
56
-
57
- /**
58
- * Annotate a synthesised report with the degraded-coverage note, inserted
59
- * directly beneath the `## Executive Summary` heading (every lens report
60
- * contract requires that section). A report without the heading is prefixed
61
- * instead, so the note can never be silently dropped.
62
- *
63
- * Returns the report unchanged when nothing failed — a full-coverage run must
64
- * not carry a coverage caveat.
65
- *
66
- * @param {string} report
67
- * @param {readonly DimensionFailure[]} failures
68
- * @param {number} totalDimensions
69
- * @returns {string}
70
- */
71
- export function withDegradedCoverageNote(report, failures, totalDimensions) {
72
- if (!Array.isArray(failures) || failures.length === 0) return report;
73
- const note = formatDegradedCoverageNote(failures, totalDimensions);
74
- const lines = String(report).split('\n');
75
- const headingIndex = lines.findIndex((line) =>
76
- EXECUTIVE_SUMMARY_HEADING.test(line.trim()),
77
- );
78
- if (headingIndex === -1) return `${note}\n\n${report}`;
79
- lines.splice(headingIndex + 1, 0, '', note);
80
- return lines.join('\n');
81
- }
@@ -1,87 +0,0 @@
1
- // .agents/scripts/lib/dynamic-workflow/documentation-report-contract.js
2
- import { assertSectionsContract } from './report-contract-core.js';
3
-
4
- /**
5
- * The `audit-documentation` report contract (Story #4024).
6
- *
7
- * This is the **single source of truth** for the report shape that BOTH the
8
- * sequential lens (`.agents/workflows/audit-documentation.md` Step 3) and the
9
- * orchestrated dynamic-workflow path
10
- * (`.claude/workflows/audit-documentation.workflow.js`) MUST emit to
11
- * `{{auditOutputDir}}/audit-documentation-results.md`. Keeping it here lets
12
- * the contract-tier test assert report conformance against one definition
13
- * rather than re-deriving headings from prose in two places.
14
- *
15
- * @module dynamic-workflow/documentation-report-contract
16
- */
17
-
18
- /** The artifact filename the lens writes under `auditOutputDir`. */
19
- export const REPORT_ARTIFACT_BASENAME = 'audit-documentation-results.md';
20
-
21
- /**
22
- * The required top-level (`##`) section headings, in document order, that the
23
- * lens markdown's Step 3 template defines. A conformant report MUST contain
24
- * each of these headings; the orchestrated path assembles its verified
25
- * findings into exactly this skeleton.
26
- */
27
- export const REQUIRED_SECTIONS = Object.freeze([
28
- 'Executive Summary',
29
- 'Target Set Coverage',
30
- 'Detailed Findings',
31
- ]);
32
-
33
- /** The H1 title the report opens with. */
34
- export const REPORT_TITLE = 'Documentation Audit Report';
35
-
36
- /**
37
- * The required field labels inside each `### <finding>` block under
38
- * `## Detailed Findings`. Mirrors the strict per-finding structure in the
39
- * lens template.
40
- */
41
- export const FINDING_FIELDS = Object.freeze([
42
- 'Category',
43
- 'Impact',
44
- 'Current State',
45
- 'Recommendation & Rationale',
46
- 'Agent Prompt',
47
- ]);
48
-
49
- /**
50
- * The finding categories the per-finding `Category` field draws from. These
51
- * mirror the lens's Step 3 template enumeration: deterministic-gate findings
52
- * (Generator Drift, Link Integrity) plus semantic-verification findings
53
- * (Broken Instruction, Stale Description, Missing Coverage).
54
- */
55
- export const FINDING_CATEGORIES = Object.freeze([
56
- 'Broken Instruction',
57
- 'Stale Description',
58
- 'Missing Coverage',
59
- 'Generator Drift',
60
- 'Link Integrity',
61
- ]);
62
-
63
- /**
64
- * The impact buckets the Executive Summary and per-finding `Impact` field draw
65
- * from. The lens speaks in High/Medium/Low; this list is the canonical
66
- * taxonomy the downstream `audit-to-stories` consumer maps onto Story
67
- * priority.
68
- */
69
- export const IMPACT_LEVELS = Object.freeze(['High', 'Medium', 'Low']);
70
-
71
- /**
72
- * Assert that a rendered markdown report conforms to the contract: it has the
73
- * H1 title and every required `##` section heading. Returns a structured
74
- * result rather than throwing, so callers (tests, the orchestrated path's
75
- * self-check) can report precisely which sections are missing.
76
- *
77
- * Pure function — string analysis only.
78
- *
79
- * @param {string} markdown - The rendered report body.
80
- * @returns {{ conformant: boolean, missingSections: string[], hasTitle: boolean }}
81
- */
82
- export function assertReportContract(markdown) {
83
- return assertSectionsContract(markdown, {
84
- title: REPORT_TITLE,
85
- requiredSections: REQUIRED_SECTIONS,
86
- });
87
- }
@@ -1,74 +0,0 @@
1
- // .agents/scripts/lib/dynamic-workflow/performance-report-contract.js
2
- import { assertSectionsContract } from './report-contract-core.js';
3
-
4
- /**
5
- * The `audit-performance` report contract (Epic #3597, Story #3611).
6
- *
7
- * This is the **single source of truth** for the report shape that BOTH the
8
- * sequential lens (`.agents/workflows/audit-performance.md` Step 3) and the
9
- * orchestrated dynamic-workflow path
10
- * (`.claude/workflows/audit-performance.workflow.js`) MUST emit to
11
- * `{{auditOutputDir}}/audit-performance-results.md`. Keeping it here lets the
12
- * contract-tier test assert report conformance against one definition rather
13
- * than re-deriving headings from prose in two places.
14
- *
15
- * The report shape is declared by the lens markdown's Step 4 template. Story
16
- * #4631 added the mandatory per-finding **Evidence** field (a repro command
17
- * plus a `measured`/`estimated` tag) so measurement-first evidence is part of
18
- * the contract both paths must emit, not just prose in the lens.
19
- *
20
- * @module dynamic-workflow/performance-report-contract
21
- */
22
-
23
- /** The artifact filename the lens writes under `auditOutputDir`. */
24
- export const REPORT_ARTIFACT_BASENAME = 'audit-performance-results.md';
25
-
26
- /**
27
- * The required top-level (`##`) section headings, in document order, that the
28
- * lens markdown's Step 3 template defines. A conformant report MUST contain
29
- * each of these headings; the orchestrated path assembles its cross-checked
30
- * sub-agent findings into exactly this skeleton.
31
- *
32
- * The `Low-Hanging Fruit` section is the performance lens's distinguishing
33
- * section — the quick-win backlog the synthesis stage must always emit.
34
- */
35
- export const REQUIRED_SECTIONS = Object.freeze([
36
- 'Executive Summary',
37
- 'Detailed Findings',
38
- 'Low-Hanging Fruit',
39
- ]);
40
-
41
- /** The H1 title the report opens with. */
42
- export const REPORT_TITLE = 'Performance Audit Report';
43
-
44
- /**
45
- * The required field labels inside each `### <finding>` block under
46
- * `## Detailed Findings`. Mirrors the strict per-finding structure in the
47
- * lens template.
48
- */
49
- export const FINDING_FIELDS = Object.freeze([
50
- 'Dimension',
51
- 'Impact',
52
- 'Evidence',
53
- 'Current State',
54
- 'Recommendation & Rationale',
55
- 'Agent Prompt',
56
- ]);
57
-
58
- /**
59
- * Assert that a rendered markdown report conforms to the contract: it has the
60
- * H1 title and every required `##` section heading. Returns a structured
61
- * result rather than throwing, so callers (tests, the orchestrated path's
62
- * self-check) can report precisely which sections are missing.
63
- *
64
- * Pure function — string analysis only.
65
- *
66
- * @param {string} markdown - The rendered report body.
67
- * @returns {{ conformant: boolean, missingSections: string[], hasTitle: boolean }}
68
- */
69
- export function assertReportContract(markdown) {
70
- return assertSectionsContract(markdown, {
71
- title: REPORT_TITLE,
72
- requiredSections: REQUIRED_SECTIONS,
73
- });
74
- }