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,30 +1,12 @@
1
1
  /**
2
2
  * runtime-deps/ensure-installed — fail-fast guard for framework runtime deps.
3
3
  *
4
- * Importing this module runs the dependency-presence check as a side effect:
5
- * if any package in `.agents/runtime-deps.json`'s `dependencies` block cannot
6
- * be resolved from the framework's `node_modules` (i.e. the consumer's
7
- * install is missing, empty, or stale), it prints an actionable remediation
8
- * message and exits non-zero — *before* the entry point's heavier imports
9
- * reach the first `import 'ajv'` and throw an opaque `ERR_MODULE_NOT_FOUND`
10
- * (Story #3432).
11
- *
12
- * Why a side-effect-on-import (rather than a function the entry point calls):
13
- * ESM evaluates a module's imports in source order, depth-first, *before* the
14
- * module body runs. A function call in `main()` would therefore execute only
15
- * after the third-party-importing sibling modules had already been evaluated
16
- * (and already thrown). By making each target entry point's *first* import a
17
- * side-effect import of this module, the check runs first and short-circuits a
18
- * broken install with a clear message.
19
- *
20
- * The guard only ever exits when a *required* dependency is genuinely
21
- * missing. With a healthy install (CI, tests, normal runs) it is a no-op, so
22
- * it is safe for entry points imported by the test suite. `optionalDependencies`
23
- * are intentionally not checked — they sit behind graceful-degradation paths.
24
- *
25
- * Set `MANDREL_SKIP_DEP_PREFLIGHT=1` to disable the side effect (escape hatch
26
- * for tooling that imports an entry point in an environment that deliberately
27
- * lacks the framework deps).
4
+ * Runs on import, deliberately: ESM evaluates imports depth-first before any
5
+ * module body, so only a side-effect import placed first in an entry point
6
+ * can report a broken install before a sibling throws an opaque
7
+ * `ERR_MODULE_NOT_FOUND`. A no-op on a healthy install. `optionalDependencies`
8
+ * are not checked (they degrade gracefully). `MANDREL_SKIP_DEP_PREFLIGHT=1`
9
+ * disables it.
28
10
  */
29
11
 
30
12
  import { createRequire } from 'node:module';
