- New taxonomy module: single source of truth for 6 topics x 5 flavors,
shared by the LLM response schema (enum-constrained) and validation.
- Classifier now assigns one topic + one flavor per article; json_schema
enums force valid values, with coercion as a safety net.
- article_scores gains topic/flavor columns via an idempotent migration.
- New 'list-category' command to browse by topic and/or flavor, ranked by
composite score.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Use json_schema structured output (newer LM Studio rejects json_object),
escalating through json_schema -> json_object -> text and pinning the
first format the server accepts to avoid wasted round-trips.
- Make per-article failures non-fatal and commit incrementally so a single
timeout no longer discards the whole batch.
- Raise default timeout to 180s (configurable via GOODNEWS_LLM_TIMEOUT) for
larger local reasoning models.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>