- Shipped
- September 5, 2026 at 3:05 PM UTC
- Author
- Kamo
- Commit
- c8aa843
An article holding 20 of its 21 locales is "incomplete", so the ten-minute sweep re-queued it — and the translator then re-translated all 21, paying twenty times over to recover the one that was missing. Ten articles stuck on a single locale therefore cost 210 provider calls every ten minutes, forever. That is the load that pinned the translation service at eight cores for days. The locale that kept failing was en->ru, which was timing out on this platform's largest articles, so it never got any closer to succeeding while the other twenty were redone around it on every pass. The sweep now asks for translateMissing and attempts only the gaps. The save path is deliberately unchanged and still redoes every locale: when the article's text changes, the translations that exist are of superseded content. A pair that keeps failing also now backs off — 10m, 40m, 3h, then 12h — instead of being retried on every sweep indefinitely. In memory rather than a column, because it describes the health of a provider rather than anything about the article, and a release that fixes the provider should get a clean slate rather than sit out a backoff it no longer deserves. The new test asserts a CALL COUNT, not a result. A test that only checked "the missing locale was filled in" passes just as well against the version that burned the cluster.