mandrel 2.59.0 → 2.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (678) hide show
  1. package/.agents/README.md +21 -19
  2. package/.agents/agents/acceptance-critic.md +24 -43
  3. package/.agents/agents/story-worker.md +20 -21
  4. package/.agents/docs/agentrc-reference.json +5 -84
  5. package/.agents/docs/configuration.md +48 -132
  6. package/.agents/docs/workflows.md +2 -2
  7. package/.agents/instructions.md +5 -8
  8. package/.agents/rules/ci-remediation.md +41 -8
  9. package/.agents/rules/gherkin-standards.md +4 -0
  10. package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
  11. package/.agents/schemas/agentrc.schema.json +16 -496
  12. package/.agents/schemas/story-deliver-terminal.schema.json +13 -3
  13. package/.agents/schemas/validation-evidence.schema.json +2 -1
  14. package/.agents/scripts/README.md +23 -13
  15. package/.agents/scripts/acceptance-eval.js +35 -169
  16. package/.agents/scripts/agents-bootstrap-github.js +27 -129
  17. package/.agents/scripts/apply-quality-bootstrap.js +4 -40
  18. package/.agents/scripts/audit-baselines.js +6 -27
  19. package/.agents/scripts/audit-labels-bootstrap.js +5 -29
  20. package/.agents/scripts/audit-to-stories.js +91 -361
  21. package/.agents/scripts/boot-sweep.js +19 -72
  22. package/.agents/scripts/bootstrap.js +74 -395
  23. package/.agents/scripts/ceremony-derive.js +10 -41
  24. package/.agents/scripts/check-arch-cycles.js +14 -64
  25. package/.agents/scripts/check-baselines.js +8 -48
  26. package/.agents/scripts/check-context-budget.js +105 -311
  27. package/.agents/scripts/check-cyclomatic.js +12 -44
  28. package/.agents/scripts/check-dead-exports.js +13 -64
  29. package/.agents/scripts/check-doc-links.js +38 -186
  30. package/.agents/scripts/check-gherkin-corpus.js +24 -127
  31. package/.agents/scripts/check-test-temp-hygiene.js +28 -169
  32. package/.agents/scripts/coverage-capture.js +34 -98
  33. package/.agents/scripts/deliver-light.js +25 -171
  34. package/.agents/scripts/deliver-recover.js +6 -42
  35. package/.agents/scripts/deliver-run.js +534 -0
  36. package/.agents/scripts/diagnose-friction.js +24 -116
  37. package/.agents/scripts/drain-pending-cleanup.js +1 -1
  38. package/.agents/scripts/evidence-gate.js +23 -85
  39. package/.agents/scripts/file-ci-gap.js +57 -49
  40. package/.agents/scripts/generate-config-docs.js +30 -170
  41. package/.agents/scripts/generate-lens-checklists.js +8 -52
  42. package/.agents/scripts/generate-skills-index.js +14 -112
  43. package/.agents/scripts/generate-workflows-doc.js +10 -70
  44. package/.agents/scripts/git-cleanup.js +2 -34
  45. package/.agents/scripts/lib/Graph.js +24 -81
  46. package/.agents/scripts/lib/ITicketingProvider.js +47 -143
  47. package/.agents/scripts/lib/Logger.js +14 -76
  48. package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
  49. package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
  50. package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
  51. package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
  52. package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
  53. package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
  54. package/.agents/scripts/lib/audit-baselines/read.js +3 -16
  55. package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
  56. package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
  57. package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
  58. package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
  59. package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
  60. package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
  61. package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
  62. package/.agents/scripts/lib/audit-suite/findings.js +12 -52
  63. package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
  64. package/.agents/scripts/lib/audit-suite/index.js +1 -15
  65. package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
  66. package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
  67. package/.agents/scripts/lib/audit-suite/runner.js +13 -43
  68. package/.agents/scripts/lib/audit-suite/selector.js +49 -349
  69. package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
  70. package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
  71. package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
  72. package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
  73. package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
  74. package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
  75. package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
  76. package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
  77. package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
  78. package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
  79. package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
  80. package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
  81. package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
  82. package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
  83. package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
  84. package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
  85. package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
  86. package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
  87. package/.agents/scripts/lib/baseline-loader.js +12 -51
  88. package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
  89. package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
  90. package/.agents/scripts/lib/baselines/components.js +10 -61
  91. package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
  92. package/.agents/scripts/lib/baselines/crap-preview-incremental.js +7 -19
  93. package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
  94. package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
  95. package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
  96. package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
  97. package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
  98. package/.agents/scripts/lib/baselines/envelope.js +13 -129
  99. package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
  100. package/.agents/scripts/lib/baselines/git-base.js +23 -142
  101. package/.agents/scripts/lib/baselines/kernel.js +11 -111
  102. package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
  103. package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
  104. package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
  105. package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
  106. package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
  107. package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
  108. package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
  109. package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
  110. package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
  111. package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
  112. package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
  113. package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
  114. package/.agents/scripts/lib/baselines/path-canon.js +19 -128
  115. package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
  116. package/.agents/scripts/lib/baselines/reader.js +14 -107
  117. package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
  118. package/.agents/scripts/lib/baselines/scope.js +11 -135
  119. package/.agents/scripts/lib/baselines/writer.js +16 -149
  120. package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
  121. package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
  122. package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
  123. package/.agents/scripts/lib/bdd-step-index.js +26 -100
  124. package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
  125. package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
  126. package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
  127. package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
  128. package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
  129. package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
  130. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
  131. package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
  132. package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
  133. package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
  134. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
  135. package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
  136. package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
  137. package/.agents/scripts/lib/bootstrap/summary.js +1 -8
  138. package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
  139. package/.agents/scripts/lib/branch-name-guard.js +4 -23
  140. package/.agents/scripts/lib/changed-files.js +39 -121
  141. package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
  142. package/.agents/scripts/lib/checks/index.js +18 -101
  143. package/.agents/scripts/lib/checks/loop-health.js +11 -53
  144. package/.agents/scripts/lib/checks/state.js +16 -91
  145. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
  146. package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
  147. package/.agents/scripts/lib/child-exec.js +39 -108
  148. package/.agents/scripts/lib/cli/standard-args.js +9 -116
  149. package/.agents/scripts/lib/cli-args.js +31 -146
  150. package/.agents/scripts/lib/cli-usage.js +5 -27
  151. package/.agents/scripts/lib/cli-utils.js +2 -12
  152. package/.agents/scripts/lib/close-validation/commands.js +13 -76
  153. package/.agents/scripts/lib/close-validation/gates.js +92 -331
  154. package/.agents/scripts/lib/close-validation/process.js +121 -151
  155. package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
  156. package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
  157. package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
  158. package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
  159. package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
  160. package/.agents/scripts/lib/close-validation/runner.js +53 -110
  161. package/.agents/scripts/lib/command-header.js +6 -28
  162. package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
  163. package/.agents/scripts/lib/config/baselines.js +3 -14
  164. package/.agents/scripts/lib/config/ci.js +8 -38
  165. package/.agents/scripts/lib/config/commands.js +1 -15
  166. package/.agents/scripts/lib/config/defaults.js +4 -33
  167. package/.agents/scripts/lib/config/delivery-routing.js +6 -34
  168. package/.agents/scripts/lib/config/explain.js +10 -83
  169. package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
  170. package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +3 -31
  171. package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
  172. package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
  173. package/.agents/scripts/lib/config/gates/index.js +2 -17
  174. package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
  175. package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
  176. package/.agents/scripts/lib/config/gates/shared.js +4 -64
  177. package/.agents/scripts/lib/config/github.js +4 -22
  178. package/.agents/scripts/lib/config/limits.js +4 -57
  179. package/.agents/scripts/lib/config/paths.js +2 -21
  180. package/.agents/scripts/lib/config/qa.js +4 -38
  181. package/.agents/scripts/lib/config/quality.js +76 -432
  182. package/.agents/scripts/lib/config/runners.js +12 -56
  183. package/.agents/scripts/lib/config/runtime.js +13 -57
  184. package/.agents/scripts/lib/config/shared.js +2 -16
  185. package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
  186. package/.agents/scripts/lib/config/temp-paths.js +40 -280
  187. package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
  188. package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
  189. package/.agents/scripts/lib/config-resolver.js +11 -52
  190. package/.agents/scripts/lib/config-schema-shared.js +1 -4
  191. package/.agents/scripts/lib/config-settings-schema-delivery.js +16 -291
  192. package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
  193. package/.agents/scripts/lib/config-settings-schema.js +37 -274
  194. package/.agents/scripts/lib/coverage-baseline.js +20 -110
  195. package/.agents/scripts/lib/coverage-capture-fullscope.js +18 -35
  196. package/.agents/scripts/lib/coverage-capture-incremental.js +15 -45
  197. package/.agents/scripts/lib/coverage-capture-usage.js +8 -25
  198. package/.agents/scripts/lib/coverage-capture.js +99 -224
  199. package/.agents/scripts/lib/coverage-utils.js +14 -79
  200. package/.agents/scripts/lib/cpu-pool.js +17 -123
  201. package/.agents/scripts/lib/crap-baseline-join.js +16 -88
  202. package/.agents/scripts/lib/crap-coordinates.js +6 -25
  203. package/.agents/scripts/lib/crap-engine.js +40 -153
  204. package/.agents/scripts/lib/crap-method-identity.js +16 -78
  205. package/.agents/scripts/lib/crap-utils.js +31 -155
  206. package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
  207. package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
  208. package/.agents/scripts/lib/dead-exports-knip.js +18 -56
  209. package/.agents/scripts/lib/dead-exports-mode.js +5 -24
  210. package/.agents/scripts/lib/degraded-mode.js +3 -26
  211. package/.agents/scripts/lib/dependency-parser.js +8 -40
  212. package/.agents/scripts/lib/dependency-version.js +13 -35
  213. package/.agents/scripts/lib/detect-package-manager.js +6 -36
  214. package/.agents/scripts/lib/doc-tiers.js +22 -124
  215. package/.agents/scripts/lib/duplicate-search.js +8 -72
  216. package/.agents/scripts/lib/env-loader.js +5 -27
  217. package/.agents/scripts/lib/error-redactor.js +6 -31
  218. package/.agents/scripts/lib/errors/index.js +2 -22
  219. package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
  220. package/.agents/scripts/lib/escomplex-kernel.js +21 -123
  221. package/.agents/scripts/lib/feedback-loop/graduator-core.js +94 -419
  222. package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
  223. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -149
  224. package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
  225. package/.agents/scripts/lib/findings/classify-finding.js +14 -69
  226. package/.agents/scripts/lib/findings/promote-finding.js +14 -112
  227. package/.agents/scripts/lib/findings/provenance-field.js +11 -52
  228. package/.agents/scripts/lib/findings/route-finding.js +37 -255
  229. package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
  230. package/.agents/scripts/lib/findings/severity.js +18 -104
  231. package/.agents/scripts/lib/format-generated-json.js +12 -44
  232. package/.agents/scripts/lib/full-suite-lock.js +160 -429
  233. package/.agents/scripts/lib/full-suite-queue.js +213 -0
  234. package/.agents/scripts/lib/gates/baseline-store.js +5 -9
  235. package/.agents/scripts/lib/gates/friction.js +1 -3
  236. package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
  237. package/.agents/scripts/lib/gh-exec.js +123 -191
  238. package/.agents/scripts/lib/git/cached-fetch.js +9 -52
  239. package/.agents/scripts/lib/git/sync-from-base.js +15 -107
  240. package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
  241. package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
  242. package/.agents/scripts/lib/git-utils.js +37 -161
  243. package/.agents/scripts/lib/github/framework-repo.js +8 -71
  244. package/.agents/scripts/lib/github-url.js +2 -17
  245. package/.agents/scripts/lib/import-graph.js +11 -38
  246. package/.agents/scripts/lib/install-cmd-parser.js +4 -13
  247. package/.agents/scripts/lib/json-utils.js +3 -18
  248. package/.agents/scripts/lib/label-constants.js +16 -111
  249. package/.agents/scripts/lib/label-taxonomy.js +4 -30
  250. package/.agents/scripts/lib/maintainability-engine.js +12 -80
  251. package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
  252. package/.agents/scripts/lib/maintainability-utils.js +16 -92
  253. package/.agents/scripts/lib/mandrel-catalog.js +12 -70
  254. package/.agents/scripts/lib/notifications/notifier.js +13 -38
  255. package/.agents/scripts/lib/npm-scripts.js +4 -23
  256. package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
  257. package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
  258. package/.agents/scripts/lib/observability/signal-validator.js +5 -37
  259. package/.agents/scripts/lib/observability/signals-writer.js +11 -121
  260. package/.agents/scripts/lib/observability/source-classifier.js +22 -203
  261. package/.agents/scripts/lib/observability/terse-result.js +14 -47
  262. package/.agents/scripts/lib/onboard/init-tail.js +13 -74
  263. package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
  264. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
  265. package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
  266. package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
  267. package/.agents/scripts/lib/orchestration/ceremony-routing.js +28 -156
  268. package/.agents/scripts/lib/orchestration/change-set.js +7 -36
  269. package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
  270. package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
  271. package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
  272. package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
  273. package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
  274. package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
  275. package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
  276. package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
  277. package/.agents/scripts/lib/orchestration/check-state.js +92 -0
  278. package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
  279. package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +121 -157
  280. package/.agents/scripts/lib/orchestration/code-review.js +24 -128
  281. package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
  282. package/.agents/scripts/lib/orchestration/complexity-gate.js +118 -462
  283. package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
  284. package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
  285. package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
  286. package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
  287. package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
  288. package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
  289. package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
  290. package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
  291. package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
  292. package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
  293. package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
  294. package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
  295. package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
  296. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
  297. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
  298. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
  299. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
  300. package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
  301. package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
  302. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
  303. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
  304. package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
  305. package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
  306. package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
  307. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
  308. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
  309. package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
  310. package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
  311. package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
  312. package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
  313. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
  314. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
  315. package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
  316. package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
  317. package/.agents/scripts/lib/orchestration/light-suitability.js +37 -307
  318. package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
  319. package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
  320. package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
  321. package/.agents/scripts/lib/orchestration/plan-context.js +55 -318
  322. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
  323. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
  324. package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
  325. package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
  326. package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
  327. package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
  328. package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +16 -78
  329. package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
  330. package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
  331. package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
  332. package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
  333. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
  334. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
  335. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +71 -289
  336. package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
  337. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +96 -362
  338. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +9 -39
  339. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +60 -186
  340. package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
  341. package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
  342. package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
  343. package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
  344. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
  345. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
  346. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
  347. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
  348. package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
  349. package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
  350. package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
  351. package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
  352. package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
  353. package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
  354. package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
  355. package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
  356. package/.agents/scripts/lib/orchestration/review-depth.js +12 -91
  357. package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
  358. package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
  359. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
  360. package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
  361. package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
  362. package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
  363. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
  364. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
  365. package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
  366. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
  367. package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
  368. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
  369. package/.agents/scripts/lib/orchestration/run-epilogue.js +245 -326
  370. package/.agents/scripts/lib/orchestration/run-scoped-config.js +55 -159
  371. package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
  372. package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
  373. package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
  374. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
  375. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +20 -82
  376. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
  377. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
  378. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
  379. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
  380. package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +96 -0
  381. package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
  382. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
  383. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
  384. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
  385. package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
  386. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
  387. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
  388. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
  389. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
  390. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
  391. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
  392. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
  393. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +180 -273
  394. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
  395. package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
  396. package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
  397. package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
  398. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
  399. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
  400. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
  401. package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
  402. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -200
  403. package/.agents/scripts/lib/orchestration/story-follow-ups.js +167 -252
  404. package/.agents/scripts/lib/orchestration/story-init-envelope.js +52 -0
  405. package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
  406. package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
  407. package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -135
  408. package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
  409. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
  410. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
  411. package/.agents/scripts/lib/orchestration/ticket-validator.js +63 -344
  412. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
  413. package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -261
  414. package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
  415. package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
  416. package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
  417. package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
  418. package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
  419. package/.agents/scripts/lib/path-security.js +3 -6
  420. package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
  421. package/.agents/scripts/lib/preflight-runner.js +13 -69
  422. package/.agents/scripts/lib/process-group.js +143 -0
  423. package/.agents/scripts/lib/project-root.js +2 -8
  424. package/.agents/scripts/lib/provider-factory.js +2 -25
  425. package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
  426. package/.agents/scripts/lib/qa/qa-session.js +15 -69
  427. package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
  428. package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
  429. package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
  430. package/.agents/scripts/lib/reserved-test-ids.js +9 -47
  431. package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
  432. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
  433. package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
  434. package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
  435. package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
  436. package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
  437. package/.agents/scripts/lib/signals/detectors/common.js +12 -38
  438. package/.agents/scripts/lib/signals/index.js +2 -19
  439. package/.agents/scripts/lib/signals/schema.js +14 -109
  440. package/.agents/scripts/lib/signals/write.js +2 -11
  441. package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
  442. package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
  443. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
  444. package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
  445. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
  446. package/.agents/scripts/lib/single-story-sweep.js +14 -97
  447. package/.agents/scripts/lib/skills/parse-skill.js +13 -59
  448. package/.agents/scripts/lib/skills/skills-index.js +8 -29
  449. package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
  450. package/.agents/scripts/lib/source-extensions.js +11 -42
  451. package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
  452. package/.agents/scripts/lib/stdio-flush.js +9 -36
  453. package/.agents/scripts/lib/story-adjacency.js +8 -40
  454. package/.agents/scripts/lib/story-body/body-format-lints.js +51 -66
  455. package/.agents/scripts/lib/story-body/footer-block.js +11 -44
  456. package/.agents/scripts/lib/story-body/story-body.js +123 -344
  457. package/.agents/scripts/lib/temp-retention.js +42 -143
  458. package/.agents/scripts/lib/templates/decomposer-prompts.js +18 -80
  459. package/.agents/scripts/lib/test-env.js +12 -65
  460. package/.agents/scripts/lib/test-run-credit.js +10 -65
  461. package/.agents/scripts/lib/test-runner-contract.js +19 -74
  462. package/.agents/scripts/lib/test-temp.js +38 -184
  463. package/.agents/scripts/lib/test-tiers.js +12 -96
  464. package/.agents/scripts/lib/ticket-body-sections.js +21 -96
  465. package/.agents/scripts/lib/transpile.js +15 -74
  466. package/.agents/scripts/lib/util/concurrent-map.js +6 -25
  467. package/.agents/scripts/lib/util/parse-id-list.js +8 -34
  468. package/.agents/scripts/lib/util/poll-loop.js +8 -28
  469. package/.agents/scripts/lib/util/with-timeout.js +2 -11
  470. package/.agents/scripts/lib/validation-evidence.js +21 -96
  471. package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
  472. package/.agents/scripts/lib/wave-runner/live-probe.js +67 -209
  473. package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
  474. package/.agents/scripts/lib/workers/crap-worker.js +11 -64
  475. package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
  476. package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
  477. package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
  478. package/.agents/scripts/lib/workflow-closure.js +22 -105
  479. package/.agents/scripts/lib/workspace-provisioner.js +16 -54
  480. package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
  481. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
  482. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
  483. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
  484. package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
  485. package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
  486. package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
  487. package/.agents/scripts/lib/worktree-manager.js +15 -40
  488. package/.agents/scripts/lint-issue-body.js +12 -68
  489. package/.agents/scripts/mandrel-update-preflight.js +10 -70
  490. package/.agents/scripts/merge-baseline.js +30 -105
  491. package/.agents/scripts/nav-registry-diff.js +22 -108
  492. package/.agents/scripts/notify.js +12 -69
  493. package/.agents/scripts/plan-context.js +97 -92
  494. package/.agents/scripts/plan-critics.js +12 -66
  495. package/.agents/scripts/plan-persist.js +71 -137
  496. package/.agents/scripts/plan-run-epilogue.js +20 -43
  497. package/.agents/scripts/pr-watch-with-update.js +79 -263
  498. package/.agents/scripts/providers/github/auth.js +3 -8
  499. package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
  500. package/.agents/scripts/providers/github/board-add.js +5 -21
  501. package/.agents/scripts/providers/github/branch-protection.js +11 -43
  502. package/.agents/scripts/providers/github/cache.js +2 -14
  503. package/.agents/scripts/providers/github/comments.js +7 -40
  504. package/.agents/scripts/providers/github/compose.js +3 -19
  505. package/.agents/scripts/providers/github/errors.js +22 -125
  506. package/.agents/scripts/providers/github/issues.js +31 -123
  507. package/.agents/scripts/providers/github/labels.js +24 -124
  508. package/.agents/scripts/providers/github/mappers.js +5 -27
  509. package/.agents/scripts/providers/github/merge-methods.js +3 -22
  510. package/.agents/scripts/providers/github/project-board.js +2 -17
  511. package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
  512. package/.agents/scripts/providers/github/request-helpers.js +5 -32
  513. package/.agents/scripts/providers/github/search-budget.js +9 -39
  514. package/.agents/scripts/providers/github/search-query.js +5 -26
  515. package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
  516. package/.agents/scripts/providers/github/sub-issues.js +7 -36
  517. package/.agents/scripts/providers/github/tickets.js +32 -134
  518. package/.agents/scripts/providers/github.js +18 -59
  519. package/.agents/scripts/prune-plan-run-labels.js +12 -46
  520. package/.agents/scripts/quality-preview.js +35 -220
  521. package/.agents/scripts/resolve-doc-tiers.js +3 -26
  522. package/.agents/scripts/resolve-stories.js +16 -67
  523. package/.agents/scripts/resync-status-column.js +6 -25
  524. package/.agents/scripts/run-tests.js +29 -104
  525. package/.agents/scripts/single-story-close.js +23 -135
  526. package/.agents/scripts/single-story-confirm-merge.js +32 -139
  527. package/.agents/scripts/single-story-init.js +47 -259
  528. package/.agents/scripts/stories-wave-tick.js +179 -415
  529. package/.agents/scripts/sync-agentrc.js +3 -21
  530. package/.agents/scripts/sync-claude-agents.js +9 -55
  531. package/.agents/scripts/sync-claude-commands.js +20 -110
  532. package/.agents/scripts/test-wrapper.js +6 -43
  533. package/.agents/scripts/update-coverage-baseline.js +5 -22
  534. package/.agents/scripts/update-crap-baseline.js +7 -30
  535. package/.agents/scripts/update-duplication-baseline.js +16 -92
  536. package/.agents/scripts/update-maintainability-baseline.js +8 -62
  537. package/.agents/scripts/update-ticket-state.js +1 -7
  538. package/.agents/scripts/validate-skills.js +6 -26
  539. package/.agents/skills/core/gates-and-baselines/reference.md +0 -1
  540. package/.agents/skills/skills.index.json +2 -2
  541. package/.agents/skills/stack/qa/playwright/SKILL.md +26 -0
  542. package/.agents/templates/agent-protocol.md +2 -2
  543. package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
  544. package/.agents/workflows/audit-accessibility.md +4 -7
  545. package/.agents/workflows/audit-adrs.md +3 -6
  546. package/.agents/workflows/audit-architecture.md +3 -11
  547. package/.agents/workflows/audit-baselines.md +6 -9
  548. package/.agents/workflows/audit-clean-code.md +8 -12
  549. package/.agents/workflows/audit-data-model.md +3 -7
  550. package/.agents/workflows/audit-dependencies.md +4 -7
  551. package/.agents/workflows/audit-devops.md +4 -8
  552. package/.agents/workflows/audit-documentation.md +1 -4
  553. package/.agents/workflows/audit-mobile.md +4 -7
  554. package/.agents/workflows/audit-navigability.md +3 -6
  555. package/.agents/workflows/audit-performance.md +2 -4
  556. package/.agents/workflows/audit-privacy.md +4 -7
  557. package/.agents/workflows/audit-quality.md +4 -7
  558. package/.agents/workflows/audit-security.md +4 -7
  559. package/.agents/workflows/audit-seo.md +4 -7
  560. package/.agents/workflows/audit-sre.md +4 -7
  561. package/.agents/workflows/audit-to-stories.md +17 -30
  562. package/.agents/workflows/audit-ux-ui.md +4 -7
  563. package/.agents/workflows/helpers/acceptance-self-eval.md +84 -157
  564. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  565. package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
  566. package/.agents/workflows/helpers/code-review.md +4 -2
  567. package/.agents/workflows/helpers/deliver-digest.md +37 -28
  568. package/.agents/workflows/helpers/deliver-light.md +92 -101
  569. package/.agents/workflows/helpers/deliver-reference.md +162 -220
  570. package/.agents/workflows/helpers/deliver-story-reference.md +197 -607
  571. package/.agents/workflows/helpers/deliver-story.md +17 -18
  572. package/.agents/workflows/helpers/plan-reference.md +125 -167
  573. package/.agents/workflows/helpers/qa-core.md +12 -0
  574. package/.agents/workflows/mandrel-deliver.md +47 -31
  575. package/.agents/workflows/mandrel-plan.md +22 -21
  576. package/.agents/workflows/mandrel-update.md +36 -21
  577. package/.agents/workflows/memory-consolidate.md +1 -1
  578. package/.agents/workflows/qa-assist.md +27 -71
  579. package/.agents/workflows/qa-explore.md +19 -59
  580. package/.agents/workflows/qa-run.md +11 -33
  581. package/README.md +1 -1
  582. package/bin/mandrel.js +5 -46
  583. package/bin/postinstall.js +18 -107
  584. package/docs/CHANGELOG.md +60 -0
  585. package/lib/cli/doctor.js +11 -71
  586. package/lib/cli/init.js +26 -165
  587. package/lib/cli/migrate.js +5 -64
  588. package/lib/cli/registry.js +84 -467
  589. package/lib/cli/sync-agents.js +4 -64
  590. package/lib/cli/sync-commands.js +11 -64
  591. package/lib/cli/sync.js +34 -213
  592. package/lib/cli/uninstall.js +40 -219
  593. package/lib/cli/update.js +326 -523
  594. package/lib/cli/version-check.js +8 -72
  595. package/lib/cli/version-helpers.js +14 -87
  596. package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
  597. package/lib/migrations/index.js +17 -92
  598. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
  599. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
  600. package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
  601. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
  602. package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
  603. package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
  604. package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
  605. package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
  606. package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +21 -0
  607. package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
  608. package/package.json +17 -14
  609. package/.agents/docs/SDLC.md +0 -590
  610. package/.agents/docs/quality-gates.md +0 -1179
  611. package/.agents/rules/known-tooling-behavior.md +0 -150
  612. package/.agents/rules/orchestration-error-handling.md +0 -61
  613. package/.agents/rules/test-seams.md +0 -59
  614. package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
  615. package/.agents/schemas/baselines/lint.schema.json +0 -47
  616. package/.agents/schemas/model-attribution.schema.json +0 -53
  617. package/.agents/scripts/check-action-pinning.js +0 -260
  618. package/.agents/scripts/check-audit-attribution.js +0 -302
  619. package/.agents/scripts/check-baseline-drift.js +0 -211
  620. package/.agents/scripts/check-baseline-scope.js +0 -362
  621. package/.agents/scripts/check-generated-validator.js +0 -202
  622. package/.agents/scripts/check-knip-entries.js +0 -159
  623. package/.agents/scripts/check-lifecycle-lint.js +0 -294
  624. package/.agents/scripts/check-pinned-override-notes.js +0 -102
  625. package/.agents/scripts/check-schema-references.js +0 -366
  626. package/.agents/scripts/check-test-portability.js +0 -512
  627. package/.agents/scripts/check-workflow-citations.js +0 -332
  628. package/.agents/scripts/check-workflow-cli-lint.js +0 -299
  629. package/.agents/scripts/check-workflow-timeouts.js +0 -291
  630. package/.agents/scripts/install-matrix-assert.js +0 -326
  631. package/.agents/scripts/lib/audit-advisories.js +0 -195
  632. package/.agents/scripts/lib/audit-attribution.js +0 -134
  633. package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
  634. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
  635. package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
  636. package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
  637. package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
  638. package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
  639. package/.agents/scripts/lib/c8-cli-path.js +0 -21
  640. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
  641. package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
  642. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
  643. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
  644. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
  645. package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
  646. package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
  647. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
  648. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
  649. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
  650. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
  651. package/.agents/scripts/lib/fs-walk.js +0 -52
  652. package/.agents/scripts/lib/knip-config-resolver.js +0 -181
  653. package/.agents/scripts/lib/knip-entry-sync.js +0 -452
  654. package/.agents/scripts/lib/orchestration/model-attribution.js +0 -418
  655. package/.agents/scripts/lib/orchestration/story-plan-state.js +0 -33
  656. package/.agents/scripts/lib/orchestration/structured-comment-parser.js +0 -67
  657. package/.agents/scripts/lib/pinned-override-notes.js +0 -88
  658. package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
  659. package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
  660. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
  661. package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
  662. package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
  663. package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
  664. package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
  665. package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
  666. package/.agents/scripts/lib/test-isolate/runner.js +0 -483
  667. package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
  668. package/.agents/scripts/lib/test-profile/render-report.js +0 -45
  669. package/.agents/scripts/lint-label-vocabulary.js +0 -214
  670. package/.agents/scripts/post-structured-comment.js +0 -127
  671. package/.agents/scripts/provision-git-hooks.js +0 -85
  672. package/.agents/scripts/prune-baseline-orphans.js +0 -181
  673. package/.agents/scripts/run-coverage.js +0 -197
  674. package/.agents/scripts/run-lint.js +0 -133
  675. package/.agents/scripts/run-test-profile.js +0 -129
  676. package/.agents/scripts/run-verify.js +0 -118
  677. package/.agents/scripts/test-isolate.js +0 -55
  678. package/.agents/scripts/update-dead-exports-baseline.js +0 -321
@@ -1,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