Deferred from the Skywatch.brief MVP design.
The MVP composer fetches sequentially — METAR → WFO lookup → 8 independent fetches. If real-world brief latency exceeds ~5s, parallelize the 8 independent fetches with Ruby threads + Faraday. Ruby threading + IO is well-behaved here; the gating concern is keeping the cache layer thread-safe (it already uses a Mutex internally).
Acceptance: Skywatch.brief("KCDW") p95 stays under 3s on a typical network. No correctness changes — same envelope shape, same error handling.
Deferred from the Skywatch.brief MVP design.
The MVP composer fetches sequentially — METAR → WFO lookup → 8 independent fetches. If real-world brief latency exceeds ~5s, parallelize the 8 independent fetches with Ruby threads + Faraday. Ruby threading + IO is well-behaved here; the gating concern is keeping the cache layer thread-safe (it already uses a Mutex internally).
Acceptance:
Skywatch.brief("KCDW")p95 stays under 3s on a typical network. No correctness changes — same envelope shape, same error handling.