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,42 +1,8 @@
1
1
  /**
2
- * lib/orchestration/code-review.js — In-process Code Review module.
3
- *
4
- * Story #1155 (Epic #1142, 5.40.0) — extracted the helper-driven
5
- * `epic-code-review` invocation into a callable module so the
6
- * `/mandrel-deliver` runner can run Phase D without spawning a child
7
- * process or routing through an LLM-driven helper.
8
- *
9
- * Story #2831 (Epic #2815, Pluggable Code Review) — refactored to load
10
- * the review provider through `review-provider-factory`, call the
11
- * adapter's `runReview()` to collect a `Finding[]`, render the
12
- * structured-comment body via `findings-renderer`, and post the
13
- * comment through the GitHub provider here (the adapter is post-free
14
- * by design).
15
- *
16
- * v2.0.0 removed the Epic tier. The Epic-scope envelope and the
17
- * Epic-scoped `code-review.start` / `.end` lifecycle emits (whose schema
18
- * requires `epicId`) went with it; Story scope is the only scope. Story #5024
19
- * deleted those schemas along with the bus that was their only publish path.
20
- *
21
- * Public API:
22
- * - `runCodeReview({ ticketId, headRef, provider, logger, ... })` →
23
- * `{ status, severity, posted, report, halted, blockerReason }`.
24
- *
25
- * Behaviour:
26
- * - Loads the configured review adapter via the factory; defaults to
27
- * a single `native` chain entry when `delivery.codeReview.providers`
28
- * is unset or empty.
29
- * - Always posts the unified `verification-results` structured comment on
30
- * the target issue/PR (the adapter never posts; the orchestrator owns
31
- * persistence). Story #4411 (Epic #4405) unified the former
32
- * `code-review` and `audit-results` findings contracts into this one
33
- * `verification-results` marker.
34
- * - Treats severity.critical > 0 as a halting blocker — the merged
35
- * `/mandrel-deliver` runner consults `halted` and refuses to advance
36
- * to Phase E (retro) when set.
37
- *
38
- * Halting on critical findings is the in-process replacement for the
39
- * helper's "operator must remediate before /mandrel-deliver" gate.
2
+ * lib/orchestration/code-review.js — in-process Story-scope code review:
3
+ * load the configured review adapter (default `native`), collect its
4
+ * `Finding[]`, render and post the `verification-results` comment (adapters
5
+ * never post), and report `halted` on any surviving critical finding.
40
6
  */
41
7
 
42
8
  import { hasSurvivingCritical } from '../audit-suite/findings.js';
@@ -56,26 +22,16 @@ import { createReviewProvider } from './review-providers/review-provider-factory
56
22
  import { upsertStructuredComment } from './ticketing.js';
57
23
 
58
24
  /**
59
- * Review depth tiers, ordered light → standard → deep. The depth is resolved
60
- * by the shared {@link resolveDepth} resolver from two observable properties of
61
- * the diff under review — whether its changed files touch a registered
62
- * sensitive path ({@link deriveChangeLevel}) and their mechanical count — then
63
- * threaded into the review provider's `runReview` input so a sensitive *or*
64
- * wide-footprint change gets a deeper pass than a small, unremarkable one.
65
- * Depth is an **input** signal only — it never changes the
66
- * `{ status, severity, posted, report, halted, blockerReason }` output
67
- * envelope nor the `verification-results` structured-comment body (Story #3876,
68
- * extended by Story #3938; re-based off the diff by Story #4542).
25
+ * Review depth (light → standard → deep), from the diff's sensitivity and
26
+ * width. An input to `runReview` only; never changes the output envelope or
27
+ * the posted comment.
69
28
  *
70
29
  * @typedef {import('./review-depth.js').ReviewDepth} ReviewDepth
71
30
  */
72
31
 
73
32
  /**
74
- * Resolve the base ref used when a caller omits `baseRef`. Remote-qualified,
75
- * never the bare branch name — a caller that does not name a base must not
76
- * silently inherit the local ref's drift (Story #5325). An unfetched remote
77
- * then yields an unenumerable diff, which every downstream consumer already
78
- * fails safe on, instead of a confidently-wrong wide one.
33
+ * Default base is remote-qualified so it cannot inherit local-ref drift; an
34
+ * unfetched remote yields an unenumerable diff, which consumers fail safe on.
79
35
  */
