14 Oct incident: gpt-image-2.5 Flare/Sunburst—failover for Bubble bulk catalogs via BIAIG without stuck workflows
Flare/Sunburst degraded for ~40 minutes on 14 Oct (resolved 10:58 UTC). What I do in BIAIG: when to switch legs, how I keep Bubble’s scheduler from choking, and what I log so catalog replay doesn’t turn into another sync storm.
Context (15 Oct 2026)
On 14 October I still had bulk catalog jobs in flight when OpenAI reported limited availability for gpt-image-2.5-flare and gpt-image-2.5-sunburst only (degraded performance)—not a full Images API outage. Timeline per status.openai.com (UTC): investigating ~10:18 → mitigation ~10:40 → resolved ~10:58 (~40 minutes). No root cause was published. An earlier 15–16 Sep 2026 incident affected Flare only—that’s my reminder that repeat degradation is plausible even after the status page turns green.
Hard dates don’t move: gpt-image-1 shuts down 23 Oct 2026 (replace with Flare or Sunburst—deprecations). For Nano Banana 2 (gemini-3.1-flash-image), the editorial brief cites 29 Oct cutover, but the Scout packet flags a conflict: current Google Gemini API deprecations/changelog (early Oct 2026) mark the model deprecated with NB2.1 (gemini-nano-banana-2.1, GA 6 Oct 2026) and no shutdown date announced; a 29 Oct shutdown mention may have been withdrawn per secondary analysis (S5 Labs, 7 Oct). I verify live Google pages before production urgency, not stale aggregators alone. Worth reading next: BulkImagen async batches with nano-banana-2-1:.
BIAIG here means our internal multi-leg bulk orchestrator (async batch, public result URLs). No public product docs matched that name; the checklist below is vendor + Bubble guidance—production switches stay in your runbook. A closer look: Nano Banana 2.1: reported ~50%.
What “don’t block WU” means during leg degradation
Bubble penalizes long synchronous API Connector calls in workflows; forum reports often cite ~30s as a practical external-call ceiling—runs fail and scheduler capacity suffers.
For Schedule API Workflow on a list, Bubble documents that:
- items run in parallel;
- interval = 0 holds the scheduler until the entire batch finishes and blocks other scheduled workflows—a documented anti-pattern for app-wide scheduler health;
- intervals do not guarantee zero overlap under load; recursive API workflows are the usual fix when ordering matters.
My BIAIG rule during OpenAI leg pain: don’t hammer sync Image API across the full catalog with interval=0. I use a short sync probe → Batch leg or reserve provider → finish via webhook/backend workflow.
BIAIG operational checklist (bulk catalog failover)
1. Signals to watch
- OpenAI Status for Flare/Sunburst (distinct from Sep Flare-only).
- Per-leg metrics: 429/5xx rate, p95 latency, bad/empty image URLs after upload.
- Sync vs Batch: 14 Oct status did not split endpoints; sync may fail while Batch still accepts (validate at your volume).
2. When to switch legs (guides, not magic numbers)
| Mode | Stay | Switch |
|---|---|---|
| Sync burst (small urgent slices) | Status resolved + canary N rows healthy | Sustained errors/latency; Flare↔Sunburst cross-failover (everyday gen vs editing precision—image guide) |
OpenAI Batch (/v1/images/generations, /v1/images/edits) |
Large catalog, latency OK; JSONL + custom_id—batch guide |
Sync leg on fire while batch submit still works; or replay failed custom_id only |
| Reserve provider (e.g. Gemini NB2.1) | OpenAI degraded past your SLO; migration off gpt-image-1/NB2 |
Map prompts/sizes in runbook; NB2 shutdown date from live Google docs, not unverified brief dates |
Do not: set interval=0 to “finish bulk before failover”—you freeze unrelated scheduled jobs.
3. Bubble workflow pattern (avoid stuck runs)
- Start bulk: API workflow creates/updates a batch-job record (see logging), enqueues BIAIG leg, returns job id immediately—no image bytes in the same run.
- Sync leg (if used): one row or micro-batch; on fail mark
failed—no tight retry loop without backoff in the same workflow. - Batch leg: submit JSONL; poll or webhook; store public URL + catalog row link.
- Apply results: separate API workflow (recursive or list with non-zero interval); failures go to a replay queue.
4. Batch-job logging minimum (catalog replay)
Per job (and per row if you nest logs):
job_id,started_at,leg(openai_sync_flare|openai_sync_sunburst|openai_batch|gemini_nb21| …)provider_batch_id/output_file_id(OpenAI—cookbook)custom_id↔ catalog row id (Bubble unique id or stable sku)—1:1 for replaymodel_idat submit (critical near 23 Octgpt-image-1cutover)input_hash(prompt + refs) to avoid paid duplicate work on replay- Row
status:queued|submitted|succeeded|failed|skipped_duplicate error_class+ sanitized raw snippetresult_public_url,completed_atincident_tag(e.g.openai-2026-10-14-flare-sunburst) A closer look: 29 Oct 2026 Nano Banana.
Replay = failed/missing rows only, same custom_id, new leg per checklist—not a full catalog re-run.
5. After status “resolved”
- Canary sync (5–20 rows) on both models if gen/edit mix.
- Check scheduler backlog from yesterday’s interval=0 jobs.
- Update runbook if Sep+Oct Flare pattern changes default leg mix.
Honest limits
- No root cause for 14 Oct; aggregate status ≠ your tier/region.
- BIAIG production thresholds and schema are internal—this article does not replace your digest/runbook.
- Bubble timeout figures vary by context—measure on your app.
Sources: OpenAI status, deprecations, batch/image guides; Google Gemini changelog/deprecations; Bubble scheduling, recursive workflows, scheduler, API Connector; forum threads on timeouts and list scheduling (Scout packet).