Root causes of zero entity extraction:
1. IngestWorker used WikiLinkFallbackExtractor (wiki links only)
Fix: Use LlmEntityExtractor when LLM_ENDPOINT is set
2. ExtractedEntity.entity_type vs LLM returning "type"
Fix: serde alias "type" -> entity_type, default confidence
3. Reasoning models output <think>...</think> before JSON
Fix: strip_thinking_tags() extracts JSON from response
4. Reflection verification crashes pipeline on parse failure
Fix: graceful fallback, keep all entities if reflection fails
Tested with reasoning-predictor (qwen2.5:3b) via port-forward.