mandrel 2.60.0 → 2.62.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 (662) 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/merge-queue.js +158 -0
  318. package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
  319. package/.agents/scripts/lib/orchestration/plan-context.js +52 -303
  320. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
  321. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
  322. package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
  323. package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
  324. package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
  325. package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
  326. package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +14 -78
  327. package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
  328. package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
  329. package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
  330. package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
  331. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
  332. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
  333. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +49 -248
  334. package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
  335. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +85 -368
  336. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +8 -38
  337. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +30 -190
  338. package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
  339. package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
  340. package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
  341. package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
  342. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
  343. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
  344. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
  345. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
  346. package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
  347. package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
  348. package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
  349. package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
  350. package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
  351. package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
  352. package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
  353. package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
  354. package/.agents/scripts/lib/orchestration/review-depth.js +12 -94
  355. package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
  356. package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
  357. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
  358. package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
  359. package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
  360. package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
  361. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
  362. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
  363. package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
  364. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
  365. package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
  366. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
  367. package/.agents/scripts/lib/orchestration/run-epilogue.js +40 -199
  368. package/.agents/scripts/lib/orchestration/run-scoped-config.js +13 -81
  369. package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
  370. package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
  371. package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
  372. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +190 -280
  373. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +18 -80
  374. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
  375. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
  376. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +183 -485
  377. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
  378. package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +9 -50
  379. package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
  380. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
  381. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
  382. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
  383. package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
  384. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
  385. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
  386. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
  387. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
  388. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
  389. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
  390. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
  391. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +110 -290
  392. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
  393. package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
  394. package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
  395. package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
  396. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
  397. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
  398. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
  399. package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
  400. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -201
  401. package/.agents/scripts/lib/orchestration/story-follow-ups.js +43 -245
  402. package/.agents/scripts/lib/orchestration/story-init-envelope.js +4 -23
  403. package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
  404. package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
  405. package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -126
  406. package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
  407. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
  408. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
  409. package/.agents/scripts/lib/orchestration/ticket-validator.js +39 -181
  410. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
  411. package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -250
  412. package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
  413. package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
  414. package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
  415. package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
  416. package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
  417. package/.agents/scripts/lib/path-security.js +3 -6
  418. package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
  419. package/.agents/scripts/lib/preflight-runner.js +13 -69
  420. package/.agents/scripts/lib/process-group.js +143 -0
  421. package/.agents/scripts/lib/project-root.js +2 -8
  422. package/.agents/scripts/lib/provider-factory.js +2 -25
  423. package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
  424. package/.agents/scripts/lib/qa/qa-session.js +15 -69
  425. package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
  426. package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
  427. package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
  428. package/.agents/scripts/lib/reserved-test-ids.js +9 -47
  429. package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
  430. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
  431. package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
  432. package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
  433. package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
  434. package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
  435. package/.agents/scripts/lib/signals/detectors/common.js +12 -38
  436. package/.agents/scripts/lib/signals/index.js +2 -19
  437. package/.agents/scripts/lib/signals/schema.js +14 -109
  438. package/.agents/scripts/lib/signals/write.js +2 -11
  439. package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
  440. package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
  441. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
  442. package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
  443. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
  444. package/.agents/scripts/lib/single-story-sweep.js +14 -97
  445. package/.agents/scripts/lib/skills/parse-skill.js +13 -59
  446. package/.agents/scripts/lib/skills/skills-index.js +8 -29
  447. package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
  448. package/.agents/scripts/lib/source-extensions.js +11 -42
  449. package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
  450. package/.agents/scripts/lib/stdio-flush.js +9 -36
  451. package/.agents/scripts/lib/story-adjacency.js +8 -40
  452. package/.agents/scripts/lib/story-body/body-format-lints.js +22 -83
  453. package/.agents/scripts/lib/story-body/footer-block.js +11 -44
  454. package/.agents/scripts/lib/story-body/story-body.js +83 -358
  455. package/.agents/scripts/lib/temp-retention.js +42 -143
  456. package/.agents/scripts/lib/templates/decomposer-prompts.js +11 -65
  457. package/.agents/scripts/lib/test-env.js +12 -65
  458. package/.agents/scripts/lib/test-run-credit.js +10 -65
  459. package/.agents/scripts/lib/test-runner-contract.js +19 -74
  460. package/.agents/scripts/lib/test-temp.js +38 -184
  461. package/.agents/scripts/lib/test-tiers.js +12 -96
  462. package/.agents/scripts/lib/ticket-body-sections.js +21 -96
  463. package/.agents/scripts/lib/transpile.js +15 -74
  464. package/.agents/scripts/lib/util/concurrent-map.js +6 -25
  465. package/.agents/scripts/lib/util/parse-id-list.js +8 -34
  466. package/.agents/scripts/lib/util/poll-loop.js +8 -28
  467. package/.agents/scripts/lib/util/with-timeout.js +2 -11
  468. package/.agents/scripts/lib/validation-evidence.js +21 -96
  469. package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
  470. package/.agents/scripts/lib/wave-runner/live-probe.js +53 -221
  471. package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
  472. package/.agents/scripts/lib/workers/crap-worker.js +11 -64
  473. package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
  474. package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
  475. package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
  476. package/.agents/scripts/lib/workflow-closure.js +22 -105
  477. package/.agents/scripts/lib/workspace-provisioner.js +16 -54
  478. package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
  479. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
  480. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
  481. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
  482. package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
  483. package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
  484. package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
  485. package/.agents/scripts/lib/worktree-manager.js +15 -40
  486. package/.agents/scripts/lint-issue-body.js +12 -68
  487. package/.agents/scripts/mandrel-update-preflight.js +10 -70
  488. package/.agents/scripts/merge-baseline.js +30 -104
  489. package/.agents/scripts/nav-registry-diff.js +22 -108
  490. package/.agents/scripts/notify.js +12 -69
  491. package/.agents/scripts/plan-context.js +27 -111
  492. package/.agents/scripts/plan-critics.js +12 -66
  493. package/.agents/scripts/plan-persist.js +31 -148
  494. package/.agents/scripts/plan-run-epilogue.js +11 -37
  495. package/.agents/scripts/pr-watch-with-update.js +76 -267
  496. package/.agents/scripts/providers/github/auth.js +3 -8
  497. package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
  498. package/.agents/scripts/providers/github/board-add.js +5 -21
  499. package/.agents/scripts/providers/github/branch-protection.js +11 -43
  500. package/.agents/scripts/providers/github/cache.js +2 -14
  501. package/.agents/scripts/providers/github/comments.js +7 -40
  502. package/.agents/scripts/providers/github/compose.js +3 -19
  503. package/.agents/scripts/providers/github/errors.js +22 -125
  504. package/.agents/scripts/providers/github/issues.js +31 -123
  505. package/.agents/scripts/providers/github/labels.js +24 -124
  506. package/.agents/scripts/providers/github/mappers.js +5 -27
  507. package/.agents/scripts/providers/github/merge-methods.js +3 -22
  508. package/.agents/scripts/providers/github/project-board.js +2 -17
  509. package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
  510. package/.agents/scripts/providers/github/request-helpers.js +5 -32
  511. package/.agents/scripts/providers/github/search-budget.js +9 -39
  512. package/.agents/scripts/providers/github/search-query.js +5 -26
  513. package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
  514. package/.agents/scripts/providers/github/sub-issues.js +7 -36
  515. package/.agents/scripts/providers/github/tickets.js +32 -134
  516. package/.agents/scripts/providers/github.js +18 -59
  517. package/.agents/scripts/prune-plan-run-labels.js +12 -46
  518. package/.agents/scripts/quality-preview.js +35 -220
  519. package/.agents/scripts/resolve-doc-tiers.js +3 -26
  520. package/.agents/scripts/resolve-stories.js +16 -67
  521. package/.agents/scripts/resync-status-column.js +6 -25
  522. package/.agents/scripts/run-tests.js +29 -104
  523. package/.agents/scripts/single-story-close.js +23 -135
  524. package/.agents/scripts/single-story-confirm-merge.js +32 -139
  525. package/.agents/scripts/single-story-init.js +47 -209
  526. package/.agents/scripts/stories-wave-tick.js +102 -472
  527. package/.agents/scripts/sync-agentrc.js +3 -21
  528. package/.agents/scripts/sync-claude-agents.js +9 -55
  529. package/.agents/scripts/sync-claude-commands.js +20 -110
  530. package/.agents/scripts/test-wrapper.js +6 -43
  531. package/.agents/scripts/update-coverage-baseline.js +5 -22
  532. package/.agents/scripts/update-crap-baseline.js +7 -30
  533. package/.agents/scripts/update-duplication-baseline.js +16 -92
  534. package/.agents/scripts/update-maintainability-baseline.js +8 -62
  535. package/.agents/scripts/update-ticket-state.js +1 -7
  536. package/.agents/scripts/validate-skills.js +6 -26
  537. package/.agents/templates/agent-protocol.md +2 -2
  538. package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
  539. package/.agents/workflows/audit-accessibility.md +4 -7
  540. package/.agents/workflows/audit-adrs.md +3 -6
  541. package/.agents/workflows/audit-architecture.md +3 -11
  542. package/.agents/workflows/audit-baselines.md +6 -9
  543. package/.agents/workflows/audit-clean-code.md +8 -12
  544. package/.agents/workflows/audit-data-model.md +3 -7
  545. package/.agents/workflows/audit-dependencies.md +4 -7
  546. package/.agents/workflows/audit-devops.md +4 -8
  547. package/.agents/workflows/audit-documentation.md +1 -4
  548. package/.agents/workflows/audit-mobile.md +4 -7
  549. package/.agents/workflows/audit-navigability.md +3 -6
  550. package/.agents/workflows/audit-performance.md +2 -4
  551. package/.agents/workflows/audit-privacy.md +4 -7
  552. package/.agents/workflows/audit-quality.md +4 -7
  553. package/.agents/workflows/audit-security.md +4 -7
  554. package/.agents/workflows/audit-seo.md +4 -7
  555. package/.agents/workflows/audit-sre.md +4 -7
  556. package/.agents/workflows/audit-to-stories.md +17 -30
  557. package/.agents/workflows/audit-ux-ui.md +4 -7
  558. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  559. package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
  560. package/.agents/workflows/helpers/deliver-digest.md +6 -4
  561. package/.agents/workflows/helpers/deliver-reference.md +114 -188
  562. package/.agents/workflows/helpers/deliver-story-reference.md +189 -533
  563. package/.agents/workflows/helpers/plan-reference.md +86 -139
  564. package/.agents/workflows/helpers/qa-core.md +12 -0
  565. package/.agents/workflows/memory-consolidate.md +1 -1
  566. package/.agents/workflows/qa-assist.md +27 -71
  567. package/.agents/workflows/qa-explore.md +19 -59
  568. package/.agents/workflows/qa-run.md +11 -33
  569. package/README.md +1 -1
  570. package/bin/mandrel.js +5 -46
  571. package/bin/postinstall.js +18 -107
  572. package/docs/CHANGELOG.md +32 -0
  573. package/lib/cli/doctor.js +11 -71
  574. package/lib/cli/init.js +26 -165
  575. package/lib/cli/migrate.js +5 -64
  576. package/lib/cli/registry.js +84 -467
  577. package/lib/cli/sync-agents.js +4 -64
  578. package/lib/cli/sync-commands.js +11 -64
  579. package/lib/cli/sync.js +34 -213
  580. package/lib/cli/uninstall.js +40 -219
  581. package/lib/cli/update.js +105 -661
  582. package/lib/cli/version-check.js +8 -72
  583. package/lib/cli/version-helpers.js +14 -87
  584. package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
  585. package/lib/migrations/index.js +15 -92
  586. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
  587. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
  588. package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
  589. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
  590. package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
  591. package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
  592. package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
  593. package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
  594. package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +2 -21
  595. package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
  596. package/package.json +16 -14
  597. package/.agents/docs/SDLC.md +0 -590
  598. package/.agents/docs/quality-gates.md +0 -1183
  599. package/.agents/rules/known-tooling-behavior.md +0 -200
  600. package/.agents/rules/orchestration-error-handling.md +0 -61
  601. package/.agents/rules/test-seams.md +0 -59
  602. package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
  603. package/.agents/schemas/baselines/lint.schema.json +0 -47
  604. package/.agents/scripts/check-action-pinning.js +0 -260
  605. package/.agents/scripts/check-audit-attribution.js +0 -302
  606. package/.agents/scripts/check-baseline-drift.js +0 -211
  607. package/.agents/scripts/check-baseline-scope.js +0 -362
  608. package/.agents/scripts/check-generated-validator.js +0 -202
  609. package/.agents/scripts/check-knip-entries.js +0 -159
  610. package/.agents/scripts/check-lifecycle-lint.js +0 -294
  611. package/.agents/scripts/check-pinned-override-notes.js +0 -102
  612. package/.agents/scripts/check-schema-references.js +0 -368
  613. package/.agents/scripts/check-test-portability.js +0 -512
  614. package/.agents/scripts/check-workflow-citations.js +0 -218
  615. package/.agents/scripts/check-workflow-cli-lint.js +0 -299
  616. package/.agents/scripts/check-workflow-timeouts.js +0 -291
  617. package/.agents/scripts/install-matrix-assert.js +0 -326
  618. package/.agents/scripts/lib/audit-advisories.js +0 -195
  619. package/.agents/scripts/lib/audit-attribution.js +0 -134
  620. package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
  621. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
  622. package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
  623. package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
  624. package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
  625. package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
  626. package/.agents/scripts/lib/c8-cli-path.js +0 -21
  627. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
  628. package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
  629. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
  630. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
  631. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
  632. package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
  633. package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
  634. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
  635. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
  636. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
  637. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
  638. package/.agents/scripts/lib/fs-walk.js +0 -52
  639. package/.agents/scripts/lib/knip-config-resolver.js +0 -181
  640. package/.agents/scripts/lib/knip-entry-sync.js +0 -452
  641. package/.agents/scripts/lib/pinned-override-notes.js +0 -88
  642. package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
  643. package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
  644. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
  645. package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
  646. package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
  647. package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
  648. package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
  649. package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
  650. package/.agents/scripts/lib/test-isolate/runner.js +0 -483
  651. package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
  652. package/.agents/scripts/lib/test-profile/render-report.js +0 -45
  653. package/.agents/scripts/lint-label-vocabulary.js +0 -214
  654. package/.agents/scripts/post-structured-comment.js +0 -127
  655. package/.agents/scripts/provision-git-hooks.js +0 -85
  656. package/.agents/scripts/prune-baseline-orphans.js +0 -181
  657. package/.agents/scripts/run-coverage.js +0 -197
  658. package/.agents/scripts/run-lint.js +0 -133
  659. package/.agents/scripts/run-test-profile.js +0 -129
  660. package/.agents/scripts/run-verify.js +0 -125
  661. package/.agents/scripts/test-isolate.js +0 -55
  662. 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
  */