0854c72c70
marker_worker 는 변환 시작 시 doc.md_status=processing 으로 표시하는데, 변환이 _fail()/_set_skipped() 를 거치지 않고 예외(예: 대형 batch ReadTimeout)로 죽으면 queue_consumer 가 큐 행만 failed 처리하고 doc.md_status 는 processing 에 영구 고착 = orphan (큐 failed, 문서 processing). markdown consumer 분리 후 이 orphan 이 tail 재처리에서 재발(5149/5201)하여 근본 원인 차단. _process_stage except 블록에서 큐 항목이 영구 실패(attempts>=max)할 때 stage가 markdown 이고 doc.md_status=processing 이면 failed 로 동기화. 재시도 중 (attempts<max)엔 pending 큐 행이 남아 orphan 아니므로 미터치. 검증: synthetic 영구 실패 경로 → md_status processing→failed 동기화 PASS. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>