wulf-pulse/migrations/073_analyzer_link_aware_bundles.sql

45 lines
2.2 KiB
MySQL
Raw Normal View History

-- AI Ticket Analyzer — link-aware bundle support.
-- See docs/wulf-pulse-ticket-analyzer-build-notes.md (Phase 3).
--
-- A "bundle" is an aggregate report that was triggered from a single ticket
-- analysis page (typically a master/problem ticket) and is waiting for the
-- per-ticket analyses of its referenced tickets to complete before it can run.
--
-- Adds:
-- 1. expected_ticket_numbers TEXT[] — the full set the bundle is waiting on
-- 2. triggered_by_ticket_number TEXT — the master ticket the user clicked from
-- 3. New status value 'pending_analyses' — set while underlying analyses are
-- still running. Worker chain-trigger flips it to 'pending' once all
-- expected tickets have a complete analysis, then runAggregateReport runs.
ALTER TABLE analyzer_aggregate_reports
ADD COLUMN IF NOT EXISTS expected_ticket_numbers TEXT[],
ADD COLUMN IF NOT EXISTS triggered_by_ticket_number TEXT;
ALTER TABLE analyzer_aggregate_reports
DROP CONSTRAINT IF EXISTS analyzer_aggregate_reports_status_check;
ALTER TABLE analyzer_aggregate_reports
ADD CONSTRAINT analyzer_aggregate_reports_status_check
CHECK (status IN ('pending','pending_analyses','running','complete','failed'));
-- Replace the existing partial index so chain-trigger queries are still fast.
DROP INDEX IF EXISTS idx_analyzer_aggregate_reports_pending;
CREATE INDEX IF NOT EXISTS idx_analyzer_aggregate_reports_pending
ON analyzer_aggregate_reports (status, generated_at)
WHERE status IN ('pending','pending_analyses','running');
-- Worker chain-trigger looks up reports waiting on a specific ticket number.
CREATE INDEX IF NOT EXISTS idx_analyzer_aggregate_reports_expected_tickets
ON analyzer_aggregate_reports USING gin (expected_ticket_numbers)
WHERE status = 'pending_analyses';
COMMENT ON COLUMN analyzer_aggregate_reports.expected_ticket_numbers IS
'For bundles created from a master ticket: the full set of ticket numbers whose '
'analyses must complete before the aggregate-reduce step runs. NULL for legacy '
'aggregate reports created by manual multi-select.';
COMMENT ON COLUMN analyzer_aggregate_reports.triggered_by_ticket_number IS
'The ticket number the bundle was launched from (the master in a problem-ticket '
'flow). NULL for legacy reports.';