@urateam/core 0.1.55 → 0.1.57

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 (332) hide show
  1. package/dist/__tests__/audit-immutability.test.js +8 -0
  2. package/dist/__tests__/audit-immutability.test.js.map +1 -1
  3. package/dist/__tests__/auth-check.test.js +130 -16
  4. package/dist/__tests__/auth-check.test.js.map +1 -1
  5. package/dist/__tests__/auth-monitor.test.js +210 -87
  6. package/dist/__tests__/auth-monitor.test.js.map +1 -1
  7. package/dist/__tests__/bec-238-repro.test.d.ts +2 -0
  8. package/dist/__tests__/bec-238-repro.test.d.ts.map +1 -0
  9. package/dist/__tests__/bec-238-repro.test.js +116 -0
  10. package/dist/__tests__/bec-238-repro.test.js.map +1 -0
  11. package/dist/__tests__/bec146-repro.test.d.ts +2 -0
  12. package/dist/__tests__/bec146-repro.test.d.ts.map +1 -0
  13. package/dist/__tests__/bec146-repro.test.js +153 -0
  14. package/dist/__tests__/bec146-repro.test.js.map +1 -0
  15. package/dist/__tests__/circuit-breaker-config.test.d.ts +2 -0
  16. package/dist/__tests__/circuit-breaker-config.test.d.ts.map +1 -0
  17. package/dist/__tests__/circuit-breaker-config.test.js +32 -0
  18. package/dist/__tests__/circuit-breaker-config.test.js.map +1 -0
  19. package/dist/__tests__/circuit-breaker-events.test.d.ts +2 -0
  20. package/dist/__tests__/circuit-breaker-events.test.d.ts.map +1 -0
  21. package/dist/__tests__/circuit-breaker-events.test.js +53 -0
  22. package/dist/__tests__/circuit-breaker-events.test.js.map +1 -0
  23. package/dist/__tests__/circuit-breaker-integration.test.d.ts +2 -0
  24. package/dist/__tests__/circuit-breaker-integration.test.d.ts.map +1 -0
  25. package/dist/__tests__/circuit-breaker-integration.test.js +192 -0
  26. package/dist/__tests__/circuit-breaker-integration.test.js.map +1 -0
  27. package/dist/__tests__/circuit-breaker-probe.test.d.ts +2 -0
  28. package/dist/__tests__/circuit-breaker-probe.test.d.ts.map +1 -0
  29. package/dist/__tests__/circuit-breaker-probe.test.js +124 -0
  30. package/dist/__tests__/circuit-breaker-probe.test.js.map +1 -0
  31. package/dist/__tests__/circuit-breaker-recover.test.d.ts +2 -0
  32. package/dist/__tests__/circuit-breaker-recover.test.d.ts.map +1 -0
  33. package/dist/__tests__/circuit-breaker-recover.test.js +52 -0
  34. package/dist/__tests__/circuit-breaker-recover.test.js.map +1 -0
  35. package/dist/__tests__/circuit-breaker-sweep.test.d.ts +2 -0
  36. package/dist/__tests__/circuit-breaker-sweep.test.d.ts.map +1 -0
  37. package/dist/__tests__/circuit-breaker-sweep.test.js +118 -0
  38. package/dist/__tests__/circuit-breaker-sweep.test.js.map +1 -0
  39. package/dist/__tests__/db-migrations.test.js +7 -3
  40. package/dist/__tests__/db-migrations.test.js.map +1 -1
  41. package/dist/__tests__/decision-artifact-schema.test.d.ts +2 -0
  42. package/dist/__tests__/decision-artifact-schema.test.d.ts.map +1 -0
  43. package/dist/__tests__/decision-artifact-schema.test.js +45 -0
  44. package/dist/__tests__/decision-artifact-schema.test.js.map +1 -0
  45. package/dist/__tests__/decisions-parser.test.d.ts +2 -0
  46. package/dist/__tests__/decisions-parser.test.d.ts.map +1 -0
  47. package/dist/__tests__/decisions-parser.test.js +59 -0
  48. package/dist/__tests__/decisions-parser.test.js.map +1 -0
  49. package/dist/__tests__/decisions-store.test.d.ts +2 -0
  50. package/dist/__tests__/decisions-store.test.d.ts.map +1 -0
  51. package/dist/__tests__/decisions-store.test.js +68 -0
  52. package/dist/__tests__/decisions-store.test.js.map +1 -0
  53. package/dist/__tests__/decisions-table-migration.test.d.ts +2 -0
  54. package/dist/__tests__/decisions-table-migration.test.d.ts.map +1 -0
  55. package/dist/__tests__/decisions-table-migration.test.js +56 -0
  56. package/dist/__tests__/decisions-table-migration.test.js.map +1 -0
  57. package/dist/__tests__/execute-stage-session-opts.test.js +2 -1
  58. package/dist/__tests__/execute-stage-session-opts.test.js.map +1 -1
  59. package/dist/__tests__/executor-issue-id.test.js +2 -1
  60. package/dist/__tests__/executor-issue-id.test.js.map +1 -1
  61. package/dist/__tests__/extract-handoff-decisions.test.d.ts +2 -0
  62. package/dist/__tests__/extract-handoff-decisions.test.d.ts.map +1 -0
  63. package/dist/__tests__/extract-handoff-decisions.test.js +26 -0
  64. package/dist/__tests__/extract-handoff-decisions.test.js.map +1 -0
  65. package/dist/__tests__/force-push-agent-branches.test.js +38 -15
  66. package/dist/__tests__/force-push-agent-branches.test.js.map +1 -1
  67. package/dist/__tests__/github-webhook.test.js +117 -0
  68. package/dist/__tests__/github-webhook.test.js.map +1 -1
  69. package/dist/__tests__/implement-template-decisions.test.d.ts +2 -0
  70. package/dist/__tests__/implement-template-decisions.test.d.ts.map +1 -0
  71. package/dist/__tests__/implement-template-decisions.test.js +41 -0
  72. package/dist/__tests__/implement-template-decisions.test.js.map +1 -0
  73. package/dist/__tests__/migrator.test.js +137 -39
  74. package/dist/__tests__/migrator.test.js.map +1 -1
  75. package/dist/__tests__/pipeline-runner.test.js +118 -0
  76. package/dist/__tests__/pipeline-runner.test.js.map +1 -1
  77. package/dist/__tests__/pm-audit-retention-step.test.js +3 -0
  78. package/dist/__tests__/pm-audit-retention-step.test.js.map +1 -1
  79. package/dist/__tests__/pm-budget-alerts.test.d.ts +14 -0
  80. package/dist/__tests__/pm-budget-alerts.test.d.ts.map +1 -1
  81. package/dist/__tests__/pm-budget-alerts.test.js +90 -18
  82. package/dist/__tests__/pm-budget-alerts.test.js.map +1 -1
  83. package/dist/__tests__/pm-budget-refused-event.test.js +2 -0
  84. package/dist/__tests__/pm-budget-refused-event.test.js.map +1 -1
  85. package/dist/__tests__/pm-budget-utc-boundary.test.d.ts +2 -0
  86. package/dist/__tests__/pm-budget-utc-boundary.test.d.ts.map +1 -0
  87. package/dist/__tests__/pm-budget-utc-boundary.test.js +128 -0
  88. package/dist/__tests__/pm-budget-utc-boundary.test.js.map +1 -0
  89. package/dist/__tests__/pm-conflict.test.js +145 -5
  90. package/dist/__tests__/pm-conflict.test.js.map +1 -1
  91. package/dist/__tests__/pm-cost-rollup-step.test.js +2 -0
  92. package/dist/__tests__/pm-cost-rollup-step.test.js.map +1 -1
  93. package/dist/__tests__/pm-promote.test.js +111 -0
  94. package/dist/__tests__/pm-promote.test.js.map +1 -1
  95. package/dist/__tests__/pm-scheduler.test.js +1 -0
  96. package/dist/__tests__/pm-scheduler.test.js.map +1 -1
  97. package/dist/__tests__/pm-sso-prune-step.test.js +2 -0
  98. package/dist/__tests__/pm-sso-prune-step.test.js.map +1 -1
  99. package/dist/__tests__/preflight-claude-auth.test.js +3 -2
  100. package/dist/__tests__/preflight-claude-auth.test.js.map +1 -1
  101. package/dist/__tests__/ralph-review-fix-regression.test.js +1 -0
  102. package/dist/__tests__/ralph-review-fix-regression.test.js.map +1 -1
  103. package/dist/__tests__/ralph.test.js +1 -0
  104. package/dist/__tests__/ralph.test.js.map +1 -1
  105. package/dist/__tests__/release-manager-qarun-query.test.d.ts +2 -0
  106. package/dist/__tests__/release-manager-qarun-query.test.d.ts.map +1 -0
  107. package/dist/__tests__/release-manager-qarun-query.test.js +233 -0
  108. package/dist/__tests__/release-manager-qarun-query.test.js.map +1 -0
  109. package/dist/__tests__/release-manager-scheduler.test.js +62 -0
  110. package/dist/__tests__/release-manager-scheduler.test.js.map +1 -1
  111. package/dist/__tests__/release-manager-slack-handler.test.js +66 -0
  112. package/dist/__tests__/release-manager-slack-handler.test.js.map +1 -1
  113. package/dist/__tests__/reproduce-bec113-pagination-warning.test.js +1 -0
  114. package/dist/__tests__/reproduce-bec113-pagination-warning.test.js.map +1 -1
  115. package/dist/__tests__/reproduce-bec62.test.js +1 -0
  116. package/dist/__tests__/reproduce-bec62.test.js.map +1 -1
  117. package/dist/__tests__/reproduce-bec91-stuck-in-progress.test.js +2 -0
  118. package/dist/__tests__/reproduce-bec91-stuck-in-progress.test.js.map +1 -1
  119. package/dist/__tests__/resolve-claude-auth.test.js +10 -8
  120. package/dist/__tests__/resolve-claude-auth.test.js.map +1 -1
  121. package/dist/__tests__/session-lazy-creation.test.js +2 -1
  122. package/dist/__tests__/session-lazy-creation.test.js.map +1 -1
  123. package/dist/__tests__/session-resolver.test.d.ts +13 -0
  124. package/dist/__tests__/session-resolver.test.d.ts.map +1 -0
  125. package/dist/__tests__/session-resolver.test.js +152 -0
  126. package/dist/__tests__/session-resolver.test.js.map +1 -0
  127. package/dist/__tests__/session-resume-fallback.test.js +2 -1
  128. package/dist/__tests__/session-resume-fallback.test.js.map +1 -1
  129. package/dist/__tests__/stage-models.test.js +3 -2
  130. package/dist/__tests__/stage-models.test.js.map +1 -1
  131. package/dist/__tests__/start-todo.test.js +29 -0
  132. package/dist/__tests__/start-todo.test.js.map +1 -1
  133. package/dist/__tests__/surgical-review-fix-prompt.test.d.ts +2 -0
  134. package/dist/__tests__/surgical-review-fix-prompt.test.d.ts.map +1 -0
  135. package/dist/__tests__/surgical-review-fix-prompt.test.js +71 -0
  136. package/dist/__tests__/surgical-review-fix-prompt.test.js.map +1 -0
  137. package/dist/__tests__/surgical-review-fix-runner.test.d.ts +2 -0
  138. package/dist/__tests__/surgical-review-fix-runner.test.d.ts.map +1 -0
  139. package/dist/__tests__/surgical-review-fix-runner.test.js +171 -0
  140. package/dist/__tests__/surgical-review-fix-runner.test.js.map +1 -0
  141. package/dist/__tests__/triage-preserve-acs.test.d.ts +2 -0
  142. package/dist/__tests__/triage-preserve-acs.test.d.ts.map +1 -0
  143. package/dist/__tests__/triage-preserve-acs.test.js +240 -0
  144. package/dist/__tests__/triage-preserve-acs.test.js.map +1 -0
  145. package/dist/__tests__/validate-run-mode.test.js +1 -0
  146. package/dist/__tests__/validate-run-mode.test.js.map +1 -1
  147. package/dist/__tests__/validate.test.js +1 -0
  148. package/dist/__tests__/validate.test.js.map +1 -1
  149. package/dist/audit/auth-error-messages.d.ts +6 -0
  150. package/dist/audit/auth-error-messages.d.ts.map +1 -0
  151. package/dist/audit/auth-error-messages.js +18 -0
  152. package/dist/audit/auth-error-messages.js.map +1 -0
  153. package/dist/audit/events.d.ts +51 -4
  154. package/dist/audit/events.d.ts.map +1 -1
  155. package/dist/audit/events.js +78 -5
  156. package/dist/audit/events.js.map +1 -1
  157. package/dist/audit/index.d.ts +1 -0
  158. package/dist/audit/index.d.ts.map +1 -1
  159. package/dist/audit/index.js +1 -0
  160. package/dist/audit/index.js.map +1 -1
  161. package/dist/db/client.d.ts.map +1 -1
  162. package/dist/db/client.js +20 -0
  163. package/dist/db/client.js.map +1 -1
  164. package/dist/db/decisions-store.d.ts +25 -0
  165. package/dist/db/decisions-store.d.ts.map +1 -0
  166. package/dist/db/decisions-store.js +56 -0
  167. package/dist/db/decisions-store.js.map +1 -0
  168. package/dist/db/index.d.ts +2 -2
  169. package/dist/db/index.d.ts.map +1 -1
  170. package/dist/db/index.js +2 -2
  171. package/dist/db/index.js.map +1 -1
  172. package/dist/db/migrations/postgres/008_sso.sql +9 -20
  173. package/dist/db/migrations/postgres/009_review_model_runs.sql +9 -18
  174. package/dist/db/migrations/postgres/009_sso.sql +20 -0
  175. package/dist/db/migrations/postgres/010_release_manager.sql +9 -38
  176. package/dist/db/migrations/postgres/010_review_model_runs.sql +18 -0
  177. package/dist/db/migrations/postgres/011_qa_run_columns.sql +9 -8
  178. package/dist/db/migrations/postgres/011_release_manager.sql +38 -0
  179. package/dist/db/migrations/postgres/012_qa_gap_issues.sql +9 -18
  180. package/dist/db/migrations/postgres/012_qa_run_columns.sql +8 -0
  181. package/dist/db/migrations/postgres/013_qa_gap_issues.sql +18 -0
  182. package/dist/db/migrations/postgres/013_stage_runs_cache_tokens.sql +11 -6
  183. package/dist/db/migrations/postgres/014_missing_indexes.sql +9 -28
  184. package/dist/db/migrations/postgres/014_stage_runs_cache_tokens.sql +6 -0
  185. package/dist/db/migrations/postgres/015_missing_indexes.sql +28 -0
  186. package/dist/db/migrations/postgres/015_triage_results.sql +9 -11
  187. package/dist/db/migrations/postgres/016_triage_results.sql +11 -0
  188. package/dist/db/migrations/sqlite/007_sso.sql +9 -20
  189. package/dist/db/migrations/sqlite/008_review_model_runs.sql +9 -18
  190. package/dist/db/migrations/sqlite/008_sso.sql +20 -0
  191. package/dist/db/migrations/sqlite/009_release_manager.sql +9 -43
  192. package/dist/db/migrations/sqlite/009_review_model_runs.sql +18 -0
  193. package/dist/db/migrations/sqlite/010_qa_run_columns.sql +9 -9
  194. package/dist/db/migrations/sqlite/010_release_manager.sql +43 -0
  195. package/dist/db/migrations/sqlite/011_qa_gap_issues.sql +9 -22
  196. package/dist/db/migrations/sqlite/011_qa_run_columns.sql +9 -0
  197. package/dist/db/migrations/sqlite/012_qa_gap_issues.sql +22 -0
  198. package/dist/db/migrations/sqlite/012_stage_runs_cache_tokens.sql +11 -6
  199. package/dist/db/migrations/sqlite/013_missing_indexes.sql +10 -28
  200. package/dist/db/migrations/sqlite/013_stage_runs_cache_tokens.sql +6 -0
  201. package/dist/db/migrations/sqlite/013_triage_results.sql +10 -11
  202. package/dist/db/migrations/sqlite/014_missing_indexes.sql +28 -0
  203. package/dist/db/migrations/sqlite/015_triage_results.sql +11 -0
  204. package/dist/db/migrator.d.ts +45 -2
  205. package/dist/db/migrator.d.ts.map +1 -1
  206. package/dist/db/migrator.js +113 -29
  207. package/dist/db/migrator.js.map +1 -1
  208. package/dist/db/schema.d.ts +213 -0
  209. package/dist/db/schema.d.ts.map +1 -1
  210. package/dist/db/schema.js +28 -0
  211. package/dist/db/schema.js.map +1 -1
  212. package/dist/executor/auth-check.d.ts +30 -7
  213. package/dist/executor/auth-check.d.ts.map +1 -1
  214. package/dist/executor/auth-check.js +66 -16
  215. package/dist/executor/auth-check.js.map +1 -1
  216. package/dist/executor/auth-monitor.d.ts.map +1 -1
  217. package/dist/executor/auth-monitor.js +48 -39
  218. package/dist/executor/auth-monitor.js.map +1 -1
  219. package/dist/executor/deep-review.d.ts.map +1 -1
  220. package/dist/executor/deep-review.js +14 -79
  221. package/dist/executor/deep-review.js.map +1 -1
  222. package/dist/executor/executor.d.ts +21 -0
  223. package/dist/executor/executor.d.ts.map +1 -1
  224. package/dist/executor/executor.js +42 -91
  225. package/dist/executor/executor.js.map +1 -1
  226. package/dist/executor/extract-handoff.d.ts +9 -0
  227. package/dist/executor/extract-handoff.d.ts.map +1 -1
  228. package/dist/executor/extract-handoff.js +48 -0
  229. package/dist/executor/extract-handoff.js.map +1 -1
  230. package/dist/executor/handoff.d.ts +10 -1
  231. package/dist/executor/handoff.d.ts.map +1 -1
  232. package/dist/executor/handoff.js +7 -1
  233. package/dist/executor/handoff.js.map +1 -1
  234. package/dist/executor/index.d.ts +1 -0
  235. package/dist/executor/index.d.ts.map +1 -1
  236. package/dist/executor/index.js +1 -0
  237. package/dist/executor/index.js.map +1 -1
  238. package/dist/executor/prompt/templates.d.ts +12 -1
  239. package/dist/executor/prompt/templates.d.ts.map +1 -1
  240. package/dist/executor/prompt/templates.js +64 -0
  241. package/dist/executor/prompt/templates.js.map +1 -1
  242. package/dist/executor/session-resolver.d.ts +51 -0
  243. package/dist/executor/session-resolver.d.ts.map +1 -0
  244. package/dist/executor/session-resolver.js +83 -0
  245. package/dist/executor/session-resolver.js.map +1 -0
  246. package/dist/index.d.ts +3 -2
  247. package/dist/index.d.ts.map +1 -1
  248. package/dist/index.js +3 -2
  249. package/dist/index.js.map +1 -1
  250. package/dist/notifier/composite.js +1 -1
  251. package/dist/notifier/composite.js.map +1 -1
  252. package/dist/notifier/linear.d.ts +1 -1
  253. package/dist/notifier/linear.d.ts.map +1 -1
  254. package/dist/notifier/linear.js +49 -9
  255. package/dist/notifier/linear.js.map +1 -1
  256. package/dist/pipeline/run-surgical-review-fix.d.ts +29 -0
  257. package/dist/pipeline/run-surgical-review-fix.d.ts.map +1 -0
  258. package/dist/pipeline/run-surgical-review-fix.js +48 -0
  259. package/dist/pipeline/run-surgical-review-fix.js.map +1 -0
  260. package/dist/pipeline/runner.d.ts.map +1 -1
  261. package/dist/pipeline/runner.js +132 -36
  262. package/dist/pipeline/runner.js.map +1 -1
  263. package/dist/pm/actions/circuit-breaker-config.d.ts +13 -0
  264. package/dist/pm/actions/circuit-breaker-config.d.ts.map +1 -0
  265. package/dist/pm/actions/circuit-breaker-config.js +23 -0
  266. package/dist/pm/actions/circuit-breaker-config.js.map +1 -0
  267. package/dist/pm/actions/db-queries.d.ts +18 -0
  268. package/dist/pm/actions/db-queries.d.ts.map +1 -1
  269. package/dist/pm/actions/db-queries.js +75 -2
  270. package/dist/pm/actions/db-queries.js.map +1 -1
  271. package/dist/pm/actions/promote.d.ts +7 -0
  272. package/dist/pm/actions/promote.d.ts.map +1 -1
  273. package/dist/pm/actions/promote.js +17 -1
  274. package/dist/pm/actions/promote.js.map +1 -1
  275. package/dist/pm/actions/recover-circuit-breaker.d.ts +21 -0
  276. package/dist/pm/actions/recover-circuit-breaker.d.ts.map +1 -0
  277. package/dist/pm/actions/recover-circuit-breaker.js +47 -0
  278. package/dist/pm/actions/recover-circuit-breaker.js.map +1 -0
  279. package/dist/pm/actions/select-probe-candidates.d.ts +21 -0
  280. package/dist/pm/actions/select-probe-candidates.d.ts.map +1 -0
  281. package/dist/pm/actions/select-probe-candidates.js +81 -0
  282. package/dist/pm/actions/select-probe-candidates.js.map +1 -0
  283. package/dist/pm/actions/start-todo.d.ts +7 -0
  284. package/dist/pm/actions/start-todo.d.ts.map +1 -1
  285. package/dist/pm/actions/start-todo.js +2 -1
  286. package/dist/pm/actions/start-todo.js.map +1 -1
  287. package/dist/pm/actions/sweep-recovered-circuit-breakers.d.ts +28 -0
  288. package/dist/pm/actions/sweep-recovered-circuit-breakers.d.ts.map +1 -0
  289. package/dist/pm/actions/sweep-recovered-circuit-breakers.js +47 -0
  290. package/dist/pm/actions/sweep-recovered-circuit-breakers.js.map +1 -0
  291. package/dist/pm/actions/triage-prompt.d.ts +14 -0
  292. package/dist/pm/actions/triage-prompt.d.ts.map +1 -1
  293. package/dist/pm/actions/triage-prompt.js +52 -9
  294. package/dist/pm/actions/triage-prompt.js.map +1 -1
  295. package/dist/pm/actions/triage.d.ts.map +1 -1
  296. package/dist/pm/actions/triage.js +37 -24
  297. package/dist/pm/actions/triage.js.map +1 -1
  298. package/dist/pm/conflict.d.ts +2 -0
  299. package/dist/pm/conflict.d.ts.map +1 -1
  300. package/dist/pm/conflict.js +59 -9
  301. package/dist/pm/conflict.js.map +1 -1
  302. package/dist/pm/scheduler.d.ts +5 -0
  303. package/dist/pm/scheduler.d.ts.map +1 -1
  304. package/dist/pm/scheduler.js +91 -44
  305. package/dist/pm/scheduler.js.map +1 -1
  306. package/dist/pm/slack.d.ts +11 -0
  307. package/dist/pm/slack.d.ts.map +1 -1
  308. package/dist/pm/slack.js +48 -5
  309. package/dist/pm/slack.js.map +1 -1
  310. package/dist/release-manager/release-helpers.d.ts +19 -2
  311. package/dist/release-manager/release-helpers.d.ts.map +1 -1
  312. package/dist/release-manager/release-helpers.js +22 -3
  313. package/dist/release-manager/release-helpers.js.map +1 -1
  314. package/dist/release-manager/release-tick.d.ts.map +1 -1
  315. package/dist/release-manager/release-tick.js +20 -8
  316. package/dist/release-manager/release-tick.js.map +1 -1
  317. package/dist/release-manager/slack-handler.d.ts +6 -0
  318. package/dist/release-manager/slack-handler.d.ts.map +1 -1
  319. package/dist/release-manager/slack-handler.js +76 -1
  320. package/dist/release-manager/slack-handler.js.map +1 -1
  321. package/dist/release-manager/state.d.ts.map +1 -1
  322. package/dist/release-manager/state.js +25 -18
  323. package/dist/release-manager/state.js.map +1 -1
  324. package/dist/types.d.ts +238 -13
  325. package/dist/types.d.ts.map +1 -1
  326. package/dist/types.js +67 -0
  327. package/dist/types.js.map +1 -1
  328. package/dist/webhook/github-handler.d.ts +2 -2
  329. package/dist/webhook/github-handler.d.ts.map +1 -1
  330. package/dist/webhook/github-handler.js +18 -6
  331. package/dist/webhook/github-handler.js.map +1 -1
  332. package/package.json +1 -1
