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,74 +1,31 @@
1
1
  /**
2
- * git-utils.js — Shared Git Shell Utilities
3
- *
4
- * Centralizes all Git subprocess invocations for the orchestration
5
- * engine, eliminating duplicated wrappers across the codebase.
6
- *
7
- * Two flavours are provided. Choose based on whether a non-zero git exit
8
- * code represents a bug (use `gitSync`) or a recoverable runtime state
9
- * (use `gitSpawn`):
10
- *
11
- * - `gitSync(cwd, ...args)` — throws on non-zero exit; returns trimmed
12
- * stdout. Use when the operation must succeed for the caller to
13
- * proceed (e.g. `rev-parse HEAD`, `merge-base --is-ancestor` inside a
14
- * critical-path check). A non-zero exit is treated as a bug or a
15
- * corrupted repo state, and the throw propagates to the caller's
16
- * existing error path.
17
- *
18
- * - `gitSpawn(cwd, ...args)` — never throws; returns a {@link GitResult}
19
- * object. Use when the caller needs to inspect or recover from the
20
- * non-zero case (e.g. `merge-base --is-ancestor` as a boolean check,
21
- * `branch -D` where "no such branch" is acceptable, fetch/push retry
22
- * loops where the caller decides whether to retry on stderr content).
23
- *
24
- * The two functions are intentional siblings — they share argument shape so
25
- * either can be substituted at a call site by changing the import. Do not
26
- * unify into a single `git({ throwOnNonZero })` until the call-site split
27
- * shows roughly even use of each contract.
2
+ * git-utils.js — git runners: `gitSync` throws on failure (a bug);
3
+ * `gitSpawn` returns a {@link GitResult} for recoverable failures.
28
4
  */
29
5
 
30
6
  import { execFileSync, spawnSync } from 'node:child_process';
31
7
  import { execFileCapture, spawnCapture } from './child-exec.js';
32
8
 
33
9
  /**
34
- * Result of a `gitSpawn` invocation. Field semantics match `child_process.spawnSync`
35
- * with two normalisations: `status` is coerced to `1` when null (e.g. when
36
- * the child terminated by signal), and stdout/stderr are trimmed.
10
+ * `status` is 1 when null (signal); output is trimmed.
37
11
  *
38
12
  * @typedef {object} GitResult
39
- * @property {number} status - Process exit code (0 = success).
40
- * @property {string} stdout - Trimmed stdout.
41
- * @property {string} stderr - Trimmed stderr.
13
+ * @property {number} status
14
+ * @property {string} stdout
15
+ * @property {string} stderr
42
16
  */
43
17
 
44
18
  let _execFileSync = execFileSync;
45
19
  let _spawnSync = spawnSync;
46
20
 
47
21
  /**
48
- * Memoized cleaned env shared by every `gitSync` / `gitSpawn` /
49
- * `createGitInterface` invocation in this process. Built lazily on first
50
- * use so cold imports pay nothing. Call sites pass the object through to
51
- * `child_process` only — none mutate `GIT_*` (or any other key) between
52
- * git calls, so reuse is safe. Tests that mutate `process.env` and need
53
- * a fresh snapshot must call {@link __resetCleanGitEnv}.
54
- *
55
22
  * @type {NodeJS.ProcessEnv | null}
56
23
  */
57
24
  let _cleanGitEnv = null;
58
25
 
59
26
  /**
60
- * Build a child-process env that drops every `GIT_*` variable inherited from
61
- * the parent. When this module's helpers run inside a git hook (e.g. husky
62
- * pre-push) the parent git invocation exports GIT_DIR / GIT_WORK_TREE /
63
- * GIT_INDEX_FILE / GIT_PREFIX / GIT_COMMON_DIR / etc. Those env vars
64
- * override the explicit `cwd` we pass, so a `gitSync(tmpdir, 'init')` ends
65
- * up operating on the parent worktree's `.git` rather than `tmpdir`. Tests
66
- * that spin up real git fixtures break reproducibly under that shape.
67
- *
68
- * Stripping every `GIT_*` is broader than strictly necessary but cheap and
69
- * impossible to drift out of sync with future git releases. The result is
70
- * memoized per process (see `_cleanGitEnv`); author/committer identity is
71
- * restored via per-call `env:` overrides where required.
27
+ * Memoised env with every `GIT_*` dropped: inside a git hook, the inherited
28
+ * GIT_DIR / GIT_WORK_TREE override the `cwd` we pass.
72
29
  *
73
30
  * @returns {NodeJS.ProcessEnv}
74
31
  */
