fix(workers): izyatie per-doc isolation + newbuilding-crossload breadcrumb (#2445-D5/D6) #2460

Merged
bot-backend merged 1 commit from fix/task-error-isolation-breadcrumb into main 2026-07-05 20:09:13 +00:00
Collaborator

Summary

Аудит-находки D5+D6 (epic #2445, task-resilience).

D5izyatie_ocr_ingest.py оборачивал в try/except только fetch_pdf(); ocr_pdf_text/extract_izyatie_records/upsert+commit были незащищены → исключение убивало весь недельный батч. Расширен try/except на весь per-doc body + db.rollback() на сбое → битый документ skip'ается, остальные обрабатываются.

D6etl_newbuilding_crossload.py не имел error-handling/breadcrumb (в отличие от всех соседних тасков) → падение невидимо оператору. Добавлен start/success/failure breadcrumb паттерн (objective_scrape_runs, group='newbuilding-crossload', по образцу objective_etl.py). На failure re-raise (Celery/GlitchTip срабатывают); breadcrumb-flush failure не маскирует оригинальное исключение. Без миграции.

Test plan

  • 40 тестов зелёные (D5: сбой doc 2/3 → docs 1,3 закоммичены, rollback 1×; D6: breadcrumb на success+failure, re-raise, flush-failure сохраняет исключение)
  • ruff чисто, psycopg CAST соблюдён, tradein не тронут
  • code-reviewer: APPROVE (rollback-poisoning исключён, column-reuse без schema-риска)

Refs #2445

## Summary Аудит-находки D5+D6 (epic #2445, task-resilience). **D5** — `izyatie_ocr_ingest.py` оборачивал в try/except только `fetch_pdf()`; `ocr_pdf_text`/`extract_izyatie_records`/`upsert`+`commit` были незащищены → исключение убивало весь недельный батч. Расширен try/except на весь per-doc body + `db.rollback()` на сбое → битый документ skip'ается, остальные обрабатываются. **D6** — `etl_newbuilding_crossload.py` не имел error-handling/breadcrumb (в отличие от всех соседних тасков) → падение невидимо оператору. Добавлен start/success/failure breadcrumb паттерн (`objective_scrape_runs`, `group='newbuilding-crossload'`, по образцу `objective_etl.py`). На failure re-raise (Celery/GlitchTip срабатывают); breadcrumb-flush failure не маскирует оригинальное исключение. Без миграции. ## Test plan - [x] 40 тестов зелёные (D5: сбой doc 2/3 → docs 1,3 закоммичены, rollback 1×; D6: breadcrumb на success+failure, re-raise, flush-failure сохраняет исключение) - [x] ruff чисто, psycopg `CAST` соблюдён, tradein не тронут - [x] code-reviewer: ✅ APPROVE (rollback-poisoning исключён, column-reuse без schema-риска) Refs #2445
bot-backend added 1 commit 2026-07-05 19:45:11 +00:00
fix(workers): per-doc error-isolation в izyatie OCR + breadcrumb в newbuilding crossload (#2445-D5/D6)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 21s
CI / changes (pull_request) Successful in 13s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 2m9s
CI / backend-tests (pull_request) Successful in 15m30s
51655b6aaf
D5: расширен per-doc try/except в izyatie_ocr_ingest на весь body
(fetch→OCR→extract→upsert→commit), не только fetch, + db.rollback() на сбое —
один битый документ теперь skip'ается, а не убивает весь недельный батч.

D6: etl_newbuilding_crossload обёрнут в тот же start/success/failure breadcrumb
паттерн, что у sibling-тасков (objective_scrape_runs, group='newbuilding-crossload')
— падения видны в operational-логе, не только Celery FAILURE + GlitchTip.
На failure re-raise (Celery/GlitchTip срабатывают), breadcrumb-flush failure не
маскирует оригинальное исключение. Без миграции (таблица есть).

Refs #2445
bot-backend merged commit 464519c69b into main 2026-07-05 20:09:13 +00:00
bot-backend deleted branch fix/task-error-isolation-breadcrumb 2026-07-05 20:09:14 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#2460
No description provided.