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,67 +1,23 @@
1
1
  /**
2
- * project-meta-cache — on-disk cache for repo-invariant GitHub Projects v2
3
- * board metadata (Story #4252).
4
- *
5
- * Every `agent::*` label flip routes through `transitionTicketState` →
6
- * `ColumnSync.sync`, which must resolve the board's `{ projectId, fieldId,
7
- * options }` before issuing the Status mutation. Single-story delivery
8
- * performs each flip in a *separate cold CLI process* (init → executing,
9
- * close → closing, confirm-merge → done, plus `resync-status-column`), so
10
- * the in-process `_meta` cache is always empty and every flip re-pays
11
- * `resolveProjectMeta` + an item-id lookup + the mutation (~3 GraphQL
12
- * round-trips).
13
- *
14
- * The board metadata is **repo-invariant** — it changes only when the
15
- * Status single-select field is reconfigured — so it is a prime candidate
16
- * for an on-disk cache that survives across the cold processes. This module
17
- * persists the resolved metadata to a small JSON file under the resolved
18
- * `tempRoot`, keyed by `owner/projectNumber`, carrying a TTL. Correctness
19
- * is bounded by "the mutation still validates against the live board": a
20
- * stale entry at worst causes one failed mutation, which the caller treats
21
- * as a signal to invalidate the entry and re-resolve — never a wrong write.
22
- *
23
- * Layout: `<tempRoot>/cache/project-meta.json`, a single JSON object keyed
24
- * by `<owner>/<projectNumber>`:
25
- *
26
- * {
27
- * "dsj1984/1": {
28
- * "cachedAt": 1718000000000,
29
- * "projectId": "PVT_…",
30
- * "fieldId": "PVTSSF_…",
31
- * "options": { "Todo": "abc", "In Progress": "def", "Done": "ghi" }
32
- * }
33
- * }
34
- *
35
- * The `options` map is serialised as a plain object and re-hydrated into a
36
- * `Map<name, id>` on read so the ColumnSync call site is identical whether
37
- * the metadata came from the disk cache or a live resolve.
38
- *
39
- * The cache file lives under `tempRoot`, which is gitignored
40
- * (`temp/` in `.gitignore`), so it introduces no new tracked artifact.
2
+ * project-meta-cache — on-disk cache of repo-invariant Projects v2 board
3
+ * metadata (`{ projectId, fieldId, options }`), so each cold CLI process that
4
+ * flips a label skips re-resolving it. Stored at
5
+ * `<tempRoot>/cache/project-meta.json`, keyed `<owner>/<projectNumber>`, with
6
+ * a TTL. A stale entry at worst fails one mutation, which the caller answers
7
+ * by invalidating and re-resolving — never a wrong write.
41
8
  */
42
9
 
43
10
  import fs from 'node:fs';
44
11
  import path from 'node:path';
45
12
  import { anchorTempRoot, tempRootFrom } from '../config/temp-paths.js';
46
13
 
47
- /**
48
- * Default time-to-live for a cached board-metadata entry, in milliseconds.
49
- * Board metadata is repo-invariant (it only changes on a manual Status
50
- * field reconfiguration), so a generous TTL is safe — and a stale entry is
51
- * self-healing via invalidate-on-error regardless. One hour comfortably
52
- * spans a single `/single-story-deliver` run's four cold flips while still
53
- * forcing a periodic re-resolve.
54
- */
14
+ /** One hour spans a delivery run's cold flips yet forces periodic refresh. */
55
15
  const DEFAULT_META_TTL_MS = 60 * 60 * 1000;
56
16
 
57
17
  /**
58
- * Resolve the path to the on-disk project-meta cache file under the
59
- * (anchored) resolved `tempRoot`. A relative `tempRoot` is anchored to the
60
- * main checkout root so a worktree child and the main-checkout host
61
- * converge on the same file (Story #3900 semantics, reused here).
18
+ * Anchored to the main checkout so worktree children and the host share it.
62
19
  *
63
- * @param {object} [config] Optional resolved config bag. Omitted → framework
64
- * default (`temp`).
20
+ * @param {object} [config] Optional resolved config bag.
65
21
  * @returns {string}
66
22
  */