80
36
  function resolveConfigBase(config) {
81
37
  return remoteBaseRef(config?.project?.baseBranch ?? 'main');
@@ -89,9 +45,6 @@ function resolveCommentTargetId(commentTargetId, fallback) {
89
45
  }
90
46
 
91
47
  /**
92
- * Resolve the Story-scope envelope from the parameterized
93
- * `{ scope: 'story', ticketId, baseRef, headRef, commentTargetId }` shape.
94
- *
95
48
  * @returns {{
96
49
  * scope: 'story',
97
50
  * ticketId: number,
@@ -123,40 +76,15 @@ function resolveStoryScope(opts, config) {
123
76
  };
124
77
  }
125
78
 
126
- /**
127
- * Resolve the scope envelope
128
- * (`{ scope, ticketId, baseRef, headRef, commentTargetId }`). v2.0.0
129
- * removed the Epic tier, so `'story'` is the only scope.
130
- */
79
+ /** `'story'` is the only scope. */
131
80
  function resolveScopeEnvelope(opts, config) {
132
81
  return resolveStoryScope(opts, config);
133
82
  }
134
83
 
135
84
  /**
136
- * In-process wrapper that the `/mandrel-deliver` runner and the
137
- * `/single-story-deliver` close path consume.
138
- *
139
- * Story #2252 — emits `code-review.start` immediately on entry and
140
- * `code-review.end` immediately before returning the envelope (success
141
- * or halt). On runner throw, emits `code-review.end` with the canonical
142
- * structure (`status: 'invalid'`) before re-throwing so the ledger
143
- * always carries the closing boundary.
144
- *
145
- * Story #2831 — the runner loads its adapter through the factory; the
146
- * `reviewProvider` opt overrides the factory for tests. Severity is
147
- * derived from the `Finding[]` returned by the adapter (no separate
148
- * severity field on the runner result).
149
- *
150
- * Story #2839 (Epic #2815) — the Story closer requests a Story-scope
151
- * review against `main`, posts the structured findings comment to the PR
152
- * (via `commentTargetId`), and surfaces critical findings to the caller
153
- * as `halted: true`.
154
- *
155
- * Argument shape:
156
- * `{ ticketId, baseRef, headRef, [commentTargetId], provider }`
157
- * `baseRef` defaults to the project base branch; `headRef` is required.
158
- * `commentTargetId` overrides the post target (e.g. PR number) while
159
- * `ticketId` continues to label the rendered header ("Story #N").
85
+ * Run a Story-scope review. `headRef` is required; `baseRef` defaults to
86
+ * the remote base branch; `commentTargetId` (e.g. a PR number) overrides
87
+ * the post target while `ticketId` still labels the header.
160
88
  *
161
89
  * @param {{
162
90
  * scope?: 'story',
@@ -188,12 +116,7 @@ function resolveScopeEnvelope(opts, config) {
188
116
  * blockerReason: string|null,
189
117
  * }>}
190
118
  */
191
- /**
192
- * Resolve the human-facing provider name from the resolved code-review
193
- * config. Multi-entry chains render as `chain[a,b,...]`; a single-entry
194
- * chain (including the unset/empty default) renders that entry's name;
195
- * everything else falls back to `'native'`.
196
- */
119
+ /** Display name: the single entry's name, `chain[a,b]`, or `'native'`. */
197
120
  function resolveProviderName(codeReviewConfig) {
198
121
  const providers =
199
122
  codeReviewConfig && Array.isArray(codeReviewConfig.providers)
@@ -209,17 +132,10 @@ function resolveProviderName(codeReviewConfig) {
209
132
  }
210
133
 
211
134
  /**
212
- * Resolve the change set the depth derivation reads (Story #4593).
213
- *
214
- * `opts.changedFiles` is an injection with three distinct states,
215
- * and the difference is load-bearing: an **array** is the change set to use
216
- * verbatim; an explicit **null** is a caller (`runStoryReviewCore`) reporting
217
- * that it already tried and the diff is unenumerable — re-running git here would
218
- * only fail again, so it degrades straight to the fail-safe tier; **absent**
219
- * means no caller enumerated at all, so the shared {@link computeChangeSet}
220
- * enumerator runs as the fallback (standalone CLI use). On the close path the
221
- * spine always injects, so the diff is enumerated exactly once per delivery and
222
- * this pillar can never disagree with the lens pass about what changed.
135
+ * `opts.changedFiles` has three states: an array is used verbatim; `null`
136
+ * means the caller already found the diff unenumerable (fail-safe tier, no
137
+ * retry); absent means enumerate here. The close path always injects, so
138
+ * review and lens pass agree on what changed.
223
139
  */
224
140
  function resolveInjectedChangedFiles({ opts, baseRef, headRef }) {
225
141
  if (opts.changedFiles === undefined) {
@@ -230,12 +146,8 @@ function resolveInjectedChangedFiles({ opts, baseRef, headRef }) {
230
146
  }
231
147
 
232
148
  /**
233
- * Build the provider `runReview` input, resolving the review depth from the
234
- * diff under review: its changed files derive the change level (sensitive path
235
- * touched or not — Story #4542) and their count supplies the width. The depth
236
- * is an input-only signal (light → standard → deep) and never touches the
237
- * output envelope or the posted comment. An unenumerable diff → `standard`.
238
- * Story #4075 — extracted from `runCodeReview`.
149
+ * Build the `runReview` input with its depth; an unenumerable diff yields
150
+ * `standard`.
239
151
  */
240
152
  function buildReviewInput({ opts, scope, ticketId, baseRef, headRef }) {
241
153
  const changedFiles = resolveInjectedChangedFiles({ opts, baseRef, headRef });
@@ -243,9 +155,7 @@ function buildReviewInput({ opts, scope, ticketId, baseRef, headRef }) {
243
155
  typeof opts.changedFileCount === 'number'
244
156
  ? opts.changedFileCount
245
157
  : (changedFiles?.length ?? null);
246
- // v2 Stage 2: review depth uses DEFAULT_DIFF_WIDTH (mechanical file count
247
- // of the diff under review). It is deliberately decoupled from the
248
- // planning model-capacity advisory (`DEFAULT_MODEL_CAPACITY`).
158
+ // Width is the diff's file count, decoupled from planning model capacity.
249
159
  const { level } = deriveChangeLevel({ changedFiles });
250
160
  const depth = resolveDepth({
251
161
  derivedLevel: level,
@@ -262,10 +172,7 @@ function buildReviewInput({ opts, scope, ticketId, baseRef, headRef }) {
262
172
  }
263
173
 
264
174
  /**
265
- * Feature-detect manual-prompt providers (Story #2871). Legacy
266
- * single-adapter providers don't carry `getPromptMessages`, so the
267
- * empty-array fallback keeps the old snapshot byte-stable; a throw is
268
- * logged and degraded to empty.
175
+ * Optional `getPromptMessages`; absent or throwing yields `[]`.
269
176
  */
270
177
  async function resolvePromptMessages(reviewProvider, reviewInput, logger) {
271
178
  if (typeof reviewProvider.getPromptMessages !== 'function') return [];
@@ -283,9 +190,7 @@ async function resolvePromptMessages(reviewProvider, reviewInput, logger) {
283
190
  }
284
191
 
285
192
  /**
286
- * Upsert the rendered report as a structured comment. Posting failure is
287
- * non-fatal: it is logged and surfaced via `posted: false`. Story #4075 —
288
- * extracted from `runCodeReview`.
193
+ * Posting failure is non-fatal and surfaces as `posted: false`.
289
194
  */
290
195
  async function postReviewComment({
291
196
  upsertCommentFn,
@@ -319,12 +224,6 @@ async function postReviewComment({
319
224
  }
320
225
  }
321
226
 
322
- /**
323
- * Run the review pipeline (resolve provider → runReview → prompt messages →
324
- * render → post comment) and shape the `status: 'ok'` result. Pure of the
325
- * lifecycle-boundary concern — `runCodeReview` owns the start/end emit pair.
326
- * Story #4075 — extracted to keep both bodies below the CC must-fix band.
327
- */
328
227
  async function executeReviewPipeline({ opts, config, envelope }) {
329
228
  const {
330
229
  provider,
@@ -366,7 +265,7 @@ async function executeReviewPipeline({ opts, config, envelope }) {
366
265
  logger,
367
266
  );
368
267
 
369
- // Story #4839 — degraded gates ride beside the findings, never inside them.
268
+ // Degraded gates ride beside the findings, never inside them.
370
269
  const degradations = await collectProviderDegradations(
371
270
  reviewProvider,
372
271
  logger,
@@ -413,8 +312,5 @@ export async function runCodeReview(opts = {}) {
413
312
  const config = resolveConfigFn();
414
313
  const envelope = resolveScopeEnvelope(opts, config);
415
314
 
416
- // No lifecycle-bus emit: the `code-review.start` / `.end` ledger pair was
417
- // Epic-scoped (its schema requires `epicId`), and v2.0.0 removed the Epic
418
- // tier. Story-scope review sits outside the lifecycle ledger entirely.
419
315
  return executeReviewPipeline({ opts, config, envelope });
420
316
  }
@@ -1,37 +1,8 @@
1
1
  /**
2
- * ColumnSync — derive the GitHub Projects v2 Status column from an issue's
3
- * agent:: labels, and push the update via the provider's GraphQL surface.
4
- *
5
- * The Status field carries only the three stock GitHub options
6
- * (`Todo` / `In Progress` / `Done`) — granular lifecycle state lives in the
7
- * `agent::*` labels themselves. This mapping collapses each lifecycle label
8
- * onto one of those three buckets:
9
- *
10
- * agent::review-spec → Todo
11
- * agent::ready → Todo
12
- * agent::executing → In Progress
13
- * agent::closing → In Progress
14
- * agent::blocked → In Progress (the `agent::blocked` label is the
15
- * granular signal; the board column just shows the
16
- * work is still in flight)
17
- * agent::done → Done
18
- *
19
- * No-op (soft fail) when:
20
- * - `projectNumber` is not configured
21
- * - The Status field or the required option is not present on the project
22
- * - The issue is not a project item (e.g. orchestrator running on a fork)
23
- *
24
- * The sync is implemented as pure functions plus a thin class wrapper so
25
- * tests can pump a fake provider's `graphql` calls without touching live
26
- * GitHub.
27
- *
28
- * Located at `lib/orchestration/column-sync.js` (Story #2548) so the
29
- * canonical state mutator `transitionTicketState`
30
- * (`lib/orchestration/ticketing/state.js`) can invoke it without an
31
- * upward dependency into the deleted `epic-runner/` tree. Prior to #2548 this module
32
- * lived under `epic-runner/` and was only wired against the Epic
33
- * ticket — Stories and Tasks never updated their Projects v2 Status
34
- * column on label flips.
2
+ * ColumnSync — collapse an issue's `agent::*` labels onto the stock Projects
3
+ * v2 Status options (`Todo` / `In Progress` / `Done`) and push it via
4
+ * GraphQL. Soft no-op when no project is configured, the Status field or
5
+ * option is missing, or the issue is not on the board.
35
6
  */
36
7
 
37
8
  import { AGENT_LABELS } from '../label-constants.js';
@@ -52,11 +23,8 @@ export const LABEL_TO_COLUMN = Object.freeze({
52
23
  });
53
24
 
54
25
  /**
55
- * Pick the target column for a set of labels. Terminal `done` wins
56
- * unconditionally; otherwise any in-flight label (executing / closing /
57
- * blocked) collapses to `In Progress`, and parking labels (review-spec /
58
- * ready) collapse to `Todo`. Returns null when no `agent::*` label is
59
- * present so the caller can skip the sync.
26
+ * `done` wins, then any in-flight label, then parking labels; `null` when no
27
+ * `agent::*` label is present.
60
28
  */
61
29
  export function columnForLabels(labels) {
62
30
  const set = new Set(labels);
@@ -95,23 +63,14 @@ export class ColumnSync {
95
63
  null;
96
64
  this.projectOwner = opts.projectOwner ?? provider.projectOwner ?? null;
97
65
  this.logger = opts.logger ?? ctx?.logger ?? console;
98
- // Resolved config bag used to locate the on-disk meta cache's tempRoot.
99
- // Optional — when omitted, the cache resolves the framework-default
100
- // `temp` root (Story #4252).
66
+ // Locates the meta cache's tempRoot; absent means the default `temp`.
101
67
  this.config = opts.config ?? ctx?.config ?? undefined;
102
68
  this._meta = null; // lazy-cached { projectId, fieldId, options: Map<name, id> }
103
- // Records whether the in-process `_meta` was hydrated from the on-disk
104
- // cache, so a GraphQL error against possibly-stale cached metadata can
105
- // invalidate the disk entry and force a fresh resolve on the next flip
106
- // (Story #4252).
69
+ // Disk-hydrated meta may be stale; a failed mutation then invalidates it.
107
70
  this._metaFromDiskCache = false;
108
71
  }
109
72
 
110
73
  /**
111
- * Sync a single issue to the column its `agent::*` labels imply. Returns a
112
- * result descriptor (`synced | skipped | failed`) so callers can log
113
- * without parsing errors.
114
- *
115
74
  * @param {number} issueId
116
75
  * @param {string[]} labels
117
76
  */
@@ -122,19 +81,8 @@ export class ColumnSync {
122
81
  }
123
82
 
124
83
  /**
125
- * Push one issue to a column named **directly**, skipping the label
126
- * derivation {@link sync} performs.
127
- *
128
- * Split out for the one caller whose target column cannot come from labels:
129
- * a container Epic carries no `agent::*` label by construction, so
130
- * {@link columnForLabels} returns `null` for it and `sync` can never move
131
- * it. The Epic's column is derived from its children instead
132
- * (`epic-rollup.js`) and handed here — which keeps that derivation from
133
- * having to fabricate a label on the container just to reach the board, the
134
- * one thing the container invariant forbids.
135
- *
136
- * Every skip path, the metadata cache and the stale-cache self-heal are
137
- * shared with `sync` because they live here rather than in it.
84
+ * Set a column directly, without label derivation — for container Epics,
85
+ * which carry no `agent::*` label by invariant.
138
86
  *
139
87
  * @param {number} issueId
140
88
  * @param {string} column Board column name (`Todo` | `In Progress` | `Done`).
@@ -177,12 +125,8 @@ export class ColumnSync {
177
125
  },
178
126
  );
179
127
  } catch (err) {
180
- // A failed mutation against metadata that came from the disk cache
181
- // most likely means the board was reconfigured since the entry was
182
- // written (a stale projectId / fieldId / optionId). Invalidate the
183
- // disk entry so the next flip re-resolves against the live board and
184
- // self-heals (Story #4252). Re-throw so the caller's existing error
185
- // handling (e.g. `syncProjectStatusColumn`'s warn) is preserved.
128
+ // Likely a reconfigured board: drop cached meta so the next flip
129
+ // self-heals, and re-throw for the caller's handling.
186
130
  this.#invalidateMetaCache();
187
131
  throw err;
188
132
  }
@@ -190,9 +134,7 @@ export class ColumnSync {
190
134
  }
191
135
 
192
136
  /**
193
- * The `(owner, projectNumber)` pair the disk cache is keyed by. Mirrors
194
- * the owner that `#loadMeta` resolves the board against so a cache hit and
195
- * a live resolve agree on the same board identity.
137
+ * Cache key; same owner `#loadMeta` resolves against.
196
138
  *
197
139
  * @returns {{ owner: string|null, projectNumber: number|null }}
198
140
  */
@@ -204,11 +146,8 @@ export class ColumnSync {
204
146
  }
205
147
 
206
148
  /**
207
- * Invalidate the on-disk metadata cache entry for this board and drop the
208
- * in-process copy, so the next `#loadMeta` re-resolves from the live
209
- * board. Only fires when the current `_meta` came from the disk cache —
210
- * a freshly-resolved entry that fails the mutation is a transient/live
211
- * problem, not a stale-cache problem.
149
+ * Only disk-hydrated meta is invalidated; a fresh resolve that fails is a
150
+ * live problem, not a stale cache.
212
151
  */
213
152
  #invalidateMetaCache() {
214
153
  if (!this._metaFromDiskCache) return;
@@ -220,9 +159,8 @@ export class ColumnSync {
220
159
 
221
160
  async #loadMeta() {
222
161
  if (this._meta !== null) return this._meta || null;
223
- // Disk cache hit short-circuits the ~2 metadata GraphQL round-trips
224
- // (resolveProjectMeta) — repo-invariant board metadata persists across
225
- // the cold CLI processes of a single-story delivery (Story #4252).
162
+ // Board meta is repo-invariant; the disk cache spares each cold CLI
163
+ // process the resolve round-trips.
226
164
  const cachedBoard = this.#cacheBoard;
227
165
  const cached = readProjectMetaCache({
228
166
  owner: cachedBoard.owner,
@@ -235,18 +173,9 @@ export class ColumnSync {
235
173
  return this._meta;
236
174
  }
237
175
  try {
238
- // Resolve the board by walking the owner-type ladder
239
- // (organization → user → viewer) via the shared resolver so the
240
- // org-owned path can't drift from `workflow-audit.js`. The Status
241
- // single-select field is projected alongside the board id in one
242
- // round-trip. (Story #4237; org-owner support extends the
243
- // user/viewer ladder added in #3560.)
176
+ // Shared org → user → viewer resolver; Status field in one round-trip.
244
177
  const project = await resolveProjectMeta({
245
178
  provider: this.provider,
246
- // Prefer the explicit `github.projectOwner`; fall back to the repo
247
- // owner so an org-owned board still gets a login to scope
248
- // `organization(login:)` / `user(login:)` by even when no separate
249
- // projectOwner is configured. `viewer` is always the final rung.
250
179
  owner: this.projectOwner ?? this.provider.owner ?? null,
251
180
  projectNumber: this.projectNumber,
252
181
  projectFields: `
@@ -269,9 +198,7 @@ export class ColumnSync {
269
198
  fieldId: field.id,
270
199
  options,
271
200
  };
272
- // Persist the freshly-resolved, repo-invariant metadata so the next
273
- // cold flip reads it from disk instead of re-paying the resolve
274
- // (Story #4252). Best-effort: a write failure never blocks the sync.
201
+ // Best-effort; a write failure never blocks the sync.
275
202
  writeProjectMetaCache({
276
203
  owner: cachedBoard.owner,
277
204
  projectNumber: cachedBoard.projectNumber,
@@ -290,17 +217,8 @@ export class ColumnSync {
290
217
  }
291
218
 
292
219
  /**
293
- * Read the live `Status` column for an issue from the Projects v2
294
- * board. Returns the column name (e.g. `'Done'`, `'In Progress'`)
295
- * or `null` when the issue is not on the configured project, the
296
- * Status field has no current value, or the metadata cannot be
297
- * resolved.
298
- *
299
- * Story #2876 — used by `reassertStatusColumn` to detect drift
300
- * between the orchestrator's intended column and the bot-rewritten
301
- * column. The labels alone don't move when the bot overwrites
302
- * Status — that's the bug class we defend against — so the
303
- * drift-check MUST read the live Status, not the issue labels.
220
+ * Live Status column, or `null`. Drift checks must read this, not labels:
221
+ * the Projects bot rewrites Status without touching labels.
304
222
  *
305
223
  * @param {number} issueId
306
224
  * @returns {Promise<string|null>}
@@ -336,14 +254,8 @@ export class ColumnSync {
336
254
  }
337
255
 
338
256
  async #getProjectItemId(issueId, projectId) {
339
- // Walk from the issue to its projectItems and pick the one whose
340
- // project.id matches the configured board. The previous implementation
341
- // paginated `node(projectId).items(first: 100)` and scanned for the
342
- // issue number, which silently returned null on any board with >100
343
- // items — the Mandrel board crossed that cliff at ~2,300 items, so
344
- // every recent ticket's Status flip became a no-op. The by-issue path
345
- // is O(1) per sync and has no pagination cliff (an issue is
346
- // realistically never on more than a handful of boards at once).
257
+ // Walk issue → projectItems, not board → items: scanning board items
258
+ // hits a pagination cliff on large boards; an issue is on few boards.
347
259
  const owner = this.provider.owner;
348
260
  const repo = this.provider.repo;
349
261
  if (!owner || !repo) return null;