@@ -1,28 +1,10 @@
1
- -- Migration: BEC-187 Add 5 missing hot-path indexes to pipeline_runs + pm_approvals
2
- -- Idempotent: all statements use CREATE INDEX IF NOT EXISTS.
3
-
4
- -- pipeline_runs.pr_url: queried on every check_suite, pull_request, and review
5
- -- event in webhook/github-handler.ts to look up the run by PR URL.
6
- CREATE INDEX IF NOT EXISTS idx_pipeline_runs_pr_url
7
- ON pipeline_runs(pr_url);
8
-
9
- -- pipeline_runs.branch: queried alongside pr_url in webhook/github-handler.ts
10
- -- to find runs by branch name on push/CI events.
11
- CREATE INDEX IF NOT EXISTS idx_pipeline_runs_branch
12
- ON pipeline_runs(branch);
13
-
14
- -- pipeline_runs.started_at: range-scanned by pm/actions/db-queries.ts,
15
- -- pm/budget.ts, audit/reader.ts, cost/csv.ts, and runner.ts on every PM tick
16
- -- (60s cadence) and dashboard page load.
17
- CREATE INDEX IF NOT EXISTS idx_pipeline_runs_started_at
18
- ON pipeline_runs(started_at);
19
-
20
- -- pipeline_runs.completed_at: range-scanned by pm/actions/db-queries.ts and
21
- -- cost/aggregate.ts for active-run detection and cost rollup windows.
22
- CREATE INDEX IF NOT EXISTS idx_pipeline_runs_completed_at
23
- ON pipeline_runs(completed_at);
24
-
25
- -- pm_approvals.issue_id: queried by approval-helpers.ts:batchFetchPendingApprovals
26
- -- on every PM tick to find pending approvals for a batch of issue IDs.
27
- CREATE INDEX IF NOT EXISTS idx_pm_approvals_issue_id
28
- ON pm_approvals(issue_id);
1
+ -- BEC-149: This migration was renumbered to 014_missing_indexes to fix a
2
+ -- duplicate prefix (013_missing_indexes and 013_triage_results shared
3
+ -- prefix 013).
4
+ --
5
+ -- This file is retained for git history only. The migrator skips it based on
6
+ -- the SQLITE_MIGRATION_RENAMES map in migrator.ts, which also renames any
7
+ -- existing "013_missing_indexes" entries in schema_migrations to
8
+ -- "014_missing_indexes" so existing deployments do not re-run this migration.
9
+ --
10
+ -- Active migration: packages/core/src/db/migrations/sqlite/014_missing_indexes.sql
@@ -0,0 +1,6 @@
1
+ -- 012_stage_runs_cache_tokens.sql
2
+ -- BEC: cache telemetry — capture prompt-cache token usage from the
3
+ -- Anthropic Agent SDK so we can measure hit-rate per stage.
4
+
5
+ ALTER TABLE stage_runs ADD COLUMN cache_creation_input_tokens INTEGER NOT NULL DEFAULT 0;
6
+ ALTER TABLE stage_runs ADD COLUMN cache_read_input_tokens INTEGER NOT NULL DEFAULT 0;
@@ -1,11 +1,10 @@
1
- -- 013_triage_results.sql
2
- -- BEC-223: persist triage v2 prediction at triage time so the runner Tier 6e
3
- -- hook reads from DB instead of parsing the description (which gets truncated
4
- -- by mapIssueToSchema at 4000 chars, slicing off the appended v2 sections for
5
- -- realistic issues).
6
-
7
- CREATE TABLE IF NOT EXISTS triage_results (
8
- issue_id TEXT PRIMARY KEY,
9
- v2_prediction TEXT NOT NULL DEFAULT '{}',
10
- triaged_at INTEGER NOT NULL DEFAULT (unixepoch())
11
- );
1
+ -- BEC-149: This migration was renumbered to 015_triage_results to fix a
2
+ -- duplicate prefix (013_missing_indexes and 013_triage_results shared
3
+ -- prefix 013).
4
+ --
5
+ -- This file is retained for git history only. The migrator skips it based on
6
+ -- the SQLITE_MIGRATION_RENAMES map in migrator.ts, which also renames any
7
+ -- existing "013_triage_results" entries in schema_migrations to
8
+ -- "015_triage_results" so existing deployments do not re-run this migration.
9
+ --
10
+ -- Active migration: packages/core/src/db/migrations/sqlite/015_triage_results.sql
@@ -0,0 +1,28 @@
1
+ -- Migration: BEC-187 — Add 5 missing hot-path indexes to pipeline_runs + pm_approvals
2
+ -- Idempotent: all statements use CREATE INDEX IF NOT EXISTS.
3
+
4
+ -- pipeline_runs.pr_url: queried on every check_suite, pull_request, and review
5
+ -- event in webhook/github-handler.ts to look up the run by PR URL.
6
+ CREATE INDEX IF NOT EXISTS idx_pipeline_runs_pr_url
7
+ ON pipeline_runs(pr_url);
8
+
9
+ -- pipeline_runs.branch: queried alongside pr_url in webhook/github-handler.ts
10
+ -- to find runs by branch name on push/CI events.
11
+ CREATE INDEX IF NOT EXISTS idx_pipeline_runs_branch
12
+ ON pipeline_runs(branch);
13
+
14
+ -- pipeline_runs.started_at: range-scanned by pm/actions/db-queries.ts,
15
+ -- pm/budget.ts, audit/reader.ts, cost/csv.ts, and runner.ts on every PM tick
16
+ -- (60s cadence) and dashboard page load.
17
+ CREATE INDEX IF NOT EXISTS idx_pipeline_runs_started_at
18
+ ON pipeline_runs(started_at);
19
+
20
+ -- pipeline_runs.completed_at: range-scanned by pm/actions/db-queries.ts and
21
+ -- cost/aggregate.ts for active-run detection and cost rollup windows.
22
+ CREATE INDEX IF NOT EXISTS idx_pipeline_runs_completed_at
23
+ ON pipeline_runs(completed_at);
24
+
25
+ -- pm_approvals.issue_id: queried by approval-helpers.ts:batchFetchPendingApprovals
26
+ -- on every PM tick to find pending approvals for a batch of issue IDs.
27
+ CREATE INDEX IF NOT EXISTS idx_pm_approvals_issue_id
28
+ ON pm_approvals(issue_id);
@@ -0,0 +1,11 @@
1
+ -- 013_triage_results.sql
2
+ -- BEC-223: persist triage v2 prediction at triage time so the runner Tier 6e
3
+ -- hook reads from DB instead of parsing the description (which gets truncated
4
+ -- by mapIssueToSchema at 4000 chars, slicing off the appended v2 sections for
5
+ -- realistic issues).
6
+
7
+ CREATE TABLE IF NOT EXISTS triage_results (
8
+ issue_id TEXT PRIMARY KEY,
9
+ v2_prediction TEXT NOT NULL DEFAULT '{}',
10
+ triaged_at INTEGER NOT NULL DEFAULT (unixepoch())
11
+ );
@@ -11,6 +11,20 @@
11
11
  * - SQLite ALTER TABLE does not support IF NOT EXISTS, so duplicate-column errors are