@@ -82,26 +39,15 @@ function cleanGitEnv() {
82
39
  return _cleanGitEnv;
83
40
  }
84
41
 
85
- /**
86
- * Drop the memoized cleaned env so the next git call rebuilds from
87
- * `process.env`. Testing-only seam — not part of the stable API.
88
- */
89
42
  export function __resetCleanGitEnv() {
90
43
  _cleanGitEnv = null;
91
44
  }
92
45
 
93
46
  /**
94
- * Override git runners. Testing-only seam — not part of the stable API.
95
- *
96
- * Production code must not call this. The double-underscore prefix is the
97
- * contract: `__setGitRunners` exists so the test suite can inject mock
98
- * child-process runners without requiring a broader DI refactor of every
99
- * `gitSync`/`gitSpawn` call site. If more injection points become needed,
100
- * replace this seam with a proper `createGitRunner({exec, spawn})` factory
101
- * and thread it through the module graph.
47
+ * Test-only; prefer {@link createGitInterface}.
102
48
  *
103
- * @param {typeof execFileSync} exec - Mock for `execFileSync`.
104
- * @param {typeof spawnSync} spawn - Mock for `spawnSync`.
49
+ * @param {typeof execFileSync} exec
50
+ * @param {typeof spawnSync} spawn
105
51
  */
