Fix frame categorization crash when LLM returns array-wrapped JSON
The describe LLM (~10% of runs) returns [{...}] instead of {...},
causing 'list' object has no attribute 'get' in downstream frame
selection. Unwrap single-element arrays and validate dict type at
the parse site, feeding malformed responses into existing retry logic.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>