In semantic response caching (PR #2029), the partial index on response_cache doesn't cover expires_at. This can cause get_semantic() to miss valid entries if recent rows are expired. Unlikely in production but should be fixed for robustness. See PR review for details.