What's Changed
Learning system — consistency fixes
- Fixed silent
llm_rerank_top_krange mismatch: the overlay parsed values in the range 5–100 while the API accepted 1–200. Values above 100 now round-trip correctly instead of silently reverting to the default 30. - Unified disliked keywords: learned high-frequency disliked terms (extracted from 1–2 star ratings) are now automatically merged with your explicit "Show me less of this" list and applied as a single ranking penalty. Football and Hollywood articles finally sink even when you haven't manually listed them.
- Reader profile now editable in the UI:
profile_summary/bootstrap_profile_summaryis exposed viaGET/PUT /api/preferences/weightsso the AI reranker narrative can be viewed and edited from the Digest settings page.
New features
- Category balancing gate: optional per-category exclude/demote thresholds with an evidence guard (
category_min_ratings) to prevent burying a category before it has been fairly rated. - Disliked keywords in digest config:
disliked_keywordsadded to the digest config API and admin routes — soft negative ranking signal, separate from hard-blockexclude_keywords. - YouTube proxy + retry:
CONDENSEIT_YOUTUBE_PROXYenv var routes YouTube feed requests through a proxy to bypass datacenter IP blocks. Transient 5xx/429 responses are retried with exponential backoff.
Digest settings UI — full revamp
- Plain-language sections replacing the old overloaded form:
- What goes in your digest — article limits, freshness, category balance, language filter.
- Things to avoid — Block completely (hard drop, red tags) vs Show me less of this (soft demote, orange tags) with a note that 1–2 star ratings feed the demote list automatically.
- Summary style — takeaways and paragraph count.
- YouTube transcription — unchanged logic, now in its own card.
- Personalization — Off / Balanced / Aggressive preset tiles that write a full weight bundle; reader profile free-text box; "Let AI re-order my top stories" toggle surfaced at top level.
- Advanced (collapsible) — all raw signal weights preserved, just demoted out of the way.
- Cross-reference captions on the Learning Profile page linking learned disliked terms to the editable list in Digest settings.
Fixes
- Fixed
pyproject.tomlduplicate static-file inclusion causinghatchlingbuild errors.
Commits Since 2.7.6
a3129e1feat(learning): revamp digest settings UI and fix learning consistency