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,56 +1,9 @@
1
1
  /**
2
- * Doc-tier resolver (Story #4438, Epic #4430 — Context Economy).
3
- *
4
- * Pure functions that classify the repository's documentation into the four
5
- * read-tiers Mandrel's context model recognizes, each entry carrying its
6
- * on-disk byte size so a byte budget can ratchet against it:
7
- *
8
- * - `alwaysLoaded` — `CLAUDE.md` plus the transitive closure of its
9
- * `@`-import references (`@AGENTS.md`,
10
- * `@.agents/instructions.md`, the always-on rules, …).
11
- * This is the context every session re-pays
12
- * on every subagent spawn (instructions.md § 4), so it is
13
- * the primary budget the context-budget ratchet gates.
14
- * - `mandatoryRead` — the resolved `project.docsContextFiles` set (prefixed
15
- * by `project.paths.docsRoot`), existing files only. This
16
- * is the `docsContextFiles` half the Epic AC gates; it
17
- * skips silently when the set is unconfigured or its
18
- * files are absent.
19
- * - `digestVisible` — the situational **Conditional Reads** docs from
20
- * instructions.md § 3 (`docs/style-guide.md`,
21
- * `docs/web-routes.md`) — surfaced only when a task
22
- * touches UI/routing, i.e. visible through the docs
23
- * digest rather than always read. Existing files only.
24
- * - `onDemand` — the on-demand `.agents/rules/*.md` set (instructions.md
25
- * § 1.F): every rule file that is **not** part of the
26
- * always-on core already captured in `alwaysLoaded`.
27
- * - `agentBoot` — the role-scoped boot contexts `.agents/agents/*.md`
28
- * (issue #4478). Each is a standalone system prompt a
29
- * converted spawn boots on **instead of** the always-loaded
30
- * closure, so it is budgeted independently (per-file ≤8KB
31
- * ceiling gated by `check-context-budget.js`).
32
- * - `workflow` / — the `.agents/workflows/**` read-tier (Story #4752),
33
- * `workflowOnDemand` resolved as each entry point's transitive
34
- * markdown-link closure by
35
- * [`workflow-closure.js`](workflow-closure.js): the files
36
- * an entry point's `mandatoryReads:` frontmatter forces
37
- * you to read (`workflow`, gated) versus the reachable
38
- * remainder (`workflowOnDemand`, recorded only).
39
- *
40
- * A file that could appear in more than one tier is kept in its **highest**
41
- * tier only (alwaysLoaded > mandatoryRead > digestVisible > onDemand), so the
42
- * arrays partition the doc set with no double-counting. `agentBoot` is disjoint
43
- * from the read-tiers (it lives under `.agents/agents/`, not the doc/rules set),
44
- * and so are the workflow tiers (confined to `.agents/workflows/`).
45
- *
46
- * The closure is discovered by parsing `@`-import references and following
47
- * them recursively (cycle-safe via a visited set). A candidate `@`-token only
48
- * counts as an import when it resolves to an existing repo file, which
49
- * naturally filters prose mentions (`@[USERNAME]`, `noreply@example.com`,
50
- * backtick-wrapped `` `@`-imported `` phrasing).
51
- *
52
- * Security (security-baseline § 5 — Data Leakage & Logging): every function
53
- * emits only repo-relative paths and byte counts — never file contents.
2
+ * Doc-tier resolver: partition the repo's docs into read-tiers with byte
3
+ * sizes for the context-budget ratchet (`alwaysLoaded` = CLAUDE.md's
4
+ * `@`-import closure; `agentBoot` and `workflowOnDemand` are recorded, not
5
+ * gated). A path lives only in its highest tier. Emits paths and byte
6
+ * counts, never file contents.
54
7
  */
55
8
 
56
9
  import nodeFs from 'node:fs';
@@ -58,38 +11,24 @@ import path from 'node:path';
58
11
  import { resolveWorkflowClosures } from './workflow-closure.js';
59
12
 
60
13
  /**
61
- * Basename of the always-loaded entry document (the root of the closure).
62
14
  * @type {string}
63
15
  */
64
16
  const ENTRY_DOC = 'CLAUDE.md';
65
17
 
66
18
  /**
67
- * Always-on core rule files (instructions.md § 1.F). These live in the
68
- * `alwaysLoaded` closure (imported by `CLAUDE.md`); every other
69
- * `.agents/rules/*.md` file is `onDemand`.
70
19
  * @type {string[]}
71
20
  */
