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,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
- }