6be4b5a200
정렬 업로드는 정렬 화면을 떠나는 순간 한 번만 쏘고, 마커를 남기지 않고, "미업로드 전부 올리기"는 `align/` 을 보지 않았다. 세 가지가 겹쳐 **실패하면 흔적도 없이 없어졌다.** 2026-09-10 병원에서 조합 CSV 39건이 망 때문에 실패한 건 화면에 남아 나중에 올릴 수 있었지만, 같은 시각의 정렬은 올라갔는지조차 알 수 없었다. PC 로 데이터를 꺼내 labdb 와 대조해서야 31건이 빠진 것을 찾았다. ## 바꾼 것 pendingAlign(runDir) 안 올라간 정렬 폴더를 찾는다 pendingAll() 조합 CSV + 정렬 폴더 (디렉터리면 정렬 한 건) uploadAllPending() 둘을 한 버튼으로 올린다 uploadAlign() 성공/실패 마커를 남긴다 마커는 **자동 재시도가 무엇을 건너뛸지 고를 때만** 본다. `uploadAlign` 자체는 마커를 보지 않으므로 "memo 붙여 다시 보내기"는 그대로 된다 — 원래 의도를 깨지 않으면서 빠진 것을 알 수 있게 하는 것이 목적이다. raw CSV 가 없는 빈 정렬 폴더는 대상에서 뺀다. 정렬 화면에 들어갔다 아무것도 재지 않고 나오면 빈 폴더만 남는데(실측 `2026-09-10_unnamed_123015`), 그걸 올리려 들면 영원히 실패한다. 확인 측정(`align_Ncm_confirm.csv`)도 raw 로 세지 않는다 — 페이로드에서 빠지는 데이터라 그것만 있는 폴더는 올릴 것이 없다. 화면은 이미 pendingAll()/uploadAllPending() 만 쓰므로 따로 손대지 않았다. ## 배포 전 주의 폰에 마커가 없으면 이 변경은 **이미 올라간 것까지 전부 다시 올리려 한다.** PC 가 올린 세션은 다른 deviceId 소유라 서버가 409 SESSION_ID_CONFLICT 로 거절하므로 영구 실패로 남는다. 그래서 labdb 에 있는 것(조합 111 · 정렬 34)에 대해 폰 쪽 마커를 먼저 심었다. 마커의 `verified` 필드에 근거를 적었다 — `labdb_listing` 은 목록에서 직접 확인, `upload_conflict` 는 409 로 존재만 확인(레코드 수는 대조 못 함). 테스트 8개 추가 (전체 151, 실패 0). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>