Claude wraps JSON in ```json ... ``` fences even when instructed to
return raw JSON. This caused all TopicResult validations to fail with
"Invalid JSON at line 1 column 1". Strip fences before parsing.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>