12
12
  * caught and treated as a no-op (idempotent re-run safety).
13
13
  * - Postgres migrations use DO $$ IF NOT EXISTS $$ guards for native idempotency.
14
+ *
15
+ * Numbering policy (enforced as of BEC-149):
16
+ * - Every migration file must have a unique NNN_ numeric prefix.
17
+ * - When adding a new migration, use max(existing prefix) + 1.
18
+ * - Never reuse or duplicate a prefix number — the migrator sorts files alphabetically
19
+ * so duplicate prefixes produce non-deterministic ordering.
20
+ *
21
+ * Tombstone files (BEC-149 rename history):
22
+ * - Files listed as keys in SQLITE_MIGRATION_RENAMES / POSTGRES_MIGRATION_RENAMES are
23
+ * "tombstones": their content has moved to the canonical new name.
24
+ * - Tombstones are SKIPPED during migration processing (no SQL is run, nothing recorded).
25
+ * - Before running any migration, the migrator renames schema_migrations rows from the
26
+ * old name to the new name so existing deployments automatically adopt the canonical
27
+ * numbering without re-running the migration content.
14
28
  */
15
29
  import type Database from "better-sqlite3";
16
30
  import type { Sql } from "postgres";
@@ -25,18 +39,46 @@ export interface MigrationStatus {
25
39
  applied: boolean;
26
40
  appliedAt?: Date;
27
41
  }
