Three issues caused intermittent DEGRADED health:
1. When ICAO API returned empty (timeout, challenge page), the relay
seed updated seed-meta but did not refresh the data key TTL. After
1h the data key expired, health saw EMPTY, reported CRIT.
Fix: call EXPIRE on the data key to extend TTL on empty response.
2. health.js dataSize() did not recognize the closedIcaos array field,
falling back to Object.keys count (always 2). Now properly counts
the closure array length.
3. 0 airport closures is the normal healthy state, but health treated
it as EMPTY_DATA (CRIT). Added EMPTY_DATA_OK_KEYS set so NOTAM
closures with 0 records reports OK when the key exists or seed-meta
is fresh.