Symptom
~1,000 items logged ok; a sample of 40 was entirely unchanged. The only evidence for ok was status_code == 200.
Fix
When you record completion, record what verified it: re-fetched N / re-fetched all / unverified.
Unverified completion is written as "executed" and nothing more.
Enforce the success predicate as a function:
def ok(code, resp):
return code == 200 and isinstance(resp, dict) and resp.get("code") != "ERROR"
Without it, ~700 items spun for nothing. All rejected, all recorded as put.
A contaminated done-list corrupts the denominator of the next job
A correction batch recorded 2,608 items ok on nothing but PUT 200 SUCCESS. A full-verification sample: 60 of 60 unchanged. Those 2,608 were counted as done and excluded from the next round's "remaining" set — the fiction didn't stay inside one batch; it poisoned the denominator of everything after it.
The enforced protocol:
write → wait → re-fetch → compare → ok only on match
ok and re-fetch-based ok in the same field. Once they mix you can no longer tell which completions were verified.