@@ -36,16 +18,10 @@ import {
36
18
  import { loadRuntimeDepsManifest } from './manifest.js';
37
19
  import { detectPackageManager, formatMissingDepsMessage } from './preflight.js';
38
20
 
39
- // `require.resolve` bound to this module's location walks `node_modules`
40
- // upward from `.agents/scripts/lib/runtime-deps/` to the consumer root —
41
- // exactly the resolution path the framework's third-party imports follow.
21
+ // Resolves from this file upward — the same path the framework's imports take.
42
22
  const frameworkRequire = createRequire(import.meta.url);
43
23
 
44
24
  /**
45
- * Run the dependency-presence check and, on failure, write the remediation
46
- * message and exit. Seams (`requireResolve`, `cwd`, `stderr`, `exit`,
47
- * `manifest`) make it fully testable without touching the real process.
48
- *
49
25
  * @param {{
50
26
  * requireResolve?: (specifier: string) => string,
51
27
  * cwd?: string,
@@ -66,8 +42,8 @@ export function ensureRuntimeDepsInstalled(opts = {}) {
66
42
  readVersion,
67
43
  } = opts;
68
44
 
69
- // A manifest we cannot read is a packaging defect the drift test owns —
70
- // never let the guard kill an otherwise-healthy process over it.
45
+ // An unreadable manifest is a packaging defect the drift test owns; never
46
+ // kill a healthy process over it.
71
47
  if (!manifest) return { ok: true, missing: [] };
72
48
 
73
49
  const result = checkRuntimeDeps({
@@ -84,11 +60,7 @@ export function ensureRuntimeDepsInstalled(opts = {}) {
84
60
  }
85
61
 
86
62
  /**
87
- * Remediation text for a failed check.
88
- *
89
- * Absence is reported first: a package that is not installed cannot have a
90
- * version, and installing it is the prerequisite for any version complaint
91
- * being actionable.
63
+ * Absence first: installing is the prerequisite for any version complaint.
92
64
  *
93
65
  * @param {{ missing: string[], mismatched: {name: string, required: string, resolved: string}[] }} result
94
66
  * @param {string} cwd
@@ -106,9 +78,6 @@ function describeFailure(result, cwd) {
106
78
  }
107
79
 
108
80
  /**
109
- * Read a resolved package's version through the framework's own resolution,
110
- * so the version checked is the one the framework's imports will load.
111
- *
112
81
  * @param {string} name
113
82
  * @returns {string | null}
114
83
  */
@@ -117,9 +86,6 @@ function defaultReadVersion(name) {
117
86
  }
118
87
 
119
88
  /**
120
- * Load the manifest, swallowing a read/parse failure to `null` so the guard
121
- * stays inert on a packaging defect (see `ensureRuntimeDepsInstalled`).
122
- *
123
89
  * @returns {{ required: string[] } | null}
124
90
  */
125
91
  function safeLoadManifest() {
@@ -1,18 +1,7 @@
1
1
  /**
2
- * runtime-deps/manifest — loader for the framework's vendored runtime-dep SSOT.
3
- *
4
- * `.agents/runtime-deps.json` is the single source of truth for the
5
- * third-party npm packages the framework scripts import at runtime
6
- * (Story #3432). It ships *inside* `.agents/` so it travels with the
7
- * `mandrel` package into consumer projects. This module is the only reader of that
8
- * file — the bootstrap seeder (`project-bootstrap.js`), the preflight guard
9
- * (`ensure-installed.js`), and the import-vs-manifest drift test all derive
10
- * their dependency lists from `loadRuntimeDepsManifest()` so there is exactly
11
- * one place the list lives.
12
- *
13
- * The loader stays on Node builtins only (`node:fs`, `node:path`,
14
- * `node:url`) so it can run inside the preflight guard *before* any
15
- * third-party package is imported — that is the whole point of the guard.
2
+ * runtime-deps/manifest — the only reader of `.agents/runtime-deps.json`, the
3
+ * SSOT for the framework's runtime npm packages. Builtins only, because the
4
+ * preflight guard loads it before any third-party import.
16
5
  */
17
6
 
18
7
  import fs from 'node:fs';
@@ -21,30 +10,21 @@ import { fileURLToPath } from 'node:url';
21
10
 
22
11
  const HERE = path.dirname(fileURLToPath(import.meta.url));
23
12
 
24
- /**
25
- * Absolute path to the vendored manifest. `HERE` is
26
- * `.agents/scripts/lib/runtime-deps/`; the manifest sits at the `.agents/`
27
- * root, three directories up.
28
- */
29
13
  const MANIFEST_PATH = path.resolve(HERE, '..', '..', '..', 'runtime-deps.json');
30
14
 
31
15
  /**
32
16
  * @typedef {object} RuntimeDepsManifest
33
- * @property {Record<string,string>} dependencies — required runtime
34
- * packages (name → semver range). Fail-fast enforced by the preflight.
35
- * @property {Record<string,string>} optionalDependencies — packages imported
36
- * behind graceful-degradation paths; declared but never preflight-blocked.
37
- * @property {string[]} required — `Object.keys(dependencies)`.
38
- * @property {string[]} optional — `Object.keys(optionalDependencies)`.
17
+ * @property {Record<string,string>} dependencies — required; preflight-enforced.
18
+ * @property {Record<string,string>} optionalDependencies — graceful-degradation
19
+ * imports; never preflight-blocked.
20
+ * @property {string[]} required
21
+ * @property {string[]} optional
39
22
  * @property {Set<string>} declared — union of required + optional names.
40
23
  */
41
24
 
42
25
  /**
43
- * Read, parse, and structurally validate the runtime-deps manifest.
44
- *
45
- * Throws a clear `Error` when the file is missing or malformed so the
46
- * drift test and bootstrap seeder fail loudly on a packaging regression,
47
- * rather than silently treating the dependency set as empty.
26
+ * Throws on a missing or malformed file rather than yielding an empty set,
27
+ * so a packaging regression fails loudly.
48
28
  *
49
29
  * @param {string} [manifestPath=MANIFEST_PATH]
50
30
  * @returns {RuntimeDepsManifest}
@@ -1,17 +1,9 @@
1
1
  /**
2
- * runtime-deps/parser-major — which `@babel/parser` major the complexity
3
- * kernel can actually parse with, and how to say so when it is wrong.
4
- *
5
- * Its own module because two very different callers need the same answer and
6
- * neither should drag the other in: the kernel asserts it at load, and
7
- * `mandrel doctor` reports it to a consumer. Importing the kernel into doctor
8
- * to ask one version question would pull the whole metric core and install the
9
- * AST compatibility patch as a side effect.
10
- *
11
- * `.agents/` materializes into the consumer's repository root, so
12
- * `@babel/parser` resolves from *their* `node_modules`. A range in
13
- * `runtime-deps.json` documents the requirement; it cannot enforce it. This is
14
- * the enforcement.
2
+ * runtime-deps/parser-major — whether the resolved `@babel/parser` major is
3
+ * one the complexity kernel can parse with. Separate so `mandrel doctor` can
4
+ * ask without importing the kernel (and its AST patch side effect). The
5
+ * parser resolves from the consumer's tree, so this is the enforcement of the
6
+ * declared range.
15
7
  *
16
8
  * @module lib/runtime-deps/parser-major
17
9
  */
@@ -19,36 +11,20 @@
19
11
  import fs from 'node:fs';
20
12
  import { createRequire } from 'node:module';
21
13
 
22
- /**
23
- * The only `@babel/parser` major the kernel supports.
24
- *
25
- * Module-local, with `describeParserMajorError` as the single public door:
26
- * every caller wants the verdict and the remedy, not the number.
27
- *
28
- * 8.x removed several plugin names from the kernel's fixed list (they became
29
- * default syntax), so it does not merely warn — it throws on the plugin list
30
- * itself. Adopting it is a deliberate change with a baseline recut attached,
31
- * not something to absorb from a consumer's resolution.
32
- */
14
+ // 8.x throws on the kernel's fixed plugin list; adopting it is a deliberate
15
+ // change with a baseline recut, not something to absorb from a consumer.
33
16
  const SUPPORTED_PARSER_MAJOR = 7;
34
17
 
35
- /** Package whose resolved major gates the kernel. */
36
18
  const PARSER_PACKAGE = '@babel/parser';
37
19
 
38
- /** Memoised resolved parser version: `undefined` unread, `null` unresolvable. */
20
+ /** Memoised: `undefined` unread, `null` unresolvable. */
39
21
  let parserVersion;
40
22
 
41
23
  /**
42
- * Read the resolved `@babel/parser` version from its own manifest.
43
- *
44
- * The package exports no version, so its `package.json` is the only source.
45
- * This is the one non-static resolution in the file and it deliberately
46
- * targets a manifest rather than code: `@babel/parser` itself is reached by a
47
- * static import above, so it is declared and preflighted like every other
48
- * dependency.
24
+ * The package exports no version, so its manifest is the only source.
49
25
  *
50
26
  * @returns {string|null} The resolved version, or `null` when the manifest
51
- * cannot be read (a layout that hides `package.json` behind `exports`, say).
27
+ * cannot be read.
52
28
  */
53
29
  function resolveParserVersion() {
54
30
  if (parserVersion !== undefined) return parserVersion;
@@ -64,10 +40,7 @@ function resolveParserVersion() {
64
40
  }
65
41
 
66
42
  /**
67
- * The resolved parser's major version.
68
- *
69
- * @returns {number|null} `null` when the version could not be resolved or
70
- * does not lead with an integer.
43
+ * @returns {number|null}
71
44
  */
72
45
  function resolveParserMajor() {
73
46
  const version = resolveParserVersion();
@@ -77,21 +50,12 @@ function resolveParserMajor() {
77
50
  }
78
51
 
79
52
  /**
80
- * Describe the resolved-parser problem, if there is one.
81
- *
82
- * Single-sourced so the load-time assertion below and the preflight guard
83
- * (`runtime-deps/ensure-installed.js`) emit the *same* named, actionable
84
- * message — the point of AC-5 is that a consumer never meets this as a
85
- * plugin-list syntax error mid-scan.
86
- *
87
- * An unresolvable version is **not** a problem: a consumer layout that hides
88
- * the manifest still resolves the parser itself, and refusing to score would
89
- * be a worse answer than scoring with an unverified parser. Only a
90
- * *known-wrong* major is reported.
53
+ * One message shared by the kernel's load-time assertion and the preflight
54
+ * guard. An unknowable version is not reported — scoring with an unverified
55
+ * parser beats refusing to score; only a known-wrong major is.
91
56
  *
92
57
  * @param {{major?: number|null, version?: string|null}} [resolved] Overrides
93
- * the resolved parser, so the message a consumer on an unsupported major
94
- * would read is assertable without installing one.
58
+ * the resolved parser (test seam).
95
59
  * @returns {string|null} The message, or `null` when the resolved parser is
96
60
  * supported (or its version is unknowable).
97
61
  */
@@ -1,28 +1,13 @@
1
1
  /**
2
- * runtime-deps/preflight — pure helpers for the dependency-presence check's
3
- * *messaging* half.
4
- *
5
- * The check itself moved to `dep-resolution.js`, which owns resolving a
6
- * declared dependency, judging its major, and explaining a mismatch. What is
7
- * left here holds no side effects and stays unit-testable in isolation:
8
- * `detectPackageManager` takes an injected `exists` seam and
9
- * `formatMissingDepsMessage` is a pure string builder. The side-effecting
10
- * guard that wires them to the real process lives in `ensure-installed.js`.
11
- *
12
- * Builtins only — this module runs *before* any third-party package is
13
- * imported, so importing a third-party here would defeat its own purpose.
2
+ * runtime-deps/preflight — pure messaging helpers for the dependency check.
3
+ * Builtins only: it runs before any third-party package is imported.
14
4
  */
15
5
 
16
6
  import fs from 'node:fs';
17
7
  import { detectPackageManager as detectPm } from '../detect-package-manager.js';
18
8
 
19
9
  /**
20
- * Detect the consumer's package manager from lockfile presence so the
21
- * remediation message names the right install command. Defaults to `npm`.
22
- *
23
- * Delegates to the shared `detectPackageManager` helper
24
- * (Story #4048 B3 — one implementation per concept). The `exists` seam
25
- * is forwarded directly; `null` (no manifest) coerces to `'npm'`.
10
+ * Lockfile-based, so the message names the right install command.
26
11
  *
27
12
  * @param {string} root
28
13
  * @param {(p: string) => boolean} [exists=fs.existsSync]
@@ -32,7 +17,6 @@ export function detectPackageManager(root, exists = fs.existsSync) {
32
17
  return detectPm(root, exists) ?? 'npm';
33
18
  }
34
19
 
35
- /** Map a detected package manager to its install command. */
36
20
  function installCommand(packageManager) {
37
21
  if (packageManager === 'pnpm') return 'pnpm install';
38
22
  if (packageManager === 'yarn') return 'yarn install';
@@ -40,9 +24,7 @@ function installCommand(packageManager) {
40
24
  }
41
25
 
42
26
  /**
43
- * Build the actionable remediation message naming the missing packages and
44
- * the consumer's install command. This is what replaces the opaque raw
45
- * `ERR_MODULE_NOT_FOUND` stack trace.
27
+ * Replaces the opaque `ERR_MODULE_NOT_FOUND` stack with an actionable message.
46
28
  *
47
29
  * @param {string[]} missing
48
30
  * @param {{ root: string, packageManager: 'pnpm'|'yarn'|'npm' }} opts
@@ -1,26 +1,9 @@
1
1
  /**
2
- * runtime-deps/scan-imports — extract third-party package imports from source.
3
- *
4
- * Powers the import-vs-manifest drift test (Story #3432): it walks
5
- * `.agents/scripts/**` and reports every third-party (non-builtin,
6
- * non-relative) top-level package the framework imports, so the test can
7
- * assert each one is declared in `.agents/runtime-deps.json`.
8
- *
9
- * Robustness is the whole game here. A naive `from ['"]...['"]` regex also
10
- * matches prose inside strings and comments (e.g. a log line containing the
11
- * word "from 'x'"), which would invent phantom dependencies. Two guards
12
- * prevent that:
13
- *
14
- * 1. Static `import` / `export … from` matches are anchored to the start
15
- * of a line — a real import statement begins the line; prose inside a
16
- * template literal does not.
17
- * 2. Every extracted specifier's *top-level* package name is validated
18
- * against the npm package-name grammar. Names with spaces, uppercase,
19
- * or stray punctuation (i.e. accidental prose captures) are rejected.
20
- *
21
- * Node builtins (`node:fs`, `path`, …) and relative/absolute specifiers are
22
- * excluded. Subpath specifiers (`ajv/dist/2020.js`, `@scope/pkg/sub`) are
23
- * collapsed to their installable top-level name (`ajv`, `@scope/pkg`).
2
+ * runtime-deps/scan-imports — extract third-party top-level package imports
3
+ * from source, for the import-vs-manifest drift test. To avoid inventing
4
+ * phantom deps from prose, comments are stripped, static imports must start
5
+ * a line, and every name must match the npm package-name grammar. Subpaths
6
+ * collapse to their installable name.
24
7
  */
25
8
 
26
9
  import fs from 'node:fs';
@@ -28,21 +11,15 @@ import { builtinModules } from 'node:module';
28
11
  import path from 'node:path';
29
12
  import { stripJsComments } from '../source-text/strip-js-comments.js';
30
13
 
31
- /** Node builtins, with and without the `node:` prefix. */
32
14
  const BUILTIN_MODULES = new Set([
33
15
  ...builtinModules,
34
16
  ...builtinModules.map((m) => `node:${m}`),
35
17
  ]);
36
18
 
37
- /**
38
- * npm package-name grammar (top-level, optionally scoped). Lowercase,
39
- * digits, and a small punctuation set only — deliberately strict so that
40
- * accidental prose captures are rejected.
41
- */
19
+ // Deliberately strict so accidental prose captures are rejected.
42
20
  const PACKAGE_NAME = /^(?:@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/;
43
21
 
44
22
  /**
45
- * Collapse an import specifier to its installable top-level package name.
46
23
  * `@scope/pkg/sub` → `@scope/pkg`; `pkg/sub` → `pkg`.
47
24
  *
48
25
  * @param {string} specifier
@@ -55,8 +32,6 @@ export function toTopLevelPackage(specifier) {
55
32
  }
56
33
 
57
34
  /**
58
- * True when `name` is a syntactically valid npm package name.
59
- *
60
35
  * @param {string} name
61
36
  * @returns {boolean}
62
37
  */
@@ -64,27 +39,19 @@ export function isValidPackageName(name) {
64
39
  return typeof name === 'string' && PACKAGE_NAME.test(name);
65
40
  }
66
41
 
67
- // Anchored static import / re-export: the statement must start the line.
68
42
  const STATIC_FROM =
69
43
  /^\s*(?:import|export)\b[^\n;]*?\bfrom\s*['"]([^'"]+)['"]/gm;
70
- // Anchored side-effect import at line start.
71
44
  const SIDE_EFFECT = /^\s*import\s*['"]([^'"]+)['"]/gm;
72
45
  // `require(...)` and dynamic `import(...)` may appear mid-expression.
73
46
  const CALL_FORM = /\b(?:require|import)\s*\(\s*['"]([^'"]+)['"]/g;
74
- // Names bound to a `createRequire(...)` result, e.g.
75
- // `const fromReader = createRequire(x)`. Such a binding is a require function
76
- // under a different name, so calls through it are real runtime imports that
77
- // `CALL_FORM` cannot see — it matches the literal callees `require`/`import`.
78
- // A module reached only that way would be an undeclared, unpreflighted
79
- // dependency that this scanner reported as absent.
47
+ // A `createRequire(...)` binding is a require under another name; calls
48
+ // through it are real imports CALL_FORM cannot see.
80
49
  const REQUIRE_ALIAS =
81
50
  /(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*createRequire\s*\(/g;
82
51
 
83
52
  /**
84
- * Build a matcher for calls through `createRequire`-bound identifiers.
85
- *
86
- * Returns `null` when the source binds none, so the common case adds no pass.
87
- * Aliases named `require` need no entry — `CALL_FORM` already covers them.
53
+ * `null` when the source binds no alias (aliases named `require` are already
54
+ * covered).
88
55
  *
89
56
  * @param {string} cleaned Comment-stripped source.
90
57
  * @returns {RegExp|null}
@@ -105,9 +72,6 @@ function aliasedRequireMatcher(cleaned) {
105
72
  }
106
73
 
107
74
  /**
108
- * The specifier patterns to run over one source: the three fixed forms, plus
109
- * an alias matcher when the source binds a `createRequire` result.
110
- *
111
75
  * @param {string} cleaned Comment-stripped source.
112
76
  * @returns {RegExp[]}
113
77
  */
@@ -118,9 +82,6 @@ function specifierMatchers(cleaned) {
118
82
  }
119
83
 
120
84
  /**
121
- * Extract the set of third-party top-level package names imported by a
122
- * single source string.
123
- *
124
85
  * @param {string} source
125
86
  * @returns {Set<string>}
126
87
  */
@@ -132,7 +93,7 @@ export function extractThirdPartyImports(source) {
132
93
  let match = re.exec(cleaned);
133
94
  while (match !== null) {
134
95
  const specifier = match[1];
135
- // Advance the iterator up front so every `continue` below is safe.
96
+ // Advance first so every `continue` below is safe.
136
97
  match = re.exec(cleaned);
137
98
  if (
138
99
  specifier.startsWith('.') ||
@@ -152,8 +113,6 @@ export function extractThirdPartyImports(source) {
152
113
  }
153
114
 
154
115
  /**
155
- * Recursively collect every `.js` file under `dir`.
156
- *
157
116
  * @param {string} dir
158
117
  * @returns {string[]}
159
118
  */
@@ -171,9 +130,6 @@ export function listJsFiles(dir) {
171
130
  }
172
131
 
173
132
  /**
174
- * Scan every `.js` file under `dir` and map each third-party top-level
175
- * package to the (relative) files that import it.
176
- *
177
133
  * @param {string} dir — directory root to scan (e.g. `.agents/scripts`).
178
134
  * @returns {{ packages: Set<string>, byPackage: Map<string, string[]> }}
179
135
  */
@@ -1,14 +1,9 @@
1
1
  /**
2
- * detectors/common.js — shared helpers for the signals layer.
3
- *
4
- * Hoisted out of the detector modules (retry, rework) plus
5
- * the since-deleted `signals/read.js`, and `signals/schema.js`, all of which shipped
6
- * byte-equivalent copies of these predicates. See Story #2464.
2
+ * detectors/common.js — shared predicates for the signals layer.
7
3
  */
8
4
 
9
5
  /**
10
- * Return true when `v` is a positive (strictly > 0) integer. Used by every
11
- * signal writer and reader as the canonical numeric-id guard.
6
+ * The canonical numeric-id guard for signal writers and readers.
12
7
  *
13
8
  * @param {unknown} v
14
9
  * @returns {boolean}
@@ -18,9 +13,7 @@ export function isPositiveInt(v) {
18
13
  }
19
14
 
20
15
  /**
21
- * Pull the tool name from a trace record. The hook writes the tool name
22
- * into `emitter.tool` (canonical provenance) and, defensively, into
23
- * `details.tool` — we accept either.
16
+ * `emitter.tool` is canonical; `details.tool` is accepted defensively.
24
17
  *
25
18
  * @param {object} rec
26
19
  * @returns {string|null}
@@ -36,35 +29,17 @@ export function extractTool(rec) {
36
29
  }
37
30
 
38
31
  /**
39
- * Validate and normalize the shared detector argument preamble.
40
- *
41
- * `detectRework` and `detectRetry` previously shipped a near-identical
42
- * guard block: the `args` object-shape `TypeError`, the `nowFn`
43
- * function-type `TypeError`, the positive-integer `RangeError`s for the id
44
- * fields, the non-empty-string `tracesPath` check, and the
45
- * non-negative-integer `threshold` check. Story #4077 hoists that preamble
46
- * here so the detectors share one error-message contract.
47
- *
48
- * Error wording stays per-detector-accurate by prefixing every message with
49
- * `fnName` (e.g. `detectRework: …`). Error *types* are preserved exactly:
50
- * the `args`/`tracesPath`/`nowFn` guards throw `TypeError`; the id and
51
- * `threshold` guards throw `RangeError`.
52
- *
53
- * The validated fields are gated by the `require*` flags so the same helper
54
- * serves both the Story-scoped detectors (rework/retry — full preamble) and
55
- * the Epic-scoped hotspot detector (only `epicId` + `nowFn`). A field that
56
- * is not required is neither validated nor read.
32
+ * Shared detector argument guard. Messages are prefixed with `fnName`;
33
+ * shape/`tracesPath`/`nowFn` failures throw `TypeError`, id and `threshold`
34
+ * failures `RangeError`. A field whose `require*` flag is off is neither
35
+ * validated nor returned.
57
36
  *
58
37
  * @param {object} args — the detector's raw argument object.
59
38
  * @param {object} opts
60
- * @param {string} opts.fnName — the calling detector's name, used verbatim as
61
- * the prefix on every thrown error message (e.g. `'detectRework'`).
62
- * @param {boolean} [opts.requireTracesPath=true] — validate + return
63
- * `tracesPath` (non-empty string).
64
- * @param {boolean} [opts.requireStoryId=true] — validate + return `storyId`
65
- * (positive integer) and the optional `taskId` (positive integer or null).
66
- * @param {boolean} [opts.requireThreshold=true] — validate + return
67
- * `threshold` (non-negative integer).
39
+ * @param {string} opts.fnName — error-message prefix (e.g. `'detectRework'`).
40
+ * @param {boolean} [opts.requireTracesPath=true]
41
+ * @param {boolean} [opts.requireStoryId=true] — also gates the optional `taskId`.
42
+ * @param {boolean} [opts.requireThreshold=true]
68
43
  * @returns {{
69
44
  * tracesPath: string|undefined,
70
45
  * epicId: number,
@@ -72,8 +47,7 @@ export function extractTool(rec) {
72
47
  * taskId: number|null|undefined,
73
48
  * threshold: number|undefined,
74
49
  * nowFn: () => string,
75
- * }} the normalized argument set. Fields gated off by a `require*` flag are
76
- * omitted (left `undefined`).
50
+ * }}
77
51
  */
78
52
  export function validateDetectorArgs(args, opts) {
79
53
  const { fnName } = opts;
@@ -1,23 +1,6 @@
1
1
  /**
2
- * `lib/signals/` barrel.
3
- *
4
- * Consumers do `import { schema, appendSignal } from './lib/signals/index.js'`
5
- * (or `import * as signals from './lib/signals/index.js'`) so a future
6
- * shape migration only has to touch this file.
7
- *
8
- * History:
9
- * - Epic #1181 / Story #1438 / Task #1459 — initial barrel with `read`
10
- * + `schema`; `buildSpanTree` was a throwing placeholder.
11
- * - Epic #1181 / Story #1440 / Task #1461 — placeholder replaced by
12
- * the real span-tree builder.
13
- * - Story #1476 — `appendSignal` / `appendTrace` re-exported here
14
- * via `./write.js` so the gate scripts (and any
15
- * new code) converge on `lib/signals/` instead of importing the
16
- * writer directly from `lib/observability/`.
17
- * - Story #5003 — the reader half (`read`, `buildSpanTree`) went with the
18
- * debug viewer that consumed it: it walked a `run-<id>/` layout no v2
19
- * writer populates. `appendTrace` went with the trace hook, its only
20
- * producer. What remains is the live write surface.
2
+ * `lib/signals/` barrel — the one import point, so a shape migration touches
3
+ * only this file.
21
4
  *
22
5
  * @module lib/signals
23
6
  */