What problem does it solve? Reading financial Parquet silos (creditos, liquidez, derivados) synchronously blocks the async event loop, and a single failing silo can crash the entire service. This Skill provides the patterns to build non-blocking, fault-isolated data connectors. ## Core Features & Use Cases - Async Parquet Extraction: Offload Polars scans to a threadpool via asyncio.to_thread, returning pl.LazyFrame so the semantic compiler decides what to materialize. - Graceful Degradation: Typed exceptions (SiloUnavailableError, SiloTimeoutError) ensure one failed silo returns a 503 while the others keep responding. - In-Memory TTL Cache: Configurable cache (SILO_CACHE_TTL_SECONDS, default 300) avoids repeated disk scans, with explicit invalidation support. - Use Case: Write ml/data/extractors.py for a FastAPI backend that serves three financial silos, then validate it with pytest-asyncio tests covering success, silo-down, and cache hit/miss scenarios. ## Quick Start Use the portal-data-connectors skill to write the async Parquet extractors in ml/data/extractors.py with typed silo errors and pytest-asyncio tests.