106
52
  export function __setGitRunners(exec, spawn) {
107
53
  _execFileSync = exec;
@@ -109,18 +55,10 @@ export function __setGitRunners(exec, spawn) {
109
55
  }
110
56
 
111
57
  /**
112
- * The **single** throwing git runner. Both the module-level {@link gitSync} and
113
- * the interface returned by {@link createGitInterface} route through this —
114
- * they differ only in which `execFileSync` they hand it.
115
- *
116
- * Buffer, shell and encoding policy belong to
117
- * [`child-exec.js`](child-exec.js); this function contributes only the git
118
- * specifics (argv prefix, cwd, scrubbed env).
119
- *
120
58
  * @param {typeof execFileSync} exec
121
59
  * @param {string} cwd
122
60
  * @param {string[]} args
123
- * @returns {string} Trimmed stdout text.
61
+ * @returns {string}
124
62
  */
125
63
  function runGitSync(exec, cwd, args) {
126
64
  return String(
@@ -134,10 +72,6 @@ function runGitSync(exec, cwd, args) {
134
72
  }
135
73
 
136
74
  /**
137
- * The **single** non-throwing git runner — the `spawnSync` counterpart of
138
- * {@link runGitSync}, normalising `status`/stdout/stderr into a
139
- * {@link GitResult} via the shared exec surface.
140
- *
141
75
  * @param {typeof spawnSync} spawn
142
76
  * @param {string} cwd
143
77
  * @param {string[]} args
@@ -152,23 +86,17 @@ function runGitSpawn(spawn, cwd, args) {
152
86
  }
153
87
 
154
88
  /**
155
- * Run a git command synchronously, returning trimmed stdout.
156
- * Throws an Error if the command exits with a non-zero code.
157
- *
158
- * @param {string} cwd - Working directory for the git process.
159
- * @param {...string} args - Git sub-command and arguments.
160
- * @returns {string} Trimmed stdout text.
89
+ * @param {string} cwd
90
+ * @param {...string} args
91
+ * @returns {string} Trimmed stdout.
161
92
  */
162
93
  export function gitSync(cwd, ...args) {
163
94
  return runGitSync(_execFileSync, cwd, args);
164
95
  }
165
96
 
166
97
  /**
167
- * Run a git command synchronously, returning a result object.
168
- * Never throws — callers must inspect `status` to detect failure.
169
- *
170
- * @param {string} cwd - Working directory for the git process.
171
- * @param {...string} args - Git sub-command and arguments.
98
+ * @param {string} cwd
99
+ * @param {...string} args
172
100
  * @returns {GitResult}
173
101
  */
174
102
  export function gitSpawn(cwd, ...args) {
@@ -176,18 +104,13 @@ export function gitSpawn(cwd, ...args) {
176
104
  }
177
105
 
178
106
  /**
179
- * Build a git interface closed over injected child-process runners. Preferred
180
- * seam for callers that want explicit injection without touching the
181
- * module-global `__setGitRunners` state (which is a test-only override that
182
- * leaks between suites). The returned object has the same shape as this
183
- * module's namespace exports (`gitSync`, `gitSpawn`, `gitFetchWithRetry`,
184
- * `gitPullWithRetry`) so it is drop-in as a `ctx.git` replacement.
107
+ * Same shape as this module's exports, over injected runners (`ctx.git`).
185
108
  *
186
109
  * @param {object} [deps]
187
- * @param {typeof execFileSync} [deps.exec] - Defaults to real `execFileSync`.
188
- * @param {typeof spawnSync} [deps.spawn] - Defaults to real `spawnSync`.
189
- * @param {(ms: number) => Promise<void>} [deps.sleep] - Retry backoff sleep.
190
- * @param {number} [deps.jitter] - Jitter factor for retry backoff.
110
+ * @param {typeof execFileSync} [deps.exec]
111
+ * @param {typeof spawnSync} [deps.spawn]
112
+ * @param {(ms: number) => Promise<void>} [deps.sleep]
113
+ * @param {number} [deps.jitter]
191
114
  */
192
115
  export function createGitInterface(deps = {}) {
193
116
  const exec = deps.exec ?? execFileSync;
@@ -214,12 +137,7 @@ export function createGitInterface(deps = {}) {
214
137
  };
215
138
  }
216
139
 
217
- /**
218
- * Known lock-contention error signatures that occur when two worktrees
219
- * fetch concurrently against the same repo. Matching any of these is the
220
- * only condition under which `gitFetchWithRetry` will re-attempt —
221
- * unrelated fetch failures surface immediately.
222
- */
140
+ /** Concurrent-worktree lock contention — the only failures retried. */
223
141
  const PACKED_REFS_CONTENTION_PATTERNS = [
224
142
  /packed-refs\.lock/i,
225
143
  /cannot lock ref/i,
@@ -233,8 +151,6 @@ function isPackedRefsContention(stderr) {
233
151
  }
234
152
 
235
153
  /**
236
- * Real wall-clock sleep — the default backoff delay for both the module-level
237
- * retry helpers and {@link createGitInterface}.
238
154
  * @param {number} ms
239
155
  * @returns {Promise<void>}
240
156
  */
@@ -243,47 +159,32 @@ function defaultSleep(ms) {
243
159
  }
244
160
 
245
161
  /**
246
- * Sleep helper for retry backoff. Overridable via `__setSleep` so tests
247
- * can skip real wall-clock delays without relying on node:test timer mocks.
248
162
  * @type {(ms: number) => Promise<void>}
249
163
  */
250
164
  let _sleep = defaultSleep;
251
165
  let _jitterFactor = 0.5;
252
166
 
253
167
  /**
254
- * Test-only seam: replace the sleep implementation used by
255
- * `gitFetchWithRetry` to avoid real backoff in unit tests.
256
168
  * @param {(ms: number) => Promise<void>} fn
257
- * @param {{ jitter?: number }} [opts] - Override jitter factor (default: 0 for mocks).
169
+ * @param {{ jitter?: number }} [opts]
258
170
  */
259
171
  export function __setSleep(fn, opts = {}) {
260
172
  _sleep = fn;
261
173
  _jitterFactor = opts.jitter ?? 0;
262
174
  }
263
175
 
264
- /**
265
- * Backoff schedule for {@link gitWithContentionRetry}: 250ms, 500ms, 1000ms
266
- * (3 retries → 4 attempts total).
267
- */
176
+ /** 3 retries → 4 attempts total. */
268
177
  const CONTENTION_BACKOFF_MS = Object.freeze([250, 500, 1000]);
269
178
 
270
179
  /**
271
- * The **single** bounded retry loop for git commands that can hit packed-refs
272
- * lock contention. Only contention signatures trigger a retry — non-contention
273
- * failures surface immediately, and success short-circuits the loop.
274
- *
275
- * Deliberately no global lock — a mutex would erase the parallelism the
276
- * worktree-isolation model is designed to enable. The schedule and the jitter
277
- * policy live only here, so a backoff tuning change has a single point of
278
- * application: the module-level `gitFetchWithRetry` / `gitPullWithRetry` pass
279
- * the `_sleep` / `_jitterFactor` seams, and {@link createGitInterface} passes
280
- * its injected equivalents.
180
+ * Bounded retry on lock contention only. Deliberately no global lock — a
181
+ * mutex would erase the parallelism worktree isolation exists for.
281
182
  *
282
183
  * @param {{ spawnGit: (cwd: string, ...args: string[]) => GitResult,
283
184
  * sleep: (ms: number) => Promise<void>, jitterFactor: number }} runners
284
185
  * @param {string} cwd
285
- * @param {string[]} argvPrefix - Leading git argv (e.g. `['fetch']`).
286
- * @param {string[]} args - Trailing arguments (e.g. `['origin']`).
186
+ * @param {string[]} argvPrefix
187
+ * @param {string[]} args
287
188
  * @returns {Promise<{ status: number, stdout: string, stderr: string, attempts: number }>}
288
189
  */
289
190
  async function gitWithContentionRetry(
@@ -310,9 +211,7 @@ async function gitWithContentionRetry(
310
211
  }
311
212
 
312
213
  /**
313
- * The module-level retry runners — the `__setSleep`-overridable seams bound to
314
- * the module-global {@link gitSpawn}. Read lazily so `__setSleep` and
315
- * `__setGitRunners` still take effect after import.
214
+ * Read lazily so `__setSleep` / `__setGitRunners` take effect after import.
316
215
  *
317
216
  * @returns {{ spawnGit: typeof gitSpawn, sleep: (ms: number) => Promise<void>,
318
217
  * jitterFactor: number }}
@@ -322,11 +221,8 @@ function moduleRetryRunners() {
322
221
  }
323
222
 
324
223
  /**
325
- * Run `git fetch …` with the bounded packed-refs-contention retry loop
326
- * (see `gitWithContentionRetry`).
327
- *
328
224
  * @param {string} cwd
329
- * @param {...string} args - Arguments after `fetch` (e.g. `'origin'`).
225
+ * @param {...string} args
330
226
  * @returns {Promise<{ status: number, stdout: string, stderr: string, attempts: number }>}
331
227
  */
332
228
  export function gitFetchWithRetry(cwd, ...args) {
@@ -334,12 +230,8 @@ export function gitFetchWithRetry(cwd, ...args) {
334
230
  }
335
231
 
336
232
  /**
337
- * Run `git pull --rebase …` with the same bounded retry loop as
338
- * `gitFetchWithRetry`. Packed-refs contention can occur during pulls
339
- * just as during fetches — particularly in multi-worktree setups.
340
- *
341
233
  * @param {string} cwd
342
- * @param {...string} args - Arguments after `pull --rebase` (e.g. `'origin', 'main'`).
234
+ * @param {...string} args
343
235
  * @returns {Promise<{ status: number, stdout: string, stderr: string, attempts: number }>}
344
236
  */
345
237
  export function gitPullWithRetry(cwd, ...args) {
@@ -352,12 +244,8 @@ export function gitPullWithRetry(cwd, ...args) {
352
244
  }
353
245
 
354
246
  /**
355
- * Sanitize a string into a URL/branch-safe slug.
356
- * Lowercases, replaces non-alphanumeric characters with hyphens,
357
- * collapses multiple hyphens, and trims leading/trailing hyphens.
358
- *
359
- * @param {string} text - Raw text to slugify.
360
- * @returns {string} Sanitized slug.
247
+ * @param {string} text
248
+ * @returns {string}
361
249
  */
362
250
  export function slugify(text) {
363
251
  return text
@@ -368,8 +256,6 @@ export function slugify(text) {
368
256
  }
369
257
 
370
258
  /**
371
- * Resolves the canonical branch name for a Story.
372
- * v5 Standard: story-[STORY_ID]
373
259
  * @param {string|number} storyId
374
260
  * @returns {string}
375
261
  */
@@ -382,19 +268,11 @@ export function getStoryBranch(storyId) {
382
268
  return `story-${id}`;
383
269
  }
384
270
 
385
- /**
386
- * Canonical `story-<id>` branch name matcher. Single source of truth for the
387
- * Story-branch shape — `parseStoryBranch` and `isStoryBranch` both close over
388
- * this so call sites never re-author the regex inline.
389
- */
390
271
  const STORY_BRANCH_RE = /^story-(\d+)$/;
391
272
 
392
273
  /**
393
- * Parse a canonical Story branch name into its numeric Story ID.
394
- *
395
- * @param {string} name - Branch name to inspect (e.g. `story-3334`).
396
- * @returns {number|null} The Story ID when `name` matches `story-<id>`,
397
- * otherwise `null`.
274
+ * @param {string} name
275
+ * @returns {number|null}
398
276
  */
399
277
  export function parseStoryBranch(name) {
400
278
  if (typeof name !== 'string') return null;
@@ -403,9 +281,7 @@ export function parseStoryBranch(name) {
403
281
  }
404
282
 
405
283
  /**
406
- * Predicate: is `name` a canonical `story-<id>` branch name?
407
- *
408
- * @param {string} name - Branch name to test.
284
+ * @param {string} name
409
285
  * @returns {boolean}
410
286
  */
411
287
  export function isStoryBranch(name) {
@@ -1,58 +1,18 @@
1
1
  /**
2
- * framework-repo.js — the follow-up **ownership routing** SSOT: which
3
- * repository a finding, a retro proposal, or a CI-gap intake issue is filed
4
- * in, and what to say when that question has no answer.
5
- *
6
- * ## Three buckets, not two
7
- *
8
- * A defect surfaced by one repository's CI is not necessarily that
9
- * repository's to fix. Ownership splits three ways:
10
- *
11
- * - `consumer` — the repo the run is standing in (`github.owner`/`repo`).
12
- * - `framework` — the Mandrel framework itself
13
- * (`github.followUpRepos.framework`, defaulted to the mirror constant).
14
- * - `platform` — a shared platform / infrastructure repo that neither of
15
- * the other two owns: a shared base config, a runner fleet, a
16
- * cross-repo toolchain (`github.followUpRepos.platform`, **no default**
17
- * — nothing can guess a shared repo's slug).
18
- *
19
- * ## Why there is no `?? currentRepo` fallback
20
- *
21
- * The two-bucket predecessor resolved a framework-tagged item with
22
- * `frameworkRepo ? frameworkRepo : currentRepo`. When the config key was
23
- * absent that expression filed framework-owned work into the **consumer's**
24
- * repo while the rendered retro claimed it went to the framework repo — a
25
- * silent mis-file, recorded in `retro-proposals-graduator.js`'s own file-top
26
- * comment. The failure was invisible in this repository precisely because
27
- * consumer === framework here.
28
- *
29
- * So an unresolvable bucket is a first-class outcome, never a fallback:
30
- * `routeOwnership` returns `routable: false` plus the `missingKey` that
31
- * would fix it, and every caller must decide **out loud** what to do with
32
- * that — file locally and say so in the body (the CI-gap filer), or defer
33
- * and surface it where an operator will see it (the graduators). What no
34
- * caller may do is route it somewhere plausible and stay quiet.
2
+ * framework-repo.js — ownership routing SSOT across `consumer`, `framework`
3
+ * and `platform` buckets. Deliberately no `?? currentRepo` fallback: an
4
+ * unresolvable bucket is `routable: false` + `missingKey`, and the caller must
5
+ * say out loud what it did instead of silently mis-filing.
35
6
  */
36
7
 
37
- /**
38
- * Canonical framework repository slug, used when the consumer config does
39
- * not supply `github.followUpRepos.framework`. The `framework` bucket is the
40
- * one bucket with a knowable default: it is this framework.
41
- */
42
8
  export const DEFAULT_FRAMEWORK_REPO = 'dsj1984/mandrel';
43
9
 
44
- /** The closed ownership-bucket set. */
45
10
  export const OWNERSHIP_BUCKETS = Object.freeze([
46
11
  'consumer',
47
12
  'framework',
48
13
  'platform',
49
14
  ]);
50
15
 
51
- /**
52
- * The `.agentrc.json` key behind each bucket, quoted verbatim when a bucket
53
- * is unroutable so the operator is told which key to set rather than that
54
- * "routing failed".
55
- */
56
16
  const OWNERSHIP_CONFIG_KEYS = Object.freeze({
57
17
  consumer: 'github.owner / github.repo',
58
18
  framework: 'github.followUpRepos.framework',
@@ -60,11 +20,6 @@ const OWNERSHIP_CONFIG_KEYS = Object.freeze({
60
20
  });
61
21
 
62
22
  /**
63
- * Parse an `"<owner>/<repo>"` slug into `{ owner, repo }`, or `null` when the
64
- * slug is absent, empty, or malformed. A `null` return is the signal an
65
- * unroutable bucket is built from — never a reason to substitute another
66
- * repo.
67
- *
68
23
  * @param {string|null|undefined} slug
69
24
  * @returns {{ owner: string, repo: string } | null}
70
25
  */
@@ -78,9 +33,6 @@ export function parseRepoSlug(slug) {
78
33
  }
79
34
 
80
35
  /**
81
- * Render a `{ owner, repo }` pair back to its slug, or `null` when the pair
82
- * is absent/malformed.
83
- *
84
36
  * @param {{ owner?: string, repo?: string }|null|undefined} repo
85
37
  * @returns {string|null}
86
38
  */
@@ -95,15 +47,7 @@ export function formatRepoSlug(repo) {
95
47
  }
96
48
 
97
49
  /**
98
- * Resolve every ownership bucket from a resolved `.agentrc` config.
99
- *
100
- * `framework` falls back to {@link DEFAULT_FRAMEWORK_REPO}; `platform` has no
101
- * default and stays `null` when unconfigured; `consumer` is `null` when
102
- * `github.owner`/`github.repo` are unset. A `null` bucket is an honest
103
- * "unknown", which {@link routeOwnership} turns into a named, reportable
104
- * outcome.
105
- *
106
- * @param {object} [config] — resolved `.agentrc` config.
50
+ * @param {object} [config]
107
51
  * @returns {{ consumer: ({owner: string, repo: string}|null), framework: ({owner: string, repo: string}|null), platform: ({owner: string, repo: string}|null) }}
108
52
  */
109
53
  export function resolveOwnershipRepos(config) {
@@ -121,19 +65,12 @@ export function resolveOwnershipRepos(config) {
121
65
  }
122
66
 
123
67
  /**
124
- * Route one ownership bucket to the repository its work belongs in.
125
- *
126
- * Total: an unknown bucket, an absent repos map, and an unconfigured bucket
127
- * all resolve to `routable: false` with the `missingKey` that would fix it —
128
- * never to a substituted repository.
68
+ * Total: never a substituted repo.
129
69
  *
130
70
  * @param {object} opts
131
- * @param {string} opts.bucket — one of {@link OWNERSHIP_BUCKETS}.
71
+ * @param {string} opts.bucket
132
72
  * @param {{consumer?: object|null, framework?: object|null, platform?: object|null}} opts.repos
133
- * — resolved buckets, from {@link resolveOwnershipRepos} or assembled by a
134
- * caller that already holds the repo objects.
135
- * @param {{owner: string, repo: string}|null} [opts.currentRepo] — the repo
136
- * the run is standing in, used only to report `crossRepo`.
73
+ * @param {{owner: string, repo: string}|null} [opts.currentRepo] — for `crossRepo`.
137
74
  * @returns {{ bucket: string, routedRepo: ({owner: string, repo: string}|null), routable: boolean, missingKey: (string|null), crossRepo: boolean }}
138
75
  */
139
76
  export function routeOwnership({ bucket, repos, currentRepo = null } = {}) {
@@ -1,21 +1,6 @@
1
- // .agents/scripts/lib/github-url.js
2
1
  /**
3
- * Shared GitHub URL utilities. Consolidates the `parsePrNumberFromUrl` helper
4
- * that was triplicated across `finalizer.js`, `watcher.js`, and
5
- * `code-review.js`, each with a subtly different regex. Story #3649.
6
- */
7
-
8
- /**
9
- * Extract the PR number from a GitHub PR URL.
10
- *
11
- * Accepts any URL whose path contains `/pull/<digits>` — the fragment
12
- * (`#diff-…`), query string (`?diff=split`), and trailing slash are all
13
- * ignored. Returns `null` when the URL is not a string, does not contain
14
- * a `/pull/` segment, or when the parsed integer is ≤ 0.
15
- *
16
- * This is the canonical implementation; the inline copies in `finalizer.js`,
17
- * `watcher.js`, and `code-review.js` have been deleted in favour of this
18
- * function.
2
+ * Ignores fragment, query and trailing slash; `null` for no `/pull/` or a
3
+ * non-positive number.
19
4
  *
20
5
  * @param {string|null|undefined} prUrl
21
6
  * @returns {number|null}
@@ -1,19 +1,7 @@
1
1
  /**
2
- * import-graph.js — the shared static-import graph seam (Story #4902).
3
- *
4
- * Extracted verbatim from `check-arch-cycles.js`, which owned the only
5
- * import-graph builder in the repository and kept it private to its own
6
- * cycle ratchet. A second consumer now needs the same graph for a very
7
- * different question — `audit-baselines.js` ranks hotspot files by import
8
- * in-degree — and re-deriving "which module imports which" a second time
9
- * would guarantee the two answers drift.
10
- *
11
- * Note this is a **module** graph, not the task/DAG graph in `lib/Graph.js`;
12
- * the two are unrelated despite the shared word.
13
- *
14
- * The extraction is behaviour-preserving: `check-arch-cycles.js` imports
15
- * these helpers and re-exports them, so its public surface (and the ratchet's
16
- * output) is unchanged.
2
+ * import-graph.js — the shared static-import (module) graph, used by the
3
+ * cycle ratchet and the hotspot in-degree ranking so both read one answer.
4
+ * Unrelated to the task DAG in `lib/Graph.js`.
17
5
  *
18
6
  * @module lib/import-graph
19
7
  */
@@ -22,21 +10,15 @@ import fs from 'node:fs';
22
10
  import path from 'node:path';
23
11
 
24
12
  /**
25
- * Default scan roots making up the project's distributed surface — the
26
- * directories published to npm via `package.json` `files[]`. Resolving
27
- * them into one graph (relativized against the repo root) means a cycle
28
- * crossing two roots is visible to consumers of the graph.
13
+ * The npm-published roots, resolved into one graph so cross-root cycles show.
29
14
  *
30
15
  * @type {string[]}
31
16
  */
32
17
  export const DEFAULT_ROOTS = [path.join('.agents', 'scripts'), 'bin', 'lib'];
33
18
 
34
19
  /**
35
- * Recursively collect `.js` files under `rootDir`, skipping
36
- * `node_modules`. Returns absolute paths, sorted for determinism.
37
- *
38
20
  * @param {string} rootDir
39
- * @returns {string[]}
21
+ * @returns {string[]} absolute paths, sorted
40
22
  */
41
23
  export function collectJsFiles(rootDir) {
42
24
  const out = [];
@@ -64,8 +46,6 @@ export function collectJsFiles(rootDir) {
64
46
  const IMPORT_RE = /from\s+['"](\.\.?\/[^'"]+\.js)['"]/g;
65
47
 
66
48
  /**
67
- * Pure helper: extract relative static-import specifiers from source text.
68
- *
69
49
  * @param {string} source
70
50
  * @returns {string[]}
71
51
  */
@@ -78,12 +58,9 @@ export function parseRelativeImports(source) {
78
58
  }
79
59
 
80
60
  /**
81
- * Build a directed import graph over the given files. Node identity is the
82
- * file path relative to `rootDir`, posix-separated, so the graph (and any
83
- * cycles found in it) serializes identically across platforms. Edges that
84
- * resolve outside the scanned file set are dropped.
61
+ * Posix ids relative to `rootDir` (platform-stable); external edges dropped.
85
62
  *
86
- * @param {string[]} files absolute paths
63
+ * @param {string[]} files
87
64
  * @param {string} rootDir
88
65
  * @param {{ readFile?: (p: string) => string }} [opts]
89
66
  * @returns {Map<string, string[]>}
@@ -116,12 +93,10 @@ export function buildGraph(files, rootDir, { readFile } = {}) {
116
93
  }
117
94
 
118
95
  /**
119
- * Build the whole-repository import graph by scanning the roots that exist
120
- * under `cwd`. Returns `null` when none of the roots is present — the
121
- * "no resolvable import graph" degradation every consumer must tolerate
122
- * rather than treating an absent graph as a graph with no edges.
96
+ * `null` when no root exists — callers must not treat that as an edgeless
97
+ * graph.
123
98
  *
124
- * @param {string} cwd repository root the ids are relativized against
99
+ * @param {string} cwd
125
100
  * @param {{ roots?: string[] }} [opts]
126
101
  * @returns {Map<string, string[]> | null}
127
102
  */
@@ -136,9 +111,7 @@ export function resolveRepoGraph(cwd, { roots = DEFAULT_ROOTS } = {}) {
136
111
  }
137
112
 
138
113
  /**
139
- * Count inbound edges per node. Nodes with no inbound edge are present in
140
- * the result with a count of 0, so callers never have to distinguish
141
- * "unknown module" from "module nothing imports".
114
+ * Every node is present (0 when nothing imports it).
142
115
  *
143
116
  * @param {Map<string, string[]> | null} graph
144
117
  * @returns {Map<string, number>} empty when `graph` is null
@@ -1,14 +1,8 @@
1
1
  /**
2
- * Tokenize + spawn the operator-supplied install command in argv form
3
- * (shell:true is only used on Windows because well-known package managers
4
- * ship as `.cmd` shims and Node 18.20+/20.10+/22+ refuses to spawn them
5
- * with shell:false under CVE-2024-27980). Tokenization removes the
6
- * single-string injection vector — args are escaped individually even
7
- * when shell:true is required for binary resolution.
8
- *
9
- * Whitespace tokenization (no quote handling) is deliberate: the input
10
- * contract is a simple `binary arg arg …` form. Operators that need
11
- * quoted args can pass a `runInstall` override directly.
2
+ * Spawn the operator's install command in argv form, removing the
3
+ * single-string injection vector. Shell only on Windows (`.cmd` shims,
4
+ * CVE-2024-27980). Whitespace tokenization with no quoting is the contract;
5
+ * quoted args need a `runInstall` override.
12
6
  */
13
7
 
14
8
  import { spawnSync as defaultSpawnSync } from 'node:child_process';
@@ -32,9 +26,6 @@ function parseInstallCmd(installCmd) {
32
26
  }
33
27
 
34
28
  /**
35
- * Default runInstall implementation. Tokenizes `installCmd`, then spawns
36
- * synchronously with the correct shell flag per platform.
37
- *
38
29
  * @param {string} installCmd
39
30
  * @param {string} cwd
40
31
  * @param {{ spawnSync?: typeof defaultSpawnSync }} [deps] — test seam
@@ -1,22 +1,9 @@
1
1
  /**
2
- * json-utils.js — shared JSON-shape helpers.
3
- *
4
- * Hoisted out of five callers (`lib/baselines/writer.js`,
5
- * `lib/config/defaults.js`, `lib/signals/schema.js`) which
6
- * shipped functionally-equivalent copies of these predicates. See Story
7
- * #2464.
8
- *
9
- * The helpers are scoped to JSON-shaped data — numbers, strings, booleans,
10
- * null, arrays, and plain objects. They do not handle Dates, Maps, Sets,
11
- * RegExps, or class instances; callers either JSON-roundtrip their inputs
12
- * or only ever pass JSON-equivalent values (the on-disk baseline writer
13
- * and the config defaults module both fall in the second bucket).
2
+ * json-utils.js — predicates for JSON-shaped data only (no Dates, Maps,
3
+ * Sets, RegExps or class instances).
14
4
  */
15
5
 
16
6
  /**
17
- * Return true when `v` is a plain object (not null, not an array). Used
18
- * by readers and aggregators to defensively pre-flight record shapes.
19
- *
20
7
  * @param {unknown} v
21
8
  * @returns {boolean}
22
9
  */
@@ -25,9 +12,7 @@ export function isObject(v) {
25
12
  }
26
13
 
27
14
  /**
28
- * Structural deep-equality for JSON-shaped data. Object key order is
29
- * ignored. Array order is significant. NaN compares unequal (matches
30
- * `===` semantics; callers must not pass NaN).
15
+ * Key order ignored, array order significant; NaN compares unequal.
31
16
  *
32
17
  * @param {unknown} a
33
18
  * @param {unknown} b