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>