72
21
  const ALWAYS_ON_RULES = ['security-baseline.md', 'git-conventions.md'];
73
22
 
74
23
  /**
75
- * Conditional-read docs (instructions.md § 3 — "Conditional Reads"), resolved
76
- * against `project.paths.docsRoot`. Present in the `digestVisible` tier when
77
- * they exist.
78
24
  * @type {string[]}
79
25
  */
80
26
  const CONDITIONAL_DOCS = ['style-guide.md', 'web-routes.md'];
81
27
 
82
- /**
83
- * Match `@`-import tokens: an `@` at start-of-line or after whitespace,
84
- * followed by a path token that stops at whitespace or common closing
85
- * punctuation. The resolved-file existence check downstream is the real
86
- * filter; this regex only harvests candidates.
87
- */
28
+ /** Candidates only; the file-existence check filters out prose `@` tokens. */
88
29
  const IMPORT_RE = /(?:^|\s)@([^\s'"`)\]}>,]+)/gm;
89
30
 
90
31
  /**
91
- * Default fs surface — a small subset of `node:fs` so callers can inject a
92
- * fixture double in tests without touching the real filesystem.
93
32
  * @typedef {{
94
33
  * existsSync: (p: string) => boolean,
95
34
  * readFileSync: (p: string, enc: string) => string,
@@ -98,17 +37,15 @@ const IMPORT_RE = /(?:^|\s)@([^\s'"`)\]}>,]+)/gm;
98
37
  */
99
38
 
100
39
  /**
101
- * Parse the raw `@`-import specifiers from a source document. A trailing `.`
102
- * or `:` (sentence punctuation) is trimmed so `@AGENTS.md.` still resolves.
40
+ * Trailing `.`/`:` is trimmed so `@AGENTS.md.` still resolves.
103
41
  *
104
42
  * @param {string} source
105
- * @returns {string[]} raw specifiers in first-seen order
43
+ * @returns {string[]}
106
44
  */
107
45
  export function parseImportSpecifiers(source) {
108
46
  const specs = [];
109
47
  for (const m of String(source ?? '').matchAll(IMPORT_RE)) {
110
48
  let spec = m[1];
111
- // Strip trailing sentence punctuation that the greedy class allowed in.
112
49
  while (spec.length > 0 && (spec.endsWith('.') || spec.endsWith(':'))) {
113
50
  spec = spec.slice(0, -1);
114
51
  }
@@ -118,10 +55,8 @@ export function parseImportSpecifiers(source) {
118
55
  }
119
56
 
120
57
  /**
121
- * Convert an absolute path to a repo-relative, posix-separated id.
122
- *
123
- * @param {string} root absolute repo root
124
- * @param {string} abs absolute path
58
+ * @param {string} root
59
+ * @param {string} abs
125
60
  * @returns {string}
126
61
  */
127
62
  function toRepoRel(root, abs) {
@@ -129,11 +64,8 @@ function toRepoRel(root, abs) {
129
64
  }
130
65
 
131
66
  /**
132
- * Build a `{ path, bytes }` entry for a repo file, or `null` when it does not
133
- * exist. `path` is repo-relative posix; `bytes` is the on-disk byte size.
134
- *
135
- * @param {string} root absolute repo root
136
- * @param {string} rel repo-relative path
67
+ * @param {string} root
68
+ * @param {string} rel
137
69
  * @param {FsLike} fs
138
70
  * @returns {{ path: string, bytes: number } | null}
139
71
  */
@@ -150,16 +82,11 @@ function fileEntry(root, rel, fs) {
150
82
  }
151
83
 
152
84
  /**
153
- * Resolve the always-loaded closure: `CLAUDE.md` plus every file reachable by
154
- * recursively parsing `@`-import references. Cycle-safe (a visited set keyed
155
- * by repo-relative path). Nested imports resolve relative to the importing
156
- * file's directory (Claude Code `@`-import semantics). Non-resolving `@`-tokens
157
- * are ignored, so prose mentions never pollute the closure.
85
+ * Cycle-safe; nested imports resolve relative to the importing file.
158
86
  *
159
- * @param {string} root absolute repo root (where `CLAUDE.md` lives)
87
+ * @param {string} root
160
88
  * @param {{ fs?: FsLike }} [opts]
161
- * @returns {Array<{ path: string, bytes: number }>} sorted by path; empty when
162
- * `CLAUDE.md` is absent
89
+ * @returns {Array<{ path: string, bytes: number }>}
163
90
  */
164
91
  export function resolveAlwaysLoadedClosure(root, { fs = nodeFs } = {}) {
165
92
  const entryAbs = path.resolve(root, ENTRY_DOC);
@@ -200,13 +127,10 @@ export function resolveAlwaysLoadedClosure(root, { fs = nodeFs } = {}) {
200
127
  }
201
128
 
202
129
  /**
203
- * Read the resolved `project.docsContextFiles` list from a config object,
204
- * prefixed by `project.paths.docsRoot`. Resolves new-shape
205
- * `project.docsContextFiles` first and falls back to the legacy top-level
206
- * key, so a config written against either shape yields the same list.
130
+ * Reads `project.*` first, then the legacy top-level keys.
207
131
  *
208
- * @param {object} config resolved config (`resolveConfig()` output)
209
- * @returns {string[]} repo-relative posix doc paths (existence not yet checked)
132
+ * @param {object} config
133
+ * @returns {string[]}
210
134
  */
211
135
  export function docsContextPaths(config) {
212
136
  const project = config?.project ?? config;
@@ -221,13 +145,7 @@ export function docsContextPaths(config) {
221
145
  }
222
146
 
223
147
  /**
224
- * Resolve the documentation read-tiers, each entry `{ path, bytes }`,
225
- * partitioned so no path appears in more than one tier (highest tier wins).
226
- * `workflowClosure` rides alongside the tiers as the per-entry-point workflow
227
- * measurement (Story #4752) — its `reachableTotalBytes` is a recorded drift
228
- * signal, never a gate.
229
- *
230
- * @param {object} config resolved config (`resolveConfig()` output)
148
+ * @param {object} config
231
149
  * @param {{ root?: string, fs?: FsLike }} [opts]
232
150
  * @returns {{
233
151
  * tiers: {
@@ -264,33 +182,22 @@ export function resolveDocTiers(
264
182
  return out.sort((a, b) => a.path.localeCompare(b.path));
265
183
  };
266
184
 
267
- // 1. always-loaded: CLAUDE.md @-import closure. Pre-claim its paths first so
268
- // a lower tier never re-lists a closure member.
185
+ // Pre-claim the closure so a lower tier never re-lists a member.
269
186
  const alwaysLoaded = resolveAlwaysLoadedClosure(root, { fs });
270
187
  for (const e of alwaysLoaded) claimed.add(e.path);
271
188
 
272
- // 2. mandatory-read: resolved docsContextFiles (existing files only).
273
189
  const docsRoot =
274
190
  config?.project?.paths?.docsRoot ?? config?.paths?.docsRoot ?? 'docs';
275
191
  const mandatoryRead = collect(docsContextPaths(config));
276
192
 
277
- // 3. digest-visible: situational Conditional-Read docs.
278
193
  const digestVisible = collect(
279
194
  CONDITIONAL_DOCS.map((f) => path.posix.join(docsRoot, f)),
280
195
  );
281
196
 
282
- // 4. on-demand: every .agents/rules/*.md that is not an always-on core rule
283
- // (the always-on ones already live in the alwaysLoaded closure).
284
197
  const onDemand = collect(listOnDemandRules(root, fs));
285
198
 
286
- // 5. agent-boot: role-scoped boot contexts .agents/agents/*.md (#4478). These
287
- // are standalone system prompts, disjoint from the doc read-tiers.
288
199
  const agentBoot = collect(listAgentDefs(root, fs));
289
200
 
290
- // 6. workflow: each entry point's transitive markdown-link closure (#4752),
291
- // split into the gated mandatory set and the recorded on-demand remainder.
292
- // The walk is confined to `.agents/workflows/**`, and `collect` still
293
- // de-dupes, so no path is counted against two tiers.
294
201
  const closure = resolveWorkflowClosures(root, { fs });
295
202
  const workflow = collect(closure.mandatoryFiles.map((e) => e.path));
296
203
  const workflowOnDemand = collect(closure.onDemandFiles.map((e) => e.path));
@@ -314,10 +221,7 @@ export function resolveDocTiers(
314
221
  }
315
222
 
316
223
  /**
317
- * List the role-scoped agent-boot defs (repo-relative posix): every
318
- * `.agents/agents/*.md`. Returns [] when the directory is absent.
319
- *
320
- * @param {string} root absolute repo root
224
+ * @param {string} root
321
225
  * @param {FsLike} fs
322
226
  * @returns {string[]}
323
227
  */
@@ -336,11 +240,7 @@ function listAgentDefs(root, fs) {
336
240
  }
337
241
 
338
242
  /**
339
- * List the on-demand rule files (repo-relative posix): every `.agents/rules/
340
- * *.md` whose basename is not an always-on core rule. Returns [] when the
341
- * rules directory is absent.
342
- *
343
- * @param {string} root absolute repo root
243
+ * @param {string} root
344
244
  * @param {FsLike} fs
345
245
  * @returns {string[]}
346
246
  */
@@ -359,8 +259,6 @@ function listOnDemandRules(root, fs) {
359
259
  }
360
260
 
361
261
  /**
362
- * Sum the `bytes` of every entry in a tier array.
363
- *
364
262
  * @param {Array<{ bytes: number }>} entries
365
263
  * @returns {number}
366
264
  */
@@ -1,31 +1,7 @@
1
1
  /**
2
- * duplicate-search.js — Cross-Story Duplicate Detection
3
- *
4
- * Used by `/mandrel-plan` to surface open Stories whose scope overlaps with a
5
- * seed / seed-file / tickets corpus before new Stories are created.
6
- * Returns ranked candidates with an overlap score and URL so the host
7
- * LLM can pause for HITL confirmation.
8
- *
9
- * Design notes:
10
- * - Prefer `provider.searchIssues` to narrow open Stories server-side
11
- * (`label:"type::story" state:open` + top seed tokens), capped at
12
- * ~100 hits, then rank that set. Fall back to `listIssuesByLabel`
13
- * when search errors, is unavailable, or returns **nothing** (same
14
- * try/catch pattern as `TicketGateway.getTickets`).
15
- * - The narrowing query is deliberately weak (Story #4541). GitHub ANDs
16
- * free-text terms, so the former 8-token query demanded that a candidate
17
- * contain all eight of a multi-sentence seed's longest words — which no
18
- * real Story does. Gate #1 duplicate triage therefore reported "no
19
- * candidates" on every realistic seed while looking perfectly healthy.
20
- * Search is now a cheap best-case narrowing over a handful of tokens; an
21
- * empty result is treated as "search did not help", not "no duplicates",
22
- * and falls through to the label listing whose Jaccard ranker has real
23
- * recall.
24
- * - Scoring is intentionally simple (token Jaccard over title + body).
25
- * It is a triage signal, not a semantic-search replacement.
26
- * - Provider errors on the list fallback propagate verbatim — the
27
- * caller is responsible for translating them into a friction comment
28
- * or operator-visible failure.
2
+ * duplicate-search.js — rank open Stories overlapping a planning seed (token
3
+ * Jaccard over title + body: a triage signal, not semantic search). List
4
+ * fallback errors propagate verbatim to the caller.
29
5
  */
30
6
 
31
7
  import { Logger } from './Logger.js';
@@ -88,23 +64,11 @@ const STOPWORDS = new Set([
88
64
 
89
65
  const DEFAULT_MIN_SCORE = 0.15;
90
66
  const DEFAULT_MAX_RESULTS = 5;
91
- /**
92
- * How many seed tokens to pass as free-text search terms.
93
- *
94
- * GitHub ANDs these, so the cap is a precision/recall dial pointing the
95
- * wrong way: every extra token shrinks the candidate set. Three is a
96
- * best-case narrowing that can plausibly hit on a focused seed; anything
97
- * beyond that reliably matched nothing on a multi-sentence one (Story
98
- * #4541). Recall does not rest on this number — an empty result falls back
99
- * to label-listing plus client-side ranking.
100
- */
67
+ /** GitHub ANDs terms, so more tokens match nothing; recall is the fallback's. */
101
68
  const DEFAULT_SEARCH_TOKEN_CAP = 3;
102
- /** Hard cap on search hits ranked client-side (~one Search API page). */
103
69
  const SEARCH_RESULT_CAP = 100;
104
70
 
105
71
  /**
106
- * Tokenize freeform text into a deduplicated set of meaningful words.
107
- *
108
72
  * @param {string} text
109
73
  * @returns {Set<string>}
110
74
  */
@@ -119,8 +83,7 @@ export function tokenize(text) {
119
83
  }
120
84
 
121
85
  /**
122
- * Pick the highest-signal seed tokens for a Search API free-text query.
123
- * Longer tokens first (specificity proxy), then alphabetical for stability.
86
+ * Longest first (specificity), then alphabetical.
124
87
  *
125
88
  * @param {string} seed
126
89
  * @param {number} [maxTokens]
@@ -134,9 +97,6 @@ export function pickSearchTokens(seed, maxTokens = DEFAULT_SEARCH_TOKEN_CAP) {
134
97
  }
135
98
 
136
99
  /**
137
- * Build the `/search/issues` query for open Stories overlapping a seed.
138
- * Repo scoping is left to `provider.searchIssues`.
139
- *
140
100
  * @param {string} seed
141
101
  * @returns {string}
142
102
  */
@@ -146,8 +106,6 @@ export function buildOpenStorySearchQuery(seed) {
146
106
  }
147
107
 
148
108
  /**
149
- * Compute the Jaccard overlap between two token sets.
150
- *
151
109
  * @param {Set<string>} a
152
110
  * @param {Set<string>} b
153
111
  * @returns {number} 0..1
@@ -161,9 +119,6 @@ export function overlapScore(a, b) {
161
119
  }
162
120
 
163
121
  /**
164
- * Build the issue URL for an id. The candidate exposes the URL so the
165
- * HITL pause can render clickable links without a second round-trip.
166
- *
167
122
  * @param {number|string} id
168
123
  * @param {{ owner?: string, repo?: string }} [opts]
169
124
  * @returns {string}
@@ -178,8 +133,6 @@ function buildIssueUrl(id, opts = {}) {
178
133
  }
179
134
 
180
135
  /**
181
- * Normalize a provider issue (list or search hit) into the ranking shape.
182
- *
183
136
  * @param {object} issue
184
137
  * @returns {{ id: number, title: string, body: string, url?: string }}
185
138
  */
@@ -193,9 +146,6 @@ function normalizeIssue(issue) {
193
146
  }
194
147
 
195
148
  /**
196
- * Rank a pre-fetched open-Story list against a seed corpus.
197
- * Pure helper shared by the provider-backed search and tests.
198
- *
199
149
  * @param {{
200
150
  * seed: string,
201
151
  * openStories: Array<{ id:number, title?:string, body?:string, url?:string }>,
@@ -253,8 +203,6 @@ function rankOpenStoryDuplicates({
253
203
  }
254
204
 
255
205
  /**
256
- * Server-narrowed open-Story fetch via `/search/issues`.
257
- *
258
206
  * @param {object} provider
259
207
  * @param {string} seed
260
208
  * @returns {Promise<Array<{ id:number, title:string, body:string, url?:string }>>}
@@ -267,8 +215,6 @@ async function fetchOpenStoriesViaSearch(provider, seed) {
267
215
  }
268
216
 
269
217
  /**
270
- * Full open-Story backlog via label listing (fallback path).
271
- *
272
218
  * @param {object} provider
273
219
  * @returns {Promise<Array<{ id:number, title:string, body:string, url?:string }>>}
274
220
  */
@@ -287,16 +233,9 @@ async function fetchOpenStoriesViaList(provider) {
287
233
  }
288
234
 
289
235
  /**
290
- * Fetch open-Story candidates: try Search API narrowing first, fall back to
291
- * `listIssuesByLabel` when search errors, is unavailable, or **returns no
292
- * hits**.
293
- *
294
- * The empty-result fallback is the load-bearing one (Story #4541). The
295
- * narrowing query ANDs seed tokens, so on any real multi-sentence seed it
296
- * matches nothing — and treating that as an authoritative "no duplicates
297
- * exist" is what made Gate #1 triage report a clean bill of health while
298
- * never actually looking. An empty search is evidence about the *query*, not
299
- * about the backlog.
236
+ * Search first; fall back to the label listing when search errors, is
237
+ * unavailable, or returns no hits. An empty search is evidence about the
238
+ * AND-ed query, not about the backlog.
300
239
  *
301
240
  * @param {object} provider
302
241
  * @param {string} seed
@@ -337,9 +276,6 @@ async function fetchOpenStoryCandidates(provider, seed) {
337
276
  }
338
277
 
339
278
  /**
340
- * Find open Stories whose title + body overlap with the supplied seed
341
- * above a configurable threshold.
342
- *
343
279
  * @param {{
344
280
  * seed: string,
345
281
  * provider: import('./ITicketingProvider.js').ITicketingProvider,
@@ -3,21 +3,9 @@ import path from 'node:path';
3
3
  import { Logger } from './Logger.js';
4
4
 
5
5
  /**
6
- * Parse the right-hand side of a `KEY=` line into its value.
7
- *
8
- * Two rules, and the quoting decides which one applies:
9
- *
10
- * - **Quoted** (`"…"` / `'…'`): the contents between the opening quote and
11
- * its matching closing quote are kept **verbatim** — a `#` inside quotes is
12
- * part of the value, not a comment. Anything after the closing quote is
13
- * trailing commentary and is discarded.
14
- * - **Unquoted**: the value ends at the first **unescaped** `#`. A `\#`
15
- * escape emits a literal `#` and keeps the scan going, so a value that
16
- * genuinely contains a hash can still be written without quotes.
17
- *
18
- * An opening quote with no closing partner is not a quoted value — it falls
19
- * through to the unquoted rule so a malformed line still yields something
20
- * rather than swallowing the rest of the file's intent.
6
+ * Quoted values are kept verbatim up to the matching quote (text after it is
7
+ * dropped); unquoted values end at the first unescaped `#` (`\#` is a
8
+ * literal). An unclosed quote falls through to the unquoted rule.
21
9
  *
22
10
  * @param {string} raw — the text after the `=`, unparsed.
23
11
  * @returns {string} The value with any inline comment removed.
@@ -29,7 +17,6 @@ function parseEnvValue(raw) {
29
17
  const quote = trimmed.charAt(0);
30
18
  if (quote === '"' || quote === "'") {
31
19
  const closing = trimmed.indexOf(quote, 1);
32
- // Verbatim contents: no comment stripping, no unescaping.
33
20
  if (closing !== -1) return trimmed.slice(1, closing);
34
21
  }
35
22
 
@@ -47,23 +34,14 @@ function parseEnvValue(raw) {
47
34
  return value.trim();
48
35
  }
49
36
 
50
- /**
51
- * Auto-load .env from the project root if it exists
52
- */
53
37
  export function loadEnv(projectRoot) {
54
38
  const envPath = path.resolve(projectRoot, '.env');
55
39
  let envContent;
56
40
  try {
57
- // Read directly rather than existsSync + readFileSync: the latter is a
58
- // TOCTOU race (the file can vanish between the two calls) and double-stats
59
- // the path. A single read with code-based error handling is both correct
60
- // and cheaper.
41
+ // A single read, not existsSync + read, avoids a TOCTOU race.
61
42
  envContent = fs.readFileSync(envPath, 'utf8');
62
43
  } catch (err) {
63
- // A missing .env is the expected case — environment may be provided via
64
- // other means, so stay silent. Any other failure (permissions, a
65
- // directory in place of the file, I/O error) is worth surfacing so the
66
- // operator gets a one-line hint instead of an opaque silent skip.
44
+ // A missing .env is expected; anything else deserves a one-line hint.
67
45
  if (err.code !== 'ENOENT') {
68
46
  Logger.warn(
69
47
  `env-loader: failed to read ${envPath} (${err.code ?? err.message}); skipping .env load.`,
@@ -1,13 +1,6 @@
1
1
  /**
2
- * Story #1651 (CWE-209): error-envelope redactor for CLI scripts.
3
- *
4
- * Rewrites absolute filesystem paths to repo-relative form, elides
5
- * `$HOME` / `$USERPROFILE` segments outside the repo, and scrubs
6
- * token-shaped substrings before error envelopes hit the public CI log.
7
- *
8
- * Pure and dependency-free so callers (tests, ad-hoc loggers, the
9
- * runAsCli default handler) can reuse it without standing up the rest
10
- * of the cli-utils harness.
2
+ * Error-envelope redactor (CWE-209): repo-relative paths, elided home dir,
3
+ * scrubbed token-shaped strings. Dependency-free.
11
4
  */
12
5
 
13
6
  import path from 'node:path';
@@ -16,10 +9,7 @@ import { fileURLToPath } from 'node:url';
16
9
  const REPO_ROOT_CACHE = { value: null };
17
10
 
18
11
  /**
19
- * Resolve the repository root the redactor rewrites against. The
20
- * heuristic walks up from this file's directory; consumers may override
21
- * via the `repoRoot` option on `redactErrorMessage`. The result is
22
- * memoised because the redactor runs in the hot path of error-printing.
12
+ * Memoised — the redactor runs on the error-printing hot path.
23
13
  *
24
14
  * @returns {string}
25
15
  */
@@ -34,10 +24,7 @@ export function resolveRepoRoot() {
34
24
  const TOKEN_SHAPED = /\b(?:gh[pousr]_[A-Za-z0-9_]{20,}|[A-Fa-f0-9]{32,})\b/g;
35
25
 
36
26
  /**
37
- * Normalise both Windows-style and POSIX-style absolute paths in
38
- * `message` to repo-relative form, elide `$HOME` / `$USERPROFILE`
39
- * outside the repo, and scrub token-shaped substrings (`ghp_*`,
40
- * `gho_*`, `ghs_*`, `ghu_*`, `ghr_*`, 32+ hex chars).
27
+ * Handles both Windows and POSIX path separators.
41
28
  *
42
29
  * @param {string|undefined} message
43
30
  * @param {object} [options]
@@ -80,15 +67,8 @@ function pathVariants(p) {
80
67
  }
81
68
 
82
69
  /**
83
- * Determine whether error-message redaction is enabled for this process.
84
- *
85
- * Precedence (any one is enough to opt in):
86
- * 1. Explicit `--quiet-errors` flag in `argv`.
87
- * 2. `AGENT_CLI_QUIET_ERRORS=1` (or `true`) in `env`.
88
- * 3. `CI=true` (or any other truthy non-empty value) in `env`.
89
- *
90
- * Operator workstations stay verbose by default; CI runs (where logs
91
- * are public on OSS forks) get redaction automatically.
70
+ * On with `--quiet-errors`, `AGENT_CLI_QUIET_ERRORS`, or a truthy `CI` —
71
+ * CI logs are public on OSS forks; workstations stay verbose.
92
72
  *
93
73
  * @param {string[]} [argv] Defaults to `process.argv.slice(2)`.
94
74
  * @param {NodeJS.ProcessEnv} [env] Defaults to `process.env`.
@@ -111,11 +91,6 @@ function isTruthyEnv(value) {
111
91
  }
112
92
 
113
93
  /**
114
- * Format a thrown error for stderr, applying redaction when
115
- * `parseQuietErrorsFlag()` says we should. Extracted from `runAsCli` so
116
- * the cli-utils default error handler stays a single expression and the
117
- * redaction logic lives next to the redactor itself.
118
- *
119
94
  * @param {unknown} err
120
95
  * @returns {string}
121
96
  */
@@ -1,10 +1,4 @@
1
- /**
2
- * lib/errors/ — canonical home for custom Error subclasses used by the
3
- * orchestration SDK.
4
- *
5
- * Consumers import by class so tests can match on `instanceof` rather than
6
- * message substrings.
7
- */
1
+ /** Custom Error subclasses; match on `instanceof`, not message text. */
8
2
 
9
3
  class ConflictingTypeLabelsError extends Error {
10
4
  constructor(message) {
@@ -21,12 +15,6 @@ export class ValidationError extends Error {
21
15
  }
22
16
  }
23
17
 
24
- /**
25
- * Errors raised by the `gh` CLI bridge (currently the bootstrap preflight;
26
- * later the `lib/gh-exec.js` shim outlined in Tech Spec #1350). Tests
27
- * match on `instanceof` rather than message substrings so message text
28
- * can evolve without churning the assertions.
29
- */
30
18
  export class GhNotInstalledError extends Error {
31
19
  constructor(message = 'gh CLI is not installed or not on PATH') {
32
20
  super(message);
@@ -49,15 +37,7 @@ export class GhVersionError extends Error {
49
37
  }
50
38
  }
51
39
 
52
- /**
53
- * Raised when a framework runtime dependency (e.g. `ajv`) cannot be
54
- * resolved from the consumer's `node_modules/`. Surfaces during the
55
- * `agents-bootstrap-github` preflight to redirect operators to the
56
- * correct remediation (`mandrel init` for new projects, or
57
- * `npm install mandrel` for existing ones). `missing` carries the
58
- * package specifiers that failed to resolve so the CLI can render an
59
- * actionable hint.
60
- */
40
+ /** A runtime dep (e.g. `ajv`) did not resolve; `missing` names the specifiers. */
61
41
  export class MissingRuntimeDepsError extends Error {
62
42
  constructor(message, details = {}) {
63
43
  super(message);