CREATE TABLE telemetry_snapshot ( tenant_id UUID NOT NULL REFERENCES tenant(id) ON DELETE CASCADE, target_id TEXT NOT NULL, speaker_id UUID REFERENCES bgp_speaker(id) ON DELETE SET NULL, kind TEXT NOT NULL CHECK (kind IN ('remote_agent','local_bird')), local_authority TEXT NOT NULL DEFAULT '', config_fingerprint TEXT NOT NULL DEFAULT '', bgp_json JSONB NOT NULL DEFAULT '{}', health_json JSONB NOT NULL DEFAULT '{}', next_poll_at TIMESTAMPTZ NOT NULL DEFAULT now(), failure_count INTEGER NOT NULL DEFAULT 0, discovery_cursor INTEGER NOT NULL DEFAULT 0, last_refresh_requested_at TIMESTAMPTZ, refresh_pending BOOLEAN NOT NULL DEFAULT false, owner_id TEXT, fencing_token BIGINT NOT NULL DEFAULT 0, lease_until TIMESTAMPTZ, PRIMARY KEY (tenant_id,target_id) ); CREATE INDEX telemetry_snapshot_due ON telemetry_snapshot(next_poll_at) WHERE owner_id IS NULL; CREATE INDEX telemetry_snapshot_speaker ON telemetry_snapshot(speaker_id);