@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.
- package/dist/__tests__/audit-immutability.test.js +8 -0
- package/dist/__tests__/audit-immutability.test.js.map +1 -1
- package/dist/__tests__/auth-check.test.js +130 -16
- package/dist/__tests__/auth-check.test.js.map +1 -1
- package/dist/__tests__/auth-monitor.test.js +210 -87
- package/dist/__tests__/auth-monitor.test.js.map +1 -1
- package/dist/__tests__/bec-238-repro.test.d.ts +2 -0
- package/dist/__tests__/bec-238-repro.test.d.ts.map +1 -0
- package/dist/__tests__/bec-238-repro.test.js +116 -0
- package/dist/__tests__/bec-238-repro.test.js.map +1 -0
- package/dist/__tests__/bec146-repro.test.d.ts +2 -0
- package/dist/__tests__/bec146-repro.test.d.ts.map +1 -0
- package/dist/__tests__/bec146-repro.test.js +153 -0
- package/dist/__tests__/bec146-repro.test.js.map +1 -0
- package/dist/__tests__/circuit-breaker-config.test.d.ts +2 -0
- package/dist/__tests__/circuit-breaker-config.test.d.ts.map +1 -0
- package/dist/__tests__/circuit-breaker-config.test.js +32 -0
- package/dist/__tests__/circuit-breaker-config.test.js.map +1 -0
- package/dist/__tests__/circuit-breaker-events.test.d.ts +2 -0
- package/dist/__tests__/circuit-breaker-events.test.d.ts.map +1 -0
- package/dist/__tests__/circuit-breaker-events.test.js +53 -0
- package/dist/__tests__/circuit-breaker-events.test.js.map +1 -0
- package/dist/__tests__/circuit-breaker-integration.test.d.ts +2 -0
- package/dist/__tests__/circuit-breaker-integration.test.d.ts.map +1 -0
- package/dist/__tests__/circuit-breaker-integration.test.js +192 -0
- package/dist/__tests__/circuit-breaker-integration.test.js.map +1 -0
- package/dist/__tests__/circuit-breaker-probe.test.d.ts +2 -0
- package/dist/__tests__/circuit-breaker-probe.test.d.ts.map +1 -0
- package/dist/__tests__/circuit-breaker-probe.test.js +124 -0
- package/dist/__tests__/circuit-breaker-probe.test.js.map +1 -0
- package/dist/__tests__/circuit-breaker-recover.test.d.ts +2 -0
- package/dist/__tests__/circuit-breaker-recover.test.d.ts.map +1 -0
- package/dist/__tests__/circuit-breaker-recover.test.js +52 -0
- package/dist/__tests__/circuit-breaker-recover.test.js.map +1 -0
- package/dist/__tests__/circuit-breaker-sweep.test.d.ts +2 -0
- package/dist/__tests__/circuit-breaker-sweep.test.d.ts.map +1 -0
- package/dist/__tests__/circuit-breaker-sweep.test.js +118 -0
- package/dist/__tests__/circuit-breaker-sweep.test.js.map +1 -0
- package/dist/__tests__/db-migrations.test.js +7 -3
- package/dist/__tests__/db-migrations.test.js.map +1 -1
- package/dist/__tests__/decision-artifact-schema.test.d.ts +2 -0
- package/dist/__tests__/decision-artifact-schema.test.d.ts.map +1 -0
- package/dist/__tests__/decision-artifact-schema.test.js +45 -0
- package/dist/__tests__/decision-artifact-schema.test.js.map +1 -0
- package/dist/__tests__/decisions-parser.test.d.ts +2 -0
- package/dist/__tests__/decisions-parser.test.d.ts.map +1 -0
- package/dist/__tests__/decisions-parser.test.js +59 -0
- package/dist/__tests__/decisions-parser.test.js.map +1 -0
- package/dist/__tests__/decisions-store.test.d.ts +2 -0
- package/dist/__tests__/decisions-store.test.d.ts.map +1 -0
- package/dist/__tests__/decisions-store.test.js +68 -0
- package/dist/__tests__/decisions-store.test.js.map +1 -0
- package/dist/__tests__/decisions-table-migration.test.d.ts +2 -0
- package/dist/__tests__/decisions-table-migration.test.d.ts.map +1 -0
- package/dist/__tests__/decisions-table-migration.test.js +56 -0
- package/dist/__tests__/decisions-table-migration.test.js.map +1 -0
- package/dist/__tests__/execute-stage-session-opts.test.js +2 -1
- package/dist/__tests__/execute-stage-session-opts.test.js.map +1 -1
- package/dist/__tests__/executor-issue-id.test.js +2 -1
- package/dist/__tests__/executor-issue-id.test.js.map +1 -1
- package/dist/__tests__/extract-handoff-decisions.test.d.ts +2 -0
- package/dist/__tests__/extract-handoff-decisions.test.d.ts.map +1 -0
- package/dist/__tests__/extract-handoff-decisions.test.js +26 -0
- package/dist/__tests__/extract-handoff-decisions.test.js.map +1 -0
- package/dist/__tests__/force-push-agent-branches.test.js +38 -15
- package/dist/__tests__/force-push-agent-branches.test.js.map +1 -1
- package/dist/__tests__/github-webhook.test.js +117 -0
- package/dist/__tests__/github-webhook.test.js.map +1 -1
- package/dist/__tests__/implement-template-decisions.test.d.ts +2 -0
- package/dist/__tests__/implement-template-decisions.test.d.ts.map +1 -0
- package/dist/__tests__/implement-template-decisions.test.js +41 -0
- package/dist/__tests__/implement-template-decisions.test.js.map +1 -0
- package/dist/__tests__/migrator.test.js +137 -39
- package/dist/__tests__/migrator.test.js.map +1 -1
- package/dist/__tests__/pipeline-runner.test.js +118 -0
- package/dist/__tests__/pipeline-runner.test.js.map +1 -1
- package/dist/__tests__/pm-audit-retention-step.test.js +3 -0
- package/dist/__tests__/pm-audit-retention-step.test.js.map +1 -1
- package/dist/__tests__/pm-budget-alerts.test.d.ts +14 -0
- package/dist/__tests__/pm-budget-alerts.test.d.ts.map +1 -1
- package/dist/__tests__/pm-budget-alerts.test.js +90 -18
- package/dist/__tests__/pm-budget-alerts.test.js.map +1 -1
- package/dist/__tests__/pm-budget-refused-event.test.js +2 -0
- package/dist/__tests__/pm-budget-refused-event.test.js.map +1 -1
- package/dist/__tests__/pm-budget-utc-boundary.test.d.ts +2 -0
- package/dist/__tests__/pm-budget-utc-boundary.test.d.ts.map +1 -0
- package/dist/__tests__/pm-budget-utc-boundary.test.js +128 -0
- package/dist/__tests__/pm-budget-utc-boundary.test.js.map +1 -0
- package/dist/__tests__/pm-conflict.test.js +145 -5
- package/dist/__tests__/pm-conflict.test.js.map +1 -1
- package/dist/__tests__/pm-cost-rollup-step.test.js +2 -0
- package/dist/__tests__/pm-cost-rollup-step.test.js.map +1 -1
- package/dist/__tests__/pm-promote.test.js +111 -0
- package/dist/__tests__/pm-promote.test.js.map +1 -1
- package/dist/__tests__/pm-scheduler.test.js +1 -0
- package/dist/__tests__/pm-scheduler.test.js.map +1 -1
- package/dist/__tests__/pm-sso-prune-step.test.js +2 -0
- package/dist/__tests__/pm-sso-prune-step.test.js.map +1 -1
- package/dist/__tests__/preflight-claude-auth.test.js +3 -2
- package/dist/__tests__/preflight-claude-auth.test.js.map +1 -1
- package/dist/__tests__/ralph-review-fix-regression.test.js +1 -0
- package/dist/__tests__/ralph-review-fix-regression.test.js.map +1 -1
- package/dist/__tests__/ralph.test.js +1 -0
- package/dist/__tests__/ralph.test.js.map +1 -1
- package/dist/__tests__/release-manager-qarun-query.test.d.ts +2 -0
- package/dist/__tests__/release-manager-qarun-query.test.d.ts.map +1 -0
- package/dist/__tests__/release-manager-qarun-query.test.js +233 -0
- package/dist/__tests__/release-manager-qarun-query.test.js.map +1 -0
- package/dist/__tests__/release-manager-scheduler.test.js +62 -0
- package/dist/__tests__/release-manager-scheduler.test.js.map +1 -1
- package/dist/__tests__/release-manager-slack-handler.test.js +66 -0
- package/dist/__tests__/release-manager-slack-handler.test.js.map +1 -1
- package/dist/__tests__/reproduce-bec113-pagination-warning.test.js +1 -0
- package/dist/__tests__/reproduce-bec113-pagination-warning.test.js.map +1 -1
- package/dist/__tests__/reproduce-bec62.test.js +1 -0
- package/dist/__tests__/reproduce-bec62.test.js.map +1 -1
- package/dist/__tests__/reproduce-bec91-stuck-in-progress.test.js +2 -0
- package/dist/__tests__/reproduce-bec91-stuck-in-progress.test.js.map +1 -1
- package/dist/__tests__/resolve-claude-auth.test.js +10 -8
- package/dist/__tests__/resolve-claude-auth.test.js.map +1 -1
- package/dist/__tests__/session-lazy-creation.test.js +2 -1
- package/dist/__tests__/session-lazy-creation.test.js.map +1 -1
- package/dist/__tests__/session-resolver.test.d.ts +13 -0
- package/dist/__tests__/session-resolver.test.d.ts.map +1 -0
- package/dist/__tests__/session-resolver.test.js +152 -0
- package/dist/__tests__/session-resolver.test.js.map +1 -0
- package/dist/__tests__/session-resume-fallback.test.js +2 -1
- package/dist/__tests__/session-resume-fallback.test.js.map +1 -1
- package/dist/__tests__/stage-models.test.js +3 -2
- package/dist/__tests__/stage-models.test.js.map +1 -1
- package/dist/__tests__/start-todo.test.js +29 -0
- package/dist/__tests__/start-todo.test.js.map +1 -1
- package/dist/__tests__/surgical-review-fix-prompt.test.d.ts +2 -0
- package/dist/__tests__/surgical-review-fix-prompt.test.d.ts.map +1 -0
- package/dist/__tests__/surgical-review-fix-prompt.test.js +71 -0
- package/dist/__tests__/surgical-review-fix-prompt.test.js.map +1 -0
- package/dist/__tests__/surgical-review-fix-runner.test.d.ts +2 -0
- package/dist/__tests__/surgical-review-fix-runner.test.d.ts.map +1 -0
- package/dist/__tests__/surgical-review-fix-runner.test.js +171 -0
- package/dist/__tests__/surgical-review-fix-runner.test.js.map +1 -0
- package/dist/__tests__/triage-preserve-acs.test.d.ts +2 -0
- package/dist/__tests__/triage-preserve-acs.test.d.ts.map +1 -0
- package/dist/__tests__/triage-preserve-acs.test.js +240 -0
- package/dist/__tests__/triage-preserve-acs.test.js.map +1 -0
- package/dist/__tests__/validate-run-mode.test.js +1 -0
- package/dist/__tests__/validate-run-mode.test.js.map +1 -1
- package/dist/__tests__/validate.test.js +1 -0
- package/dist/__tests__/validate.test.js.map +1 -1
- package/dist/audit/auth-error-messages.d.ts +6 -0
- package/dist/audit/auth-error-messages.d.ts.map +1 -0
- package/dist/audit/auth-error-messages.js +18 -0
- package/dist/audit/auth-error-messages.js.map +1 -0
- package/dist/audit/events.d.ts +51 -4
- package/dist/audit/events.d.ts.map +1 -1
- package/dist/audit/events.js +78 -5
- package/dist/audit/events.js.map +1 -1
- package/dist/audit/index.d.ts +1 -0
- package/dist/audit/index.d.ts.map +1 -1
- package/dist/audit/index.js +1 -0
- package/dist/audit/index.js.map +1 -1
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +20 -0
- package/dist/db/client.js.map +1 -1
- package/dist/db/decisions-store.d.ts +25 -0
- package/dist/db/decisions-store.d.ts.map +1 -0
- package/dist/db/decisions-store.js +56 -0
- package/dist/db/decisions-store.js.map +1 -0
- package/dist/db/index.d.ts +2 -2
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +2 -2
- package/dist/db/index.js.map +1 -1
- package/dist/db/migrations/postgres/008_sso.sql +9 -20
- package/dist/db/migrations/postgres/009_review_model_runs.sql +9 -18
- package/dist/db/migrations/postgres/009_sso.sql +20 -0
- package/dist/db/migrations/postgres/010_release_manager.sql +9 -38
- package/dist/db/migrations/postgres/010_review_model_runs.sql +18 -0
- package/dist/db/migrations/postgres/011_qa_run_columns.sql +9 -8
- package/dist/db/migrations/postgres/011_release_manager.sql +38 -0
- package/dist/db/migrations/postgres/012_qa_gap_issues.sql +9 -18
- package/dist/db/migrations/postgres/012_qa_run_columns.sql +8 -0
- package/dist/db/migrations/postgres/013_qa_gap_issues.sql +18 -0
- package/dist/db/migrations/postgres/013_stage_runs_cache_tokens.sql +11 -6
- package/dist/db/migrations/postgres/014_missing_indexes.sql +9 -28
- package/dist/db/migrations/postgres/014_stage_runs_cache_tokens.sql +6 -0
- package/dist/db/migrations/postgres/015_missing_indexes.sql +28 -0
- package/dist/db/migrations/postgres/015_triage_results.sql +9 -11
- package/dist/db/migrations/postgres/016_triage_results.sql +11 -0
- package/dist/db/migrations/sqlite/007_sso.sql +9 -20
- package/dist/db/migrations/sqlite/008_review_model_runs.sql +9 -18
- package/dist/db/migrations/sqlite/008_sso.sql +20 -0
- package/dist/db/migrations/sqlite/009_release_manager.sql +9 -43
- package/dist/db/migrations/sqlite/009_review_model_runs.sql +18 -0
- package/dist/db/migrations/sqlite/010_qa_run_columns.sql +9 -9
- package/dist/db/migrations/sqlite/010_release_manager.sql +43 -0
- package/dist/db/migrations/sqlite/011_qa_gap_issues.sql +9 -22
- package/dist/db/migrations/sqlite/011_qa_run_columns.sql +9 -0
- package/dist/db/migrations/sqlite/012_qa_gap_issues.sql +22 -0
- package/dist/db/migrations/sqlite/012_stage_runs_cache_tokens.sql +11 -6
- package/dist/db/migrations/sqlite/013_missing_indexes.sql +10 -28
- package/dist/db/migrations/sqlite/013_stage_runs_cache_tokens.sql +6 -0
- package/dist/db/migrations/sqlite/013_triage_results.sql +10 -11
- package/dist/db/migrations/sqlite/014_missing_indexes.sql +28 -0
- package/dist/db/migrations/sqlite/015_triage_results.sql +11 -0
- package/dist/db/migrator.d.ts +45 -2
- package/dist/db/migrator.d.ts.map +1 -1
- package/dist/db/migrator.js +113 -29
- package/dist/db/migrator.js.map +1 -1
- package/dist/db/schema.d.ts +213 -0
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +28 -0
- package/dist/db/schema.js.map +1 -1
- package/dist/executor/auth-check.d.ts +30 -7
- package/dist/executor/auth-check.d.ts.map +1 -1
- package/dist/executor/auth-check.js +66 -16
- package/dist/executor/auth-check.js.map +1 -1
- package/dist/executor/auth-monitor.d.ts.map +1 -1
- package/dist/executor/auth-monitor.js +48 -39
- package/dist/executor/auth-monitor.js.map +1 -1
- package/dist/executor/deep-review.d.ts.map +1 -1
- package/dist/executor/deep-review.js +14 -79
- package/dist/executor/deep-review.js.map +1 -1
- package/dist/executor/executor.d.ts +21 -0
- package/dist/executor/executor.d.ts.map +1 -1
- package/dist/executor/executor.js +42 -91
- package/dist/executor/executor.js.map +1 -1
- package/dist/executor/extract-handoff.d.ts +9 -0
- package/dist/executor/extract-handoff.d.ts.map +1 -1
- package/dist/executor/extract-handoff.js +48 -0
- package/dist/executor/extract-handoff.js.map +1 -1
- package/dist/executor/handoff.d.ts +10 -1
- package/dist/executor/handoff.d.ts.map +1 -1
- package/dist/executor/handoff.js +7 -1
- package/dist/executor/handoff.js.map +1 -1
- package/dist/executor/index.d.ts +1 -0
- package/dist/executor/index.d.ts.map +1 -1
- package/dist/executor/index.js +1 -0
- package/dist/executor/index.js.map +1 -1
- package/dist/executor/prompt/templates.d.ts +12 -1
- package/dist/executor/prompt/templates.d.ts.map +1 -1
- package/dist/executor/prompt/templates.js +64 -0
- package/dist/executor/prompt/templates.js.map +1 -1
- package/dist/executor/session-resolver.d.ts +51 -0
- package/dist/executor/session-resolver.d.ts.map +1 -0
- package/dist/executor/session-resolver.js +83 -0
- package/dist/executor/session-resolver.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/notifier/composite.js +1 -1
- package/dist/notifier/composite.js.map +1 -1
- package/dist/notifier/linear.d.ts +1 -1
- package/dist/notifier/linear.d.ts.map +1 -1
- package/dist/notifier/linear.js +49 -9
- package/dist/notifier/linear.js.map +1 -1
- package/dist/pipeline/run-surgical-review-fix.d.ts +29 -0
- package/dist/pipeline/run-surgical-review-fix.d.ts.map +1 -0
- package/dist/pipeline/run-surgical-review-fix.js +48 -0
- package/dist/pipeline/run-surgical-review-fix.js.map +1 -0
- package/dist/pipeline/runner.d.ts.map +1 -1
- package/dist/pipeline/runner.js +132 -36
- package/dist/pipeline/runner.js.map +1 -1
- package/dist/pm/actions/circuit-breaker-config.d.ts +13 -0
- package/dist/pm/actions/circuit-breaker-config.d.ts.map +1 -0
- package/dist/pm/actions/circuit-breaker-config.js +23 -0
- package/dist/pm/actions/circuit-breaker-config.js.map +1 -0
- package/dist/pm/actions/db-queries.d.ts +18 -0
- package/dist/pm/actions/db-queries.d.ts.map +1 -1
- package/dist/pm/actions/db-queries.js +75 -2
- package/dist/pm/actions/db-queries.js.map +1 -1
- package/dist/pm/actions/promote.d.ts +7 -0
- package/dist/pm/actions/promote.d.ts.map +1 -1
- package/dist/pm/actions/promote.js +17 -1
- package/dist/pm/actions/promote.js.map +1 -1
- package/dist/pm/actions/recover-circuit-breaker.d.ts +21 -0
- package/dist/pm/actions/recover-circuit-breaker.d.ts.map +1 -0
- package/dist/pm/actions/recover-circuit-breaker.js +47 -0
- package/dist/pm/actions/recover-circuit-breaker.js.map +1 -0
- package/dist/pm/actions/select-probe-candidates.d.ts +21 -0
- package/dist/pm/actions/select-probe-candidates.d.ts.map +1 -0
- package/dist/pm/actions/select-probe-candidates.js +81 -0
- package/dist/pm/actions/select-probe-candidates.js.map +1 -0
- package/dist/pm/actions/start-todo.d.ts +7 -0
- package/dist/pm/actions/start-todo.d.ts.map +1 -1
- package/dist/pm/actions/start-todo.js +2 -1
- package/dist/pm/actions/start-todo.js.map +1 -1
- package/dist/pm/actions/sweep-recovered-circuit-breakers.d.ts +28 -0
- package/dist/pm/actions/sweep-recovered-circuit-breakers.d.ts.map +1 -0
- package/dist/pm/actions/sweep-recovered-circuit-breakers.js +47 -0
- package/dist/pm/actions/sweep-recovered-circuit-breakers.js.map +1 -0
- package/dist/pm/actions/triage-prompt.d.ts +14 -0
- package/dist/pm/actions/triage-prompt.d.ts.map +1 -1
- package/dist/pm/actions/triage-prompt.js +52 -9
- package/dist/pm/actions/triage-prompt.js.map +1 -1
- package/dist/pm/actions/triage.d.ts.map +1 -1
- package/dist/pm/actions/triage.js +37 -24
- package/dist/pm/actions/triage.js.map +1 -1
- package/dist/pm/conflict.d.ts +2 -0
- package/dist/pm/conflict.d.ts.map +1 -1
- package/dist/pm/conflict.js +59 -9
- package/dist/pm/conflict.js.map +1 -1
- package/dist/pm/scheduler.d.ts +5 -0
- package/dist/pm/scheduler.d.ts.map +1 -1
- package/dist/pm/scheduler.js +91 -44
- package/dist/pm/scheduler.js.map +1 -1
- package/dist/pm/slack.d.ts +11 -0
- package/dist/pm/slack.d.ts.map +1 -1
- package/dist/pm/slack.js +48 -5
- package/dist/pm/slack.js.map +1 -1
- package/dist/release-manager/release-helpers.d.ts +19 -2
- package/dist/release-manager/release-helpers.d.ts.map +1 -1
- package/dist/release-manager/release-helpers.js +22 -3
- package/dist/release-manager/release-helpers.js.map +1 -1
- package/dist/release-manager/release-tick.d.ts.map +1 -1
- package/dist/release-manager/release-tick.js +20 -8
- package/dist/release-manager/release-tick.js.map +1 -1
- package/dist/release-manager/slack-handler.d.ts +6 -0
- package/dist/release-manager/slack-handler.d.ts.map +1 -1
- package/dist/release-manager/slack-handler.js +76 -1
- package/dist/release-manager/slack-handler.js.map +1 -1
- package/dist/release-manager/state.d.ts.map +1 -1
- package/dist/release-manager/state.js +25 -18
- package/dist/release-manager/state.js.map +1 -1
- package/dist/types.d.ts +238 -13
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +67 -0
- package/dist/types.js.map +1 -1
- package/dist/webhook/github-handler.d.ts +2 -2
- package/dist/webhook/github-handler.d.ts.map +1 -1
- package/dist/webhook/github-handler.js +18 -6
- package/dist/webhook/github-handler.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,28 +1,10 @@
|
|
|
1
|
-
--
|
|
2
|
-
--
|
|
3
|
-
|
|
4
|
-
--
|
|
5
|
-
--
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
--
|
|
10
|
-
--
|
|
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
|
-
--
|
|
2
|
-
--
|
|
3
|
-
--
|
|
4
|
-
--
|
|
5
|
-
--
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
+
);
|
package/dist/db/migrator.d.ts
CHANGED
|
@@ -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
|
|
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"}
|
package/dist/db/migrator.js
CHANGED
|
@@ -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
|
-
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
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
|
package/dist/db/migrator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrator.js","sourceRoot":"","sources":["../../src/db/migrator.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"migrator.js","sourceRoot":"","sources":["../../src/db/migrator.ts"],"names":[],"mappings":"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"}
|
package/dist/db/schema.d.ts
CHANGED
|
@@ -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
|