СТАТТЯ

Інцидент 14.10: gpt-image-2.5 Flare/Sunburst — failover bulk-каталогу в Bubble через BIAIG без зависання workflow

14.10 Flare/Sunburst деградували ~40 хв (resolved 10:58 UTC). Що я роблю в BIAIG: коли перемикати leg, як не блокувати scheduler Bubble і що логувати, щоб replay рядків каталогу не перетворився на sync storm.

Контекст (15.10.2026)

14 жовтня bulk-каталог ще крутився, а OpenAI вже писав про обмежену доступність лише для gpt-image-2.5-flare та gpt-image-2.5-sunburst (degraded performance) — не повне вимкнення Images API. Хронологія за status.openai.com (UTC): investigating ~10:18 → mitigation ~10:40 → resolved ~10:58 (~40 хв). Root cause не опубліковано. Окремий resolved-інцидент 15–16 вер. 2026 стосувався лише Flare — для мене це сигнал: повторна деградація цілком реальна, навіть коли status page уже «зелений».

Паралельно дедлайни не зникають: gpt-image-1 вимикається 23.10.2026 (заміна — Flare або Sunburst, deprecations); щодо Nano Banana 2 (gemini-3.1-flash-image) у brief зазначено cutover 29.10, але в пакеті Scout — конфлікт: у поточних Google Gemini API deprecations/changelog (станом на поч. жовт. 2026) модель deprecated з рекомендацією NB2.1 (gemini-nano-banana-2.1, GA 6.10.2026) і без оголошеної дати shutdown; згадку про 29.10 у changelog, за вторинним джерелом (S5 Labs), могли відкликати до 7.10. Перед прод-рішеннями я перевіряю live-сторінки Google, не покладаюсь лише на brief або застарілі агрегатори. Поруч із цим: BulkImagen async batches і nano-banana-2-1:.

BIAIG тут — наш внутрішній оркестратор multi-leg bulk (async batch, публічні URL результатів). Публічної документації з такою назвою Scout не знайшов; чеклист нижче — методологія на базі vendor docs + Bubble manual/forum, а пороги leg-switch у production — з вашого runbook. Про це окремо: Nano Banana 2.1: ~50% API/batch.


Що означає «не блокувати WU» під час деградації leg

Bubble не любить довгі синхронні виклики з API Connector у workflow: на forum часто згадують ~30 с як практичну межу для external calls; workflow може впасти, а scheduler — «з’їсти» capacity.

Офіційно для Schedule API Workflow on a list:

  • jobs йдуть паралельно;
  • interval = 0 тримає scheduler, поки весь batch не завершиться, і блокує інші scheduled workflows — documented anti-pattern для здоров’я app-wide scheduler;
  • interval ≠ гарантія відсутності overlap під навантаженням; для порядку/консистентності часто радять recursive API workflows.

Для BIAIG я роблю так: під деградацією OpenAI leg не «дожимаю» тисячі sync Image API в одному burst з interval=0. Краще короткий sync probe → Batch leg або reserve provider → webhook/backend workflow для завершення.


Операційний чеклист BIAIG (failover bulk-каталогу)

1. Сигнали (що моніторити)

  • RSS/сторінка OpenAI Status для Flare/Sunburst (не плутати з Sep Flare-only).
  • Власні метрики leg: rate 429/5xx, p95 latency, частка порожніх/битих image URL після upload.
  • Окремо: sync Image API vs Batch — status 14.10 не розділяв endpoints; якщо sync поганий, Batch може ще прийматися (перевірити на вашому обсязі).

2. Коли перемикати leg (орієнтири, не магічні числа)

Режим Коли лишатися Коли перемикати
Sync burst (малі партії, терміново) Status resolved + error rate у нормі на канary N рядків Sustained помилки/latency на Flare або Sunburst; cross-model Flare↔Sunburst (різне позиціонування: everyday gen vs editing precision — image guide)
OpenAI Batch (/v1/images/generations, /v1/images/edits) Великий каталог, tolerable latency; JSONL з custom_id — batch guide Sync leg «горить», а batch submission ще healthy; або потрібен replay лише failed custom_id без повторного sync storm
Reserve provider leg (напр. Gemini NB2.1) OpenAI leg деградований довше за ваш SLO; або migration off gpt-image-1 / NB2 Після cutover mapping prompt/size у runbook; дату NB2 shutdown — з live Google docs, не з brief без верифікації

Не робити: ставити interval=0 «щоб швидше прогнати bulk перед failover» — заморозите інші scheduled jobs у додатку.

3. Патерн workflow у Bubble (без stuck runs)

  1. Старт bulk: API workflow створює/оновлює batch-job Thing (див. лог нижче), enqueue leg у BIAIG, повертає job id одразу — без очікування image bytes у тому ж run.
  2. Sync leg (якщо взагалі): один рядок або мікро-batch; при fail — mark row failed, не retry loop у тому ж workflow без backoff.
  3. Batch leg: submit JSONL; poll або webhook з backend; результат — публічний URL (S3/CDN/Bubble file) + зв’язок з catalog row.
  4. Завершення: окремий API workflow (recursive або list з non-zero interval) застосовує результати до Things; помилки — у dead-letter список для replay. Поруч із цим: gpt-image-1 вимикається 23.10.2026: міграція bulk-каталогів.

4. Що логувати в batch-job (мінімум для replay рядків)

Зафіксуйте на кожному job (і на рядку, якщо є nested log):

  • job_id (internal UUID), started_at, leg (openai_sync_flare | openai_sync_sunburst | openai_batch | gemini_nb21 | …)
  • provider_batch_id / output_file_id (OpenAI Batch — cookbook pattern)
  • custom_id ↔ catalog row id (Bubble unique id або ваш stable sku) — один до одного для replay
  • model_id at submit time (важливо біля 23.10 для gpt-image-1 → 2.5)
  • input_hash (prompt + refs) щоб не дублювати платні виклики при replay
  • status per row: queued | submitted | succeeded | failed | skipped_duplicate
  • error_class (HTTP, timeout, empty body) + raw snippet (без secrets)
  • result_public_url, completed_at
  • incident_tag (напр. openai-2026-10-14-flare-sunburst) для postmortem фільтра

Replay = лише рядки з failed/missing_output, той самий custom_id, новий leg за чеклистом — не повний re-run каталогу.

5. Після «resolved» на status page

  • Canary sync (5–20 рядків) на обох цільових моделях, якщо каталог mixed gen/edit.
  • Перевірити scheduler: немає backlog від учорашнього interval=0.
  • Оновити runbook: чи Sep+Oct Flare патерн змінює default leg ratio.

Чесні обмеження

  • Root cause 14.10 невідомий; aggregate status ≠ ваш tier/регіон.
  • Пороги leg-switch і схема BIAIG у production — internal; цей текст не замінює ваш digest/runbook.
  • Таймаути Bubble (30 с vs інші контексти) — перевірте на своєму app.

Джерела: OpenAI status + deprecations + batch/image guides; Google Gemini changelog/deprecations; Bubble scheduling, recursive workflows, scheduler, API Connector; forum threads про timeout і list scheduling (див. Scout packet).

← Усі статті