Two-cycle stale→recovery tests confirm that a non-empty fetch after timeout or
empty-list correctly resets is_stale=False; no changes to main.py or aircraft.py
required as recovery logic was already correct from story 3-1.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
When fetch times out or returns empty after prior data, retain last aircraft
with is_stale=True and render them as black outlines so the display stays
informative rather than blank or crashing.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>