diff --git a/app/workers/classify_worker.py b/app/workers/classify_worker.py index e2b8db6..a51e7e1 100644 --- a/app/workers/classify_worker.py +++ b/app/workers/classify_worker.py @@ -608,7 +608,9 @@ async def process( except Exception as exc: if legacy_cfg is not None and is_deferrable_error(exc): raise StageDeferred(f"macbook_unavailable:{type(exc).__name__}") from exc - logger.warning(f"[summary-fallback] id={document_id}: {exc}") + # ai_summary=NULL 로 완료되면 digest/briefing 이 조용히 제외 → ERROR 로 가시화 + # (best-effort 강등 자체는 유지, 운영 추적성만 보강). + logger.error(f"[summary-fallback] id={document_id} ai_summary 미생성: {exc}") finally: await client.close() diff --git a/app/workers/marker_worker.py b/app/workers/marker_worker.py index 228daa5..29a0e20 100644 --- a/app/workers/marker_worker.py +++ b/app/workers/marker_worker.py @@ -300,6 +300,11 @@ async def _process_single( f"[marker] transient error id={document_id} kind={type(exc).__name__}: {exc}" ) raise + except json.JSONDecodeError as exc: + # 200 응답의 truncated/malformed body — 연결 흔들림 등 transient. _fail(non-retryable) + # 로 박지 말고 raise → queue retry (max_attempts 까지). 진짜 손상이면 재시도 후 failed. + logger.warning(f"[marker] malformed json body (200) id={document_id}: {exc}") + raise except Exception as exc: logger.exception(f"[marker] unexpected error id={document_id}: {exc}") await _fail(session, document_id, str(exc)[:1000])