67
23
  function projectMetaCachePath(config) {
@@ -73,12 +29,9 @@ function projectMetaCachePath(config) {
73
29
  }
74
30
 
75
31
  /**
76
- * Build the per-board cache key from `(owner, projectNumber)`.
77
- *
78
32
  * @param {string|null|undefined} owner
79
33
  * @param {number|string|null|undefined} projectNumber
80
- * @returns {string|null} `<owner>/<projectNumber>`, or null when either part
81
- * is missing (an un-keyable board — caller skips the cache).
34
+ * @returns {string|null} null when un-keyable (caller skips the cache).
82
35
  */
83
36
  function projectMetaCacheKey(owner, projectNumber) {
84
37
  if (!owner || projectNumber === null || projectNumber === undefined) {
@@ -88,9 +41,7 @@ function projectMetaCacheKey(owner, projectNumber) {
88
41
  }
89
42
 
90
43
  /**
91
- * Read the entire cache file as a plain object. Returns an empty object on
92
- * any read/parse failure (missing file, malformed JSON) so the caller treats
93
- * a corrupt cache as a cold miss rather than throwing.
44
+ * A missing or corrupt file reads as `{}` — a cold miss.
94
45
  *
95
46
  * @param {string} filePath
96
47
  * @returns {Record<string, object>}
@@ -106,11 +57,7 @@ function readCacheFile(filePath) {
106
57
  }
107
58
 
108
59
  /**
109
- * Read a cached metadata entry for `(owner, projectNumber)`.
110
- *
111
- * Returns the re-hydrated `{ projectId, fieldId, options: Map }` descriptor
112
- * when a fresh (within TTL) entry exists, or `null` on a miss / expired /
113
- * malformed entry. Never throws — a read failure is a cache miss.
60
+ * A fresh entry with `options` re-hydrated to a Map, else `null`. Never throws.
114
61
  *
115
62
  * @param {{
116
63
  * owner?: string|null,
@@ -142,7 +89,6 @@ export function readProjectMetaCache(opts = {}) {
142
89
  ) {
143
90
  return null;
144
91
  }
145
- // TTL check — an expired entry is a miss so the caller re-resolves.
146
92
  if (now - cachedAt > ttlMs) return null;
147
93
 
148
94
  return {
@@ -153,13 +99,7 @@ export function readProjectMetaCache(opts = {}) {
153
99
  }
154
100
 
155
101
  /**
156
- * Persist a resolved metadata descriptor for `(owner, projectNumber)`.
157
- *
158
- * The `options` value may be a `Map<name,id>` or a plain object; it is
159
- * normalised to a plain object on disk. Best-effort: any write failure is
160
- * swallowed (the cache is a pure optimisation — a failed write just means
161
- * the next process re-resolves). Writes the rest of the store back intact so
162
- * sibling board entries are preserved.
102
+ * Best-effort write preserving sibling board entries.
163
103
  *
164
104
  * @param {{
165
105
  * owner?: string|null,
@@ -206,13 +146,8 @@ export function writeProjectMetaCache(opts = {}) {
206
146
  }
207
147
 
208
148
  /**
209
- * Invalidate (delete) the cached entry for `(owner, projectNumber)`.
210
- *
211
- * Called when a GraphQL error fires against a board whose metadata came from
212
- * the cache, so a mid-run board reconfiguration self-heals on the next flip
213
- * (which re-resolves and re-writes). Best-effort and idempotent: a missing
214
- * entry or unreadable file is a no-op. Returns true when an entry was
215
- * actually removed.
149
+ * Drop an entry after a GraphQL error against cached metadata, so a board
150
+ * reconfiguration self-heals. Best-effort, idempotent.
216
151
  *
217
152
  * @param {{
218
153
  * owner?: string|null,
@@ -1,40 +1,13 @@
1
1
  /**
2
- * project-meta-resolver — shared GitHub Projects v2 owner-resolution
3
- * primitive (Story #4237).
4
- *
5
- * Background:
6
- * Both `ColumnSync._loadMeta` (`lib/orchestration/column-sync.js`) and
7
- * `resolveProjectIdByNumber` (`lib/bootstrap/workflow-audit.js`)
8
- * needed to turn a `(owner, projectNumber)` pair into a Projects v2
9
- * board node id. Each historically resolved only **user-owned** /
10
- * `viewer`-owned boards: `viewer.projectV2(number:)` first, then
11
- * `user(login:$owner).projectV2(number:)` (Story #3560). Neither had an
12
- * `organization(login:$owner)` branch, so for an **org-owned** board
13
- * every lookup failed with `NOT_FOUND` and the `agent::*` → board
14
- * Status mirror silently no-oped (reproduced on `Beestera/swarm-os`).
15
- *
16
- * Fix:
17
- * A single shared resolver that walks the owner-type ladder in order —
18
- * `organization(login:$owner)` → `user(login:$owner)` → `viewer` —
19
- * returning the first board it can resolve. Centralising the ladder in
20
- * one place means the org path can never again drift between the two
21
- * call sites.
22
- *
23
- * The resolver issues a sub-query for the project itself (`field(name:
24
- * "Status") { … }` for the column-sync caller, or a bare `id` for the
25
- * workflow-audit caller). Pass the desired projection in via
26
- * `projectFields`; the resolver wraps it in the right owner scope and
27
- * extracts the resolved `projectV2` node.
2
+ * project-meta-resolver — the one Projects v2 owner-resolution ladder
3
+ * (`organization` → `user` → `viewer`), shared so an org-owned board can
4
+ * never again silently fail to resolve at one call site. Callers pass the
5
+ * `projectV2 { … }` selection body as `projectFields`.
28
6
  */
29
7
 
30
8
  /**
31
- * The owner-resolution ladder, in priority order. Each entry names the
32
- * GraphQL root field and whether it requires the `$owner` variable.
33
- *
34
- * `organization` and `user` are keyed by `login: $owner`; `viewer` is the
35
- * authenticated identity and takes no owner argument. The viewer rung is
36
- * the historical default and stays last so a configured owner is always
37
- * preferred over the ambient identity.
9
+ * Priority order. `viewer` (the ambient identity) is last so a configured
10
+ * owner always wins.
38
11
  */
39
12
  const OWNER_SCOPES = Object.freeze([
40
13
  { root: 'organization', needsOwner: true },
@@ -43,11 +16,8 @@ const OWNER_SCOPES = Object.freeze([
43
16
  ]);
44
17
 
45
18
  /**
46
- * Build the GraphQL document for a single owner scope.
47
- *
48
19
  * @param {{ root: string, needsOwner: boolean }} scope
49
- * @param {string} projectFields — the inner `projectV2(number: $number) { … }`
50
- * selection body (everything between the braces).
20
+ * @param {string} projectFields — the selection body inside `projectV2 { … }`.
51
21
  * @returns {string}
52
22
  */
53
23
  function buildScopedQuery(scope, projectFields) {
@@ -72,17 +42,8 @@ function buildScopedQuery(scope, projectFields) {
72
42
  }
73
43
 
74
44
  /**
75
- * Resolve a Projects v2 board node by walking the owner-type ladder.
76
- *
77
- * Tries `organization(login:$owner)` → `user(login:$owner)` → `viewer` in
78
- * order, returning the first non-null `projectV2` node. A scope that
79
- * throws (e.g. GitHub returns `NOT_FOUND` for the wrong owner type) or
80
- * resolves to `null` is treated as a miss and the ladder advances to the
81
- * next rung. Returns `null` when every rung misses.
82
- *
83
- * When `owner` is falsy, only the `viewer` rung is attempted (there is no
84
- * login to scope `organization`/`user` by) — this preserves the original
85
- * viewer-only behaviour for callers that never configured a project owner.
45
+ * The first non-null `projectV2` node down the ladder; a throwing or null
46
+ * rung is a miss. With no `owner`, only `viewer` is tried.
86
47
  *
87
48
  * @param {{
88
49
  * provider: { graphql: Function },
@@ -104,7 +65,6 @@ export async function resolveProjectMeta(args) {
104
65
  }
105
66
 
106
67
  for (const scope of OWNER_SCOPES) {
107
- // Skip the owner-scoped rungs when no owner login is available.
108
68
  if (scope.needsOwner && !owner) continue;
109
69
 
110
70
  const query = buildScopedQuery(scope, projectFields);
@@ -116,8 +76,7 @@ export async function resolveProjectMeta(args) {
116
76
  try {
117
77
  data = await provider.graphql(query, vars);
118
78
  } catch {
119
- // Wrong owner type (NOT_FOUND), missing scope, etc. — advance the
120
- // ladder rather than aborting the whole resolution.
79
+ // Wrong owner type (NOT_FOUND) etc. — advance the ladder.
121
80
  continue;
122
81
  }
123
82
 
@@ -1,56 +1,18 @@
1
1
  /**
2
- * reassert-status-column — re-fire `ColumnSync` against a ticket's
3
- * current label set so the GitHub Projects v2 Status column matches the
4
- * orchestrator's view (Story #2845, hardened in Story #2876).
5
- *
6
- * Why a dedicated helper:
7
- * `transitionTicketState` already calls `syncProjectStatusColumn` at
8
- * label-flip time, but the GitHub built-in `Pull request merged` /
9
- * `Pull request linked to issue` workflows fire ~minutes after the
10
- * PR auto-merges and overwrite Status. The orchestrator's close path
11
- * has long-since exited by then, so "the last write" is the bot's.
12
- * This helper is invoked AFTER the merge confirmation step (via the
13
- * `resync-status-column.js` CLI the `/single-story-deliver` workflow
14
- * doc calls) to reassert authority and win the race deterministically.
15
- *
16
- * Operators who disable the conflicting bot workflows (via the
17
- * `--reap-conflicting-workflows` bootstrap flag) get the same outcome
18
- * without needing the re-sync. The helper is defense-in-depth and is
19
- * cheap to fire — Story #2876 added a bounded poll-and-retry loop so
20
- * the defense actually works against an asynchronous bot overwrite
21
- * that lands after the initial mutation. Without the loop, a one-shot
22
- * mutation routinely lost the race (reproduced on Story #2871 /
23
- * PR #2872).
24
- *
25
- * Surface:
26
- * - {@link reassertStatusColumn} — read the ticket's current labels,
27
- * pick the canonical column via {@link columnForLabels}, push it
28
- * via `ColumnSync.sync`, then poll the live Status for a bounded
29
- * window and re-fire on drift. Returns the sync envelope augmented
30
- * with `attempts`.
2
+ * reassert-status-column — re-fire `ColumnSync` from a ticket's current
3
+ * labels after merge confirmation. GitHub's built-in PR workflows overwrite
4
+ * Status minutes after auto-merge, so a bounded poll-and-refire is needed to
5
+ * win that race; a one-shot mutation routinely lost it.
31
6
  */
32
7
 
33
8
  import { ColumnSync, columnForLabels } from './column-sync.js';
34
9
 
35
- /**
36
- * Default total mutation attempts (including the initial sync). At
37
- * `pollDelayMs = 5000`, four attempts cover a ~15 s defense window —
38
- * long enough to outlast the typical GitHub built-in workflow fire
39
- * timing without ballooning the close-path wall clock.
40
- */
10
+ /** Four attempts at 5 s cover a ~15 s window past typical bot timing. */
41
11
  const DEFAULT_POLL_ATTEMPTS = 4;
42
12
 
43
- /**
44
- * Default delay between drift checks (ms). Five seconds is a sweet
45
- * spot: short enough that the operator doesn't perceive the close
46
- * path as hung, long enough that one re-fire usually wins the race.
47
- */
48
13
  const DEFAULT_POLL_DELAY_MS = 5000;
49
14
 
50
15
  /**
51
- * Production sleep function. Tests inject `sleepFn: () => Promise.resolve()`
52
- * so the poll loop runs instantly.
53
- *
54
16
  * @param {number} ms
55
17
  * @returns {Promise<void>}
56
18
  */
@@ -59,28 +21,11 @@ function defaultSleep(ms) {
59
21
  }
60
22
 
61
23
  /**
62
- * Re-assert the Status column for a single ticket. Reads the ticket's
63
- * current labels so the caller doesn't have to pass them (the typical
64
- * use site is a post-merge CLI that knows the ticket id only).
65
- *
66
- * Returns the same envelope shape as `ColumnSync.sync`, augmented with
67
- * `attempts` (the number of mutations actually fired):
68
- * - `{ status: 'synced', column, attempts }` — the mutation landed
69
- * and the drift-check confirmed Status matches the target. If
70
- * drift was detected and re-fired, `attempts` reflects the total
71
- * mutation count.
72
- * - `{ status: 'drifted', column, attempts }` — the helper exhausted
73
- * `pollAttempts` and the live Status still didn't match the
74
- * target. Returned, not thrown — the caller decides whether to
75
- * escalate. `column` carries the target column the helper was
76
- * trying to set.
77
- * - `{ status: 'skipped', reason }` — no-op for an enumerated reason
78
- * (`no-matching-label`, `no-project`, `no-meta`, `no-option-<col>`,
79
- * `not-on-project`). Skip paths short-circuit before the poll loop.
80
- *
81
- * Throws when the provider is unusable. Other failures (GraphQL,
82
- * network) propagate from `ColumnSync.sync` and `provider.getTicket` —
83
- * callers wrap in try/catch if they want best-effort semantics.
24
+ * Re-assert one ticket's Status column. Returns `ColumnSync.sync`'s envelope
25
+ * plus `attempts`: `synced` (confirmed), `drifted` (budget exhausted, still
26
+ * wrong — returned, not thrown), or `skipped` with a reason (before any
27
+ * polling). Throws on an unusable provider; GraphQL/network errors from the
28
+ * first sync propagate.
84
29
  *
85
30
  * @param {{
86
31
  * provider: { getTicket: Function, graphql: Function, owner: string, repo: string, projectNumber?: number|null },
@@ -132,9 +77,6 @@ export async function reassertStatusColumn(args) {
132
77
  }
133
78
  const sync = new ColumnSync({ provider, logger: logger ?? console, config });
134
79
 
135
- // First attempt — always fires through ColumnSync.sync so the skip
136
- // paths (no-project / no-meta / no-option-<col> / not-on-project)
137
- // short-circuit before we enter the poll loop.
138
80
  const initial = await sync.sync(ticketId, labels);
139
81
  if (initial.status !== 'synced') {
140
82
  return initial;
@@ -142,9 +84,7 @@ export async function reassertStatusColumn(args) {
142
84
  let attempts = 1;
143
85
  let lastEnvelope = { ...initial, attempts };
144
86
 
145
- // Drift loop — read live Status, re-fire if it doesn't match the
146
- // target column. Bounded by pollAttempts so a hostile bot can't
147
- // stall the close path indefinitely.
87
+ // Bounded so a hostile bot cannot stall the close path.
148
88
  for (let i = 1; i < pollAttempts; i += 1) {
149
89
  await sleepFn(pollDelayMs);
150
90
  let current;
@@ -159,7 +99,6 @@ export async function reassertStatusColumn(args) {
159
99
  continue;
160
100
  }
161
101
  if (current === targetColumn) {
162
- // Sticky confirmation — return the existing envelope.
163
102
  return lastEnvelope;
164
103
  }
165
104
  logger?.info?.(
@@ -170,8 +109,7 @@ export async function reassertStatusColumn(args) {
170
109
  try {
171
110
  const next = await sync.sync(ticketId, labels);
172
111
  attempts += 1;
173
- // Skip envelopes during the retry loop are unexpected once we've
174
- // already synced once; preserve their shape but stop retrying.
112
+ // A skip after a successful sync is unexpected: stop retrying.
175
113
  if (next.status !== 'synced') {
176
114
  return { ...next, attempts };
177
115
  }
@@ -185,8 +123,6 @@ export async function reassertStatusColumn(args) {
185
123
  }
186
124
  }
187
125
 
188
- // Exhausted the poll budget — final drift read to report the
189
- // honest outcome to the caller.
190
126
  let final;
191
127
  try {
192
128
  final = await sync.readCurrentColumn(ticketId);
@@ -1,36 +1,20 @@
1
1
  // .agents/scripts/lib/orchestration/remote-verifier.js
2
2
  /**
3
- * remote-verifier.js — deterministic "is there a live, pushable remote?"
4
- * evidence for the delivery entry seams. Issue #4483.
3
+ * remote-verifier.js — verified "is there a live, pushable remote?" evidence
4
+ * for the delivery entry seams, so the workflow branches on
5
+ * `remoteVerified` (use the remote, or block quoting the probe) instead of an
6
+ * agent's perception — never a silent local build.
5
7
  *
6
- * `/mandrel-deliver` could silently shortcut the entire orchestration — building
7
- * the delivery inline and committing to local `main` without pushing —
8
- * when the driving agent *perceived* the environment had no live GitHub
9
- * remote. The judgment was vibes, not fact. This module gives the entry
10
- * seams (`single-story-init.js` for v2 `/mandrel-deliver`) a verified
11
- * probe result to record in their envelopes so the workflow can branch on
12
- * `remoteVerified: true|false` deterministically: use the remote, or
13
- * transition to `agent::blocked` quoting the probe output — never a
14
- * silent local build.
15
- *
16
- * Two probes, both bounded (a hung git spawn must not park the entry
17
- * seam — mirrors the `ghPrListHead` timeout contract in `finalizer.js`):
18
- *
19
- * 1. `git remote get-url origin` — is an `origin` remote configured?
20
- * 2. `git ls-remote origin HEAD` — is it reachable with current auth?
21
- *
22
- * `remoteVerified` is true only when BOTH succeed. The CLI callers do
23
- * NOT flip labels on a false result — the workflow owns the
24
- * `agent::blocked` transition (same division of labour as the preflight
25
- * breach handling).
8
+ * `remoteVerified` requires both `git remote get-url origin` and
9
+ * `git ls-remote origin HEAD` to succeed. Callers flip no labels; the
10
+ * workflow owns the `agent::blocked` transition.
26
11
  */
27
12
 
28
13
  import { spawnSync } from 'node:child_process';
29
14
 
30
15
  /**
31
- * Bounded timeout for each git probe. `ls-remote` is a network call;
32
- * SIGKILL at the bound so an unreachable or hanging remote degrades to a
33
- * deterministic `remoteVerified: false` instead of a stuck entry seam.
16
+ * Per-probe bound, SIGKILLed, so a hanging remote degrades to
17
+ * `remoteVerified: false` instead of parking the entry seam.
34
18
  */
35
19
  export const REMOTE_PROBE_TIMEOUT_MS = 30_000;
36
20
 
@@ -51,8 +35,6 @@ function runProbe({ args, cwd, spawnFn, timeoutMs }) {
51
35
  }
52
36
 
53
37
  /**
54
- * Probe the `origin` remote for existence + reachability.
55
- *
56
38
  * @param {{
57
39
  * cwd?: string,
58
40
  * spawnFn?: typeof spawnSync,
@@ -113,15 +95,9 @@ export function verifyRemote({
113
95
  }
114
96
 
115
97
  /**
116
- * Probe whether a specific branch exists on `origin` — the deterministic
117
- * finalize backstop (issue #4483 fix direction 3): a delivery branch that
118
- * was never pushed MUST fail finalize with an explicit blocker rather
119
- * than let the run declare success.
120
- *
121
- * Distinct from `git-branch-lifecycle.js#branchExistsRemotely` in two
122
- * load-bearing ways: the spawn is bounded (timeout + SIGKILL, so a hung
123
- * remote cannot park the finalize seam) and the result carries the probe
124
- * detail for the blocker envelope instead of a bare boolean.
98
+ * Finalize backstop: a never-pushed delivery branch must fail with a blocker,
99
+ * not declare success. Unlike `branchExistsRemotely`, the spawn is bounded
100
+ * and the result carries probe detail for the blocker envelope.
125
101
  *
126
102
  * @param {{
127
103
  * branch: string,