Captures full prompt content, response text, HTTP status, and finish
reason on every LLM failure path. Replaces silent null returns in
openRouterClient with structured CompletionFailure objects so error
details propagate up through the queue and service layers.
Also removes recipeList from backstoryAndDesires prompt (not useful
for backstory generation) and adds schema migration v3.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>