42
+ /**
43
+ * BEC-149: Rename map for SQLite migrations.
44
+ *
45
+ * Keys are the old (duplicate-prefix) migration names that were renumbered.
46
+ * Values are the canonical new names.
47
+ *
48
+ * On startup the migrator updates schema_migrations rows from old → new so that
49
+ * existing deployments recognise the renamed files without re-running them.
50
+ * The old files are kept as tombstones (comment-only) and are SKIPPED by the
51
+ * migration runner; only the canonical-named files are processed.
52
+ */
53
+ export declare const SQLITE_MIGRATION_RENAMES: Record<string, string>;
54
+ /**
55
+ * BEC-149: Rename map for Postgres migrations.
56
+ *
57
+ * Same semantics as SQLITE_MIGRATION_RENAMES above.
58
+ */
59
+ export declare const POSTGRES_MIGRATION_RENAMES: Record<string, string>;
28
60
  /**
29
61
  * Read all .sql migration files for a driver from the migrations subdirectory,
30
62
  * sorted by filename (ascending, so NNN prefix determines order).
63
+ *
64
+ * Tombstone files (those whose names appear as keys in the driver's rename map)
65
+ * are included in the returned list so callers can distinguish them; the migration
66
+ * runners skip them automatically.
31
67
  */
32
68
  export declare function loadMigrationFiles(driver: "sqlite" | "postgres"): Migration[];
69
+ /**
70
+ * Return the active (non-tombstone) migrations for a driver.
71
+ * These are the migrations that the runner will actually process.
72
+ */
73
+ export declare function loadActiveMigrationFiles(driver: "sqlite" | "postgres"): Migration[];
33
74
  /**
34
75
  * Run all pending migrations against a better-sqlite3 Database instance.
35
76
  * Creates schema_migrations table if it does not exist.
36
77
  */
37
78
  export declare function runMigrationsSqlite(db: Database.Database): void;
38
79
  /**
39
- * Return the status of every migration file for SQLite.
80
+ * Return the status of every active migration file for SQLite.
81
+ * Tombstone files (renamed migrations) are excluded from the status list.
40
82
  */
41
83
  export declare function getMigrationStatusSqlite(db: Database.Database): MigrationStatus[];
42
84
  /**
@@ -45,7 +87,8 @@ export declare function getMigrationStatusSqlite(db: Database.Database): Migrati
45
87
  */
46
88
  export declare function runMigrationsPostgres(client: Sql): Promise<void>;
47
89
  /**
48
- * Return the status of every migration file for Postgres.
90
+ * Return the status of every active migration file for Postgres.
91
+ * Tombstone files (renamed migrations) are excluded from the status list.
49
92
  */
50
93
  export declare function getMigrationStatusPostgres(client: Sql): Promise<MigrationStatus[]>;
51
94
  //# sourceMappingURL=migrator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"migrator.d.ts","sourceRoot":"","sources":["../../src/db/migrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAKpC,6DAA6D;AAC7D,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAkBD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,EAAE,CAe7E;AAMD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAiE/D;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GACpB,eAAe,EAAE,CAuBnB;AAMD;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BtE;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,GAAG,GACV,OAAO,CAAC,eAAe,EAAE,CAAC,CAuB5B"}
1
+ {"version":3,"file":"migrator.d.ts","sourceRoot":"","sources":["../../src/db/migrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAKH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAKpC,6DAA6D;AAC7D,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAkBD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAa3D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAW7D,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,EAAE,CAe7E;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,QAAQ,GAAG,UAAU,GAC5B,SAAS,EAAE,CAIb;AAmCD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CA2E/D;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GACpB,eAAe,EAAE,CAWnB;AAMD;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCtE;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,GAAG,GACV,OAAO,CAAC,eAAe,EAAE,CAAC,CAY5B"}
@@ -11,6 +11,20 @@
11
11
  * - SQLite ALTER TABLE does not support IF NOT EXISTS, so duplicate-column errors are
12
12
  * caught and treated as a no-op (idempotent re-run safety).
13
13
  * - Postgres migrations use DO $$ IF NOT EXISTS $$ guards for native idempotency.
14
+ *
15
+ * Numbering policy (enforced as of BEC-149):
16
+ * - Every migration file must have a unique NNN_ numeric prefix.
17
+ * - When adding a new migration, use max(existing prefix) + 1.
18
+ * - Never reuse or duplicate a prefix number — the migrator sorts files alphabetically
19
+ * so duplicate prefixes produce non-deterministic ordering.
20
+ *
21
+ * Tombstone files (BEC-149 rename history):
22
+ * - Files listed as keys in SQLITE_MIGRATION_RENAMES / POSTGRES_MIGRATION_RENAMES are
23
+ * "tombstones": their content has moved to the canonical new name.
24
+ * - Tombstones are SKIPPED during migration processing (no SQL is run, nothing recorded).
25
+ * - Before running any migration, the migrator renames schema_migrations rows from the
26
+ * old name to the new name so existing deployments automatically adopt the canonical
27
+ * numbering without re-running the migration content.
14
28
  */
15
29
  import { readdirSync, readFileSync } from "node:fs";
16
30
  import { fileURLToPath } from "node:url";
@@ -31,9 +45,55 @@ const CREATE_SCHEMA_MIGRATIONS_POSTGRES = `
31
45
  applied_at TIMESTAMPTZ NOT NULL DEFAULT now()
32
46
  )
33
47
  `;
48
+ /**
49
+ * BEC-149: Rename map for SQLite migrations.
50
+ *
51
+ * Keys are the old (duplicate-prefix) migration names that were renumbered.
52
+ * Values are the canonical new names.
53
+ *
54
+ * On startup the migrator updates schema_migrations rows from old → new so that
55
+ * existing deployments recognise the renamed files without re-running them.
56
+ * The old files are kept as tombstones (comment-only) and are SKIPPED by the
57
+ * migration runner; only the canonical-named files are processed.
58
+ */
59
+ export const SQLITE_MIGRATION_RENAMES = {
60
+ "007_sso": "008_sso",
61
+ "008_review_model_runs": "009_review_model_runs",
62
+ "009_release_manager": "010_release_manager",
63
+ "010_qa_run_columns": "011_qa_run_columns",
64
+ "011_qa_gap_issues": "012_qa_gap_issues",
65
+ // BEC-149 follow-on: 3 migrations landed on main after the initial rename
66
+ // map was written and re-introduced prefix collisions (012_qa_gap_issues
67
+ // vs 012_stage_runs_cache_tokens, 013_missing_indexes vs 013_triage_results).
68
+ // Renumbering them keeps prefix-unique invariant intact.
69
+ "012_stage_runs_cache_tokens": "013_stage_runs_cache_tokens",
70
+ "013_missing_indexes": "014_missing_indexes",
71
+ "013_triage_results": "015_triage_results",
72
+ };
73
+ /**
74
+ * BEC-149: Rename map for Postgres migrations.
75
+ *
76
+ * Same semantics as SQLITE_MIGRATION_RENAMES above.
77
+ */
78
+ export const POSTGRES_MIGRATION_RENAMES = {
79
+ "008_sso": "009_sso",
80
+ "009_review_model_runs": "010_review_model_runs",
81
+ "010_release_manager": "011_release_manager",
82
+ "011_qa_run_columns": "012_qa_run_columns",
83
+ "012_qa_gap_issues": "013_qa_gap_issues",
84
+ // BEC-149 follow-on: 3 migrations landed on main after the initial rename
85
+ // map was written and re-introduced prefix collisions on 013.
86
+ "013_stage_runs_cache_tokens": "014_stage_runs_cache_tokens",
87
+ "014_missing_indexes": "015_missing_indexes",
88
+ "015_triage_results": "016_triage_results",
89
+ };
34
90
  /**
35
91
  * Read all .sql migration files for a driver from the migrations subdirectory,
36
92
  * sorted by filename (ascending, so NNN prefix determines order).
93
+ *
94
+ * Tombstone files (those whose names appear as keys in the driver's rename map)
95
+ * are included in the returned list so callers can distinguish them; the migration
96
+ * runners skip them automatically.
37
97
  */
38
98
  export function loadMigrationFiles(driver) {
39
99
  const dir = join(__dirname, "migrations", driver);
@@ -52,6 +112,37 @@ export function loadMigrationFiles(driver) {
52
112
  sql: readFileSync(join(dir, file), "utf8"),
53
113
  }));
54
114
  }
115
+ /**
116
+ * Return the active (non-tombstone) migrations for a driver.
117
+ * These are the migrations that the runner will actually process.
118
+ */
119
+ export function loadActiveMigrationFiles(driver) {
120
+ const renames = driver === "sqlite" ? SQLITE_MIGRATION_RENAMES : POSTGRES_MIGRATION_RENAMES;
121
+ return loadMigrationFiles(driver).filter((m) => !(m.name in renames));
122
+ }
123
+ // ---------------------------------------------------------------------------
124
+ // Shared helpers
125
+ // ---------------------------------------------------------------------------
126
+ /**
127
+ * Build a MigrationStatus array from the active migrations list and the
128
+ * applied-name → timestamp map that each driver-specific status function
129
+ * constructs. Shared between SQLite and Postgres implementations to avoid
130
+ * duplication.
131
+ */
132
+ function buildMigrationStatus(migrations, appliedMap) {
133
+ // Include any applied migrations that no longer have a file (e.g., squashed)
134
+ const allNames = new Set([
135
+ ...migrations.map((m) => m.name),
136
+ ...appliedMap.keys(),
137
+ ]);
138
+ return Array.from(allNames)
139
+ .sort()
140
+ .map((name) => ({
141
+ name,
142
+ applied: appliedMap.has(name),
143
+ appliedAt: appliedMap.get(name),
144
+ }));
145
+ }
55
146
  // ---------------------------------------------------------------------------
56
147
  // SQLite
57
148
  // ---------------------------------------------------------------------------
@@ -62,7 +153,14 @@ export function loadMigrationFiles(driver) {
62
153
  export function runMigrationsSqlite(db) {
63
154
  // Ensure tracking table exists
64
155
  db.exec(CREATE_SCHEMA_MIGRATIONS_SQLITE);
65
- const migrations = loadMigrationFiles("sqlite");
156
+ // BEC-149: Rename old migration entries to their canonical names so that
157
+ // existing deployments don't re-run migrations under the new filenames.
158
+ const renameStmt = db.prepare("UPDATE schema_migrations SET name = ? WHERE name = ?");
159
+ for (const [oldName, newName] of Object.entries(SQLITE_MIGRATION_RENAMES)) {
160
+ renameStmt.run(newName, oldName);
161
+ }
162
+ // Only process active (non-tombstone) migrations
163
+ const migrations = loadActiveMigrationFiles("sqlite");
66
164
  const getApplied = db.prepare("SELECT name FROM schema_migrations WHERE name = ?");
67
165
  const recordApplied = db.prepare("INSERT OR IGNORE INTO schema_migrations (name) VALUES (?)");
68
166
  for (const migration of migrations) {
@@ -111,28 +209,18 @@ export function runMigrationsSqlite(db) {
111
209
  }
112
210
  }
113
211
  /**
114
- * Return the status of every migration file for SQLite.
212
+ * Return the status of every active migration file for SQLite.
213
+ * Tombstone files (renamed migrations) are excluded from the status list.
115
214
  */
116
215
  export function getMigrationStatusSqlite(db) {
117
216
  // Ensure tracking table exists before querying
118
217
  db.exec(CREATE_SCHEMA_MIGRATIONS_SQLITE);
119
- const migrations = loadMigrationFiles("sqlite");
218
+ const migrations = loadActiveMigrationFiles("sqlite");
120
219
  const rows = db
121
220
  .prepare("SELECT name, applied_at FROM schema_migrations")
122
221
  .all();
123
222
  const appliedMap = new Map(rows.map((r) => [r.name, new Date(r.applied_at * 1000)]));
124
- // Include any applied migrations that no longer have a file (e.g., squashed)
125
- const allNames = new Set([
126
- ...migrations.map((m) => m.name),
127
- ...appliedMap.keys(),
128
- ]);
129
- return Array.from(allNames)
130
- .sort()
131
- .map((name) => ({
132
- name,
133
- applied: appliedMap.has(name),
134
- appliedAt: appliedMap.get(name),
135
- }));
223
+ return buildMigrationStatus(migrations, appliedMap);
136
224
  }
137
225
  // ---------------------------------------------------------------------------
138
226
  // Postgres
@@ -144,7 +232,12 @@ export function getMigrationStatusSqlite(db) {
144
232
  export async function runMigrationsPostgres(client) {
145
233
  // Ensure tracking table exists
146
234
  await client.unsafe(CREATE_SCHEMA_MIGRATIONS_POSTGRES);
147
- const migrations = loadMigrationFiles("postgres");
235
+ // BEC-149: Rename old migration entries to their canonical names so that
236
+ // existing deployments don't re-run migrations under the new filenames.
237
+ // All renames are independent, so run them in parallel for faster startup.
238
+ await Promise.all(Object.entries(POSTGRES_MIGRATION_RENAMES).map(([oldName, newName]) => client `UPDATE schema_migrations SET name = ${newName} WHERE name = ${oldName}`));
239
+ // Only process active (non-tombstone) migrations
240
+ const migrations = loadActiveMigrationFiles("postgres");
148
241
  for (const migration of migrations) {
149
242
  const existing = await client `
150
243
  SELECT name FROM schema_migrations WHERE name = ${migration.name}
@@ -165,24 +258,15 @@ export async function runMigrationsPostgres(client) {
165
258
  }
166
259
  }
167
260
  /**
168
- * Return the status of every migration file for Postgres.
261
+ * Return the status of every active migration file for Postgres.
262
+ * Tombstone files (renamed migrations) are excluded from the status list.
169
263
  */
170
264
  export async function getMigrationStatusPostgres(client) {
171
265
  // Ensure tracking table exists before querying
172
266
  await client.unsafe(CREATE_SCHEMA_MIGRATIONS_POSTGRES);
173
- const migrations = loadMigrationFiles("postgres");
267
+ const migrations = loadActiveMigrationFiles("postgres");
174
268
  const rows = await client `SELECT name, applied_at FROM schema_migrations`;
175
269
  const appliedMap = new Map(rows.map((r) => [r.name, r.applied_at]));
176
- const allNames = new Set([
177
- ...migrations.map((m) => m.name),
178
- ...appliedMap.keys(),
179
- ]);
180
- return Array.from(allNames)
181
- .sort()
182
- .map((name) => ({
183
- name,
184
- applied: appliedMap.has(name),
185
- appliedAt: appliedMap.get(name),
186
- }));
270
+ return buildMigrationStatus(migrations, appliedMap);
187
271
  }
188
272
  //# sourceMappingURL=migrator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"migrator.js","sourceRoot":"","sources":["../../src/db/migrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migrator.js","sourceRoot":"","sources":["../../src/db/migrator.ts"],"names":[],"mappings":"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"}
@@ -1024,6 +1024,94 @@ export declare const webhookDedup: import("drizzle-orm/sqlite-core").SQLiteTable
1024
1024
  };
1025
1025
  dialect: "sqlite";
1026
1026
  }>;
1027
+ /**
1028
+ * BEC-236 — tracks Tier-5 circuit-breaker escalations so the half-open
1029
+ * probe can distinguish them from human/triage-added `needs-design`
1030
+ * labels. Insert on Tier-5 escalation (idempotent via the issue_id PK),
1031
+ * update last_probe_at + probe_attempts in selectProbeCandidates, delete
1032
+ * on probe-recovery or manual reset.
1033
+ */
1034
+ export declare const circuitBreakerState: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
1035
+ name: "circuit_breaker_state";
1036
+ schema: undefined;
1037
+ columns: {
1038
+ issueId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1039
+ name: "issue_id";
1040
+ tableName: "circuit_breaker_state";
1041
+ dataType: "string";
1042
+ columnType: "SQLiteText";
1043
+ data: string;
1044
+ driverParam: string;
1045
+ notNull: true;
1046
+ hasDefault: false;
1047
+ isPrimaryKey: true;
1048
+ isAutoincrement: false;
1049
+ hasRuntimeDefault: false;
1050
+ enumValues: [string, ...string[]];
1051
+ baseColumn: never;
1052
+ identity: undefined;
1053
+ generated: undefined;
1054
+ }, {}, {
1055
+ length: number | undefined;
1056
+ }>;
1057
+ escalatedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1058
+ name: "escalated_at";
1059
+ tableName: "circuit_breaker_state";
1060
+ dataType: "custom";
1061
+ columnType: "SQLiteCustomColumn";
1062
+ data: Date;
1063
+ driverParam: string | number | Date;
1064
+ notNull: true;
1065
+ hasDefault: true;
1066
+ isPrimaryKey: false;
1067
+ isAutoincrement: false;
1068
+ hasRuntimeDefault: true;
1069
+ enumValues: undefined;
1070
+ baseColumn: never;
1071
+ identity: undefined;
1072
+ generated: undefined;
1073
+ }, {}, {
1074
+ sqliteColumnBuilderBrand: "SQLiteCustomColumnBuilderBrand";
1075
+ }>;
1076
+ lastProbeAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1077
+ name: "last_probe_at";
1078
+ tableName: "circuit_breaker_state";
1079
+ dataType: "custom";
1080
+ columnType: "SQLiteCustomColumn";
1081
+ data: Date;
1082
+ driverParam: string | number | Date;
1083
+ notNull: false;
1084
+ hasDefault: false;
1085
+ isPrimaryKey: false;
1086
+ isAutoincrement: false;
1087
+ hasRuntimeDefault: false;
1088
+ enumValues: undefined;
1089
+ baseColumn: never;
1090
+ identity: undefined;
1091
+ generated: undefined;
1092
+ }, {}, {
1093
+ sqliteColumnBuilderBrand: "SQLiteCustomColumnBuilderBrand";
1094
+ }>;
1095
+ probeAttempts: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1096
+ name: "probe_attempts";
1097
+ tableName: "circuit_breaker_state";
1098
+ dataType: "number";
1099
+ columnType: "SQLiteInteger";
1100
+ data: number;
1101
+ driverParam: number;
1102
+ notNull: true;
1103
+ hasDefault: true;
1104
+ isPrimaryKey: false;
1105
+ isAutoincrement: false;
1106
+ hasRuntimeDefault: false;
1107
+ enumValues: undefined;
1108
+ baseColumn: never;
1109
+ identity: undefined;
1110
+ generated: undefined;
1111
+ }, {}, {}>;
1112
+ };
1113
+ dialect: "sqlite";
1114
+ }>;
1027
1115
  export declare const triageResults: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
1028
1116
  name: "triage_results";
1029
1117
  schema: undefined;
@@ -1247,6 +1335,131 @@ export declare const pmApprovals: import("drizzle-orm/sqlite-core").SQLiteTableW
1247
1335
  };
1248
1336
  dialect: "sqlite";
1249
1337
  }>;
1338
+ /**
1339
+ * BEC-227 Phase 4 / Track D. Persists the `<decisions>` JSON block emitted
1340
+ * by the implement agent at the end of each implement turn. Multiple rows
1341
+ * per pipeline_run when RALPH iterates (one per (iteration, stage)).
1342
+ */
1343
+ export declare const pipelineRunDecisions: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
1344
+ name: "pipeline_run_decisions";
1345
+ schema: undefined;
1346
+ columns: {
1347
+ id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1348
+ name: "id";
1349
+ tableName: "pipeline_run_decisions";
1350
+ dataType: "string";
1351
+ columnType: "SQLiteText";
1352
+ data: string;
1353
+ driverParam: string;
1354
+ notNull: true;
1355
+ hasDefault: false;
1356
+ isPrimaryKey: true;
1357
+ isAutoincrement: false;
1358
+ hasRuntimeDefault: false;
1359
+ enumValues: [string, ...string[]];
1360
+ baseColumn: never;
1361
+ identity: undefined;
1362
+ generated: undefined;
1363
+ }, {}, {
1364
+ length: number | undefined;
1365
+ }>;
1366
+ pipelineRunId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1367
+ name: "pipeline_run_id";
1368
+ tableName: "pipeline_run_decisions";
1369
+ dataType: "string";
1370
+ columnType: "SQLiteText";
1371
+ data: string;
1372
+ driverParam: string;
1373
+ notNull: true;
1374
+ hasDefault: false;
1375
+ isPrimaryKey: false;
1376
+ isAutoincrement: false;
1377
+ hasRuntimeDefault: false;
1378
+ enumValues: [string, ...string[]];
1379
+ baseColumn: never;
1380
+ identity: undefined;
1381
+ generated: undefined;
1382
+ }, {}, {
1383
+ length: number | undefined;
1384
+ }>;
1385
+ iteration: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1386
+ name: "iteration";
1387
+ tableName: "pipeline_run_decisions";
1388
+ dataType: "number";
1389
+ columnType: "SQLiteInteger";
1390
+ data: number;
1391
+ driverParam: number;
1392
+ notNull: true;
1393
+ hasDefault: false;
1394
+ isPrimaryKey: false;
1395
+ isAutoincrement: false;
1396
+ hasRuntimeDefault: false;
1397
+ enumValues: undefined;
1398
+ baseColumn: never;
1399
+ identity: undefined;
1400
+ generated: undefined;
1401
+ }, {}, {}>;
1402
+ stage: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1403
+ name: "stage";
1404
+ tableName: "pipeline_run_decisions";
1405
+ dataType: "string";
1406
+ columnType: "SQLiteText";
1407
+ data: string;
1408
+ driverParam: string;
1409
+ notNull: true;
1410
+ hasDefault: false;
1411
+ isPrimaryKey: false;
1412
+ isAutoincrement: false;
1413
+ hasRuntimeDefault: false;
1414
+ enumValues: [string, ...string[]];
1415
+ baseColumn: never;
1416
+ identity: undefined;
1417
+ generated: undefined;
1418
+ }, {}, {
1419
+ length: number | undefined;
1420
+ }>;
1421
+ payload: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1422
+ name: "payload";
1423
+ tableName: "pipeline_run_decisions";
1424
+ dataType: "string";
1425
+ columnType: "SQLiteText";
1426
+ data: string;
1427
+ driverParam: string;
1428
+ notNull: true;
1429
+ hasDefault: false;
1430
+ isPrimaryKey: false;
1431
+ isAutoincrement: false;
1432
+ hasRuntimeDefault: false;
1433
+ enumValues: [string, ...string[]];
1434
+ baseColumn: never;
1435
+ identity: undefined;
1436
+ generated: undefined;
1437
+ }, {}, {
1438
+ length: number | undefined;
1439
+ }>;
1440
+ createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1441
+ name: "created_at";
1442
+ tableName: "pipeline_run_decisions";
1443
+ dataType: "custom";
1444
+ columnType: "SQLiteCustomColumn";
1445
+ data: Date;
1446
+ driverParam: string | number | Date;
1447
+ notNull: true;
1448
+ hasDefault: false;
1449
+ isPrimaryKey: false;
1450
+ isAutoincrement: false;
1451
+ hasRuntimeDefault: false;
1452
+ enumValues: undefined;
1453
+ baseColumn: never;
1454
+ identity: undefined;
1455
+ generated: undefined;
1456
+ }, {}, {
1457
+ sqliteColumnBuilderBrand: "SQLiteCustomColumnBuilderBrand";
1458
+ }>;
1459
+ };
1460
+ dialect: "sqlite";
1461
+ }>;
1462
+ export type PipelineRunDecisionRow = typeof pipelineRunDecisions.$inferSelect;
1250
1463
  /**
1251
1464
  * Dedup table for budget threshold alerts. One row per (date, scope, threshold)
1252
1465
  * — the UNIQUE constraint + onConflictDoNothing() guarantees an alert fires at