# Changelog All notable changes to this project will be documented in this file. Generated by [Changy](https://github.com/Tiendil/changy/tree/main). ## Unreleased No changes. ## 1.28.0 on 2026-05-30 ### Migration Run migrations `ffun migrate`. ### Changes - ff-698 (gh-225) — Collect and visualize feed activity statistics. - Collect daily loaded-entry counts per feed. - Feed view refactored to behave closely to News view. - Added a column with an average news/day metric to the Feed view. - Added a detailed 30-day feed activity chart to the feed details on the Feed view. - "Status" and "loaded" columns were merged into a single "last load" column with color coding and tooltips for feed status. - The feed website URL is now extracted, stored, and displayed on the frontend. ## 1.27.2 on 2026-05-19 ### Changes - ff-696 — Feed parser now treats entries with malformed external URLs as expected per-entry parse failures, logs them as warnings, and keeps parsing the rest of the feed. - ff-697 — Silenced expected `httpx.RemoteProtocolError` in feeds loader. ## 1.27.1 on 2026-05-14 - Added `snapshot_at` to metrics output by `ffun metrics`, to allow easier building of derived metrics. ## 1.27.0 on 2026-05-14 ### Migration 1. Run migrations `ffun migrate`. 2. Update your custom `tag_processors.toml` configs to use explicit processor routes. - Every processor now needs a `routes` list. Move old top-level `allowed_for_collections` and `allowed_for_users` values into a `[[tag_processors.routes]]` item and add a stable route `id`. For simple processors, use one route with an`id = "default"`. - Route order matters: when several routes can process an entry, Feeds Fun chooses the first matching route. - For LLM processors, remove old `collections_api_key`, `general_api_key`, and `general_api_key_warning` fields. Configure keys on routes with `api_key` instead. - To replace an old collection API key, add a route with `allowed_for_collections = true`, `allowed_for_users = false`, and `api_key = ""`. - To replace an old general API key, add a route with `allowed_for_collections = true` and `allowed_for_users = true` values and `api_key = ""`. - To keep using user-provided API keys, add a route with `allowed_for_collections = false`, `allowed_for_users = true`, and `api_key = ""`. - See `ffun/ffun/librarian/fixtures/tag_processors.toml` and the `docs/examples/*/tag_processors.toml` files for complete examples. ### Changes - ff-688 — Added depmesh and tach integration. - ff-638 — Added `dispatcher` module as a central point for dispatching entries to tag processors. - Added `queues` module as a unified interface for working with persistent queues. - The logic of choosing API keys for LLM-based processors became clearer and more flexible. - Added `can_see_tags` marker to control whether tags of a news entry are visible to a user. - ff-690 — `dispatcher` now tracks processing status of entries for each processor to avoid reprocessing the same entry for the same processor. - Failed-entry redispatch is now based on dispatcher processing status instead of the removed `ln_failed_entries` table. - `ffun failed-entries` CLI command renamed to `ffun dispatcher`. - ff-693 — Silenced expected `httpx.LocalProtocolError` in feeds loader. - ff-695 — Added extraction of video reference from `video+text` Reddit posts. The reference is removed from the top of the post's body. ## 1.26.1 on 2026-04-29 - ff-685 — Set used USD to 0 for LLM requests that were rejected by a provider (authentication failure, quota exceeded, etc.). That behavior caused noticeable fake growth in usage stats due to issues on the providers' side or quota restrictions. ## 1.26.0 on 2026-04-28 ### Migration 1. Run migrations `ffun migrate` ### Changes - ff-624 — Implemented support for integration plugins to improve the interaction of Feeds Fun with feed sources - Check README.md for details on how to add an integration plugin and what plugins are currently available. - Added integrations for Reddit, GitHub, YouTube, ArXiv, and Hacker News. - Improved HTML cleaning for LLM needs, now it removes all semantically meaningless attributes such as `class`, `id`, `style`, etc. - Improved news body purification at the frontend to protect it from JS interference and style pollution from the source. ## 1.25.2 on 2026-03-31 - ff-680 (gh-507) — Allowed unicode characters in the native feed tags to support non-English tags that are not owned by Feeds Fun. ## 1.25.1 on 2026-03-23 - ff-679 — Improved calculation of the age of news entry, to prevent some cases of overspending tokens on processing old entries that look like new ones because of the wrong value of publish date. ## 1.25.0 on 2026-03-18 This update should finish the series of changes started with feed cleanup improvements in `1.23.0`, which revealed a set of unhandled corner cases in feed processing, leading to the misbehavior of Feeds Fun. Now we postulate that the basis of entry lifetime management is the times of their ingestion (first and last), not any dates received from the feed sources. ### Migration 1. Run migrations `ffun migrate` ### Changes - ff-677 — Remove only entries that are absent from the loaded feeds. - ff-678 — Make the entry publish date in the GUI equal to the date of the first entry ingestion, because the feed-based publish date is absolutely unreliable. ## 1.24.2 on 2026-03-16 - ff-676 — Stopped updating the date of news entries publishing on each feed load because it caused constant entries reordering for feeds in broken or unconventional format. ## 1.24.1 on 2026-03-16 - ff-675 — Use `updated` date as a fallback for `published` date in RSS/ATOM feeds when `published` date is missing. ## 1.24.0 on 2026-03-15 ### Migration 1. Run migrations `ffun migrate` ### Changes - ff-674 — Fixed behaviour when Feeds Fun added and removed news entries in the loop when their published date is behind the max allowed age, but they are still returned by the feed. - In most places, ordering of entries refactored from `created_at` to `published_at`. - The logic related to the time of cataloging news entry was removed from the backend, because it worked incorrectly. - News entries with the publish date older than `FFUN_LIBRARY_MAX_ENTRY_AGE` now will not be saved to the database. - Added config `FFUN_LIBRARY_MIN_ENTRIES_PER_FEED` to keep at least N entries per feed, even if they are older than `FFUN_LIBRARY_MAX_ENTRY_AGE`. - Removed ordering of news by cataloged time from the news page, because detection of correct catalogged time is broken, and nobody uses it. - For the news entries that appear in multiple feeds, the published date is now determined from the user's feeds, not from the first feed where the news entry is encountered. - If a feed changes the news entry's published date, it will be updated (saved) next time the feed is processed. - Added CLI command `ffun cleaner shrink-feeds` to unlink old news entries from feeds, so they can be removed as orphans later. ## 1.23.1 on 2026-03-14 - ff-673 — Fixed removing orphaned entries behaviour in the case when the orphaned entry is concurrently linked to a feed. ## 1.23.0 on 2026-03-13 ### Migration - You need to upgrade your Postgres database to version 18 or higher to ensure compatibility with the latest version of Feeds Fun. This particular release will continue to support Postgres 15 (and above), but there are no guarantees that future releases will do so. - If you have customized `models.toml` or `tag_processors.toml` configs, you need to update them according to the changes described in the "Changes" section below in the `ff-640` item. - By default, the max news entry age is set to 30 days (was infinite before). If you want to keep the old behavior, set `FFUN_LIBRARY_MAX_ENTRY_AGE` to a very large value (e.g., `3650` for 10 years). You also may want to set `VITE_FFUN_ENTRIES_PERIOD_LIST`. ### Changes - ff-587 — Feeds Fun now expects at least Postgres 18 as a database. - ff-640 — Changes in LLM-related configs: - Config `max_tokens_per_entry` (`models.toml`) moved to the `llm_general` tag processor (`tag_processors.toml`) under the same name. - Config `text_parts_intersection` moved out of nested `tag_processors.llm_config` section to the root of `tag_processors` section (`tag_processors.toml`) - ff-641 — Split the default scientific papers collections into multiple smaller ones. Improved collections UI on the main page. - ff-637 — Added functionality to automatically unlink from feeds (to remove later) entries that are older than a specified age. - Added a new config `FFUN_LIBRARY_MAX_ENTRY_AGE` for the backend, which defines the maximum age of entries in the library. - Added a new config `VITE_FFUN_ENTRIES_PERIOD_LIST` for the frontend, which defines the list of periods that can be selected as filters for entries on the News view. ## 1.22.8 on 2026-03-06 - ff-330 — Removed "free of charge" statement from the footer. - ff-588 — Support maintenance mode for the frontend. ## 1.22.7 on 2026-03-04 ### Migration - If you are using `gemini-2.0-*` models in your tag processors config, please change them to `gemini-2.5-*` models. Gemini-2 models are deprecated. ### Changes - ff-661 — Added `gemini-2.5-*` models, removed `gemini-2.0-*` models. - ff-662 — Better coloring for tags in rules in the Rule view. - ff-666 — Added Impressum page (required by German law). ## 1.22.6 on 2026-03-03 ### Changes - ff-406 Added `ffun feeds unlink ` command to unlink specified feeds from all users. - ff-664 Improved type checking — `Any` type is disallowed (mostly). - Unified URLs parsing error handling. - Fixed parsing of URLs like `at://did:plc:/app.bsky.actor.profile/self` (presented in Bluesky HTML). - ff-670 `/robots.txt`, `/sitemap.xml`, `/sitemaps/pages.xml`. ## 1.22.5 on 2026-02-08 ### Changes - ff-621 News links now open in separate tabs. Every news link now has attributes `target="_blank" rel="noopener noreferrer nofollow" referrerpolicy="strict-origin-when-cross-origin"`. - ff-623 (gh-257) — Switched the places of "next" and "hide" buttons in pagination. - ff-625 (gh-382) — Support `content` field in feed entries for better content extraction. The news body is now equal to the longest of the `summary` and `content` fields. - ff-665 Adding [donna](https://github.com/Tiendil/donna) tool and some workflows for it. - Added Donna `project:work:polish` workflow for backend/frontend checks & fixes. - Added Donna `project:work:log_Changes` workflow to update CHANGELOG.md automatically. - Added backend and frontend spellchecking using `codespell`. ## 1.22.4 on 2026-01-31 - ff-630 - Improved performance of feeds discovery by reducing the number of processed URLs. ## 1.22.3 on 2026-01-21 - ff-632 (gh-478) — Fixed exception on tokens estimation while using third-party LLM models via OpenAI-compatible API. ## 1.22.2 on 2026-01-06 - ff-628 — Fixed processing of URLs with not supported schemes like `mailto:` or `javascript:`. ## 1.22.1 on 2026-01-05 - ff-614 — Use `tiendil/keycloak-simple` docker image in dev environment. - ff-561 — Updated single-user setup example. - ff-652 — Updated multi-user setup example. - ff-558 — Silenced expected `h2.exceptions.ProtocolError` in feeds loader. - ff-559 — Better error handling for OPML uploads: catch exceptions, display user-friendly messages. - ff-166 — Made tag filter case-insensitive. - ff-224 — Fixed feed discovery when the feed URL can be found only in one of the parent URLs. ## 1.22.0 on 2025-12-17 **Operations required BEFORE UPDATE**: We dropped support for Supertokens-based authentication (in multi-user mode) because Supertokens does not support the OIDC protocol well, lacks some features, and hides others behind paywalls. Instead of Supertokens, Feeds Fun now supports OIDC-compliant identity providers (IdP), e.g. Keycloak, Auth0, Okta, etc. If you used Supertokens-based authentication, you need to: - Migrate your users to a new IdP that supports OIDC protocol. `ffun users import-users-to-idp` could help you with that. - Update your Feeds Fun configuration accordingly (see examples: https://github.com/Tiendil/feeds.fun/tree/main/docs/examples) — they will be actualized shortly after the release. Changes: - ff-538 Refactored backend from Supertokens to the OIDC protocol. There are changes in environment variables: - `FFUN_ENABLE_API` replaced with `FFUN_ENABLE_API_SPA` - `FFUN_API_*` replaced with `FFUN_API_SPA_*` - Removed `VITE_FFUN_AUTH_MODE` for frontend, now frontend gets auth mode from the backend. - Removed `FFUN_APP_PORT`, `FFUN_API_PORT`. - ff-576 — Track clicks on authentication-related buttons. - ff-565 — Correct properties for session cookies (SPA <-> auth-proxy). - ff-579 — Removed api methods with optional authentication. Not all auth proxies work well with optional auth. Dev environment changes: - ff-577 — Introduced Caddy as a reverse proxy for the dev environment to have a more idiomatic OIDC setup. - ff-574 — Added configs for Pomerium auth proxy in dev environment. - ff-569 — Styles for Keycloak themes. - ff-581 — Added protection from the `X-*` headers injection into Caddy dev config. - ff-571 — Closed access to `/realms/dev/account*` endpoints in Caddy dev config. - ff-612 — Fixed logout behaviour, now logout is requested not only from the OAuth2-proxy, but also from Keycloak. - ff-541 — CLI tool to import users into an Identity Provider `ffun users import-users-to-idp`. ## 1.21.6 on 2025-10-22 - ff-534 — Silenced expected `httpx.WriteError` in feeds loader. - ff-552 — Silenced expected `ProxyError "TUN_ERR: DNS resolution failed"` in feeds loader. - ff-553 — Silenced expected `ProtocolError "Invalid input ConnectionInputs.RECV_DATA in state ConnectionState.CLOSED"` in feeds loader. ## 1.21.5 on 2025-10-17 - ff-530 — Fixed a crash when tags renormalization is running in parallel with tags removal. - ff-537 — Removed unnecessary alert dialog on sending login email. - ff-527 — Fixed a bug when the CLI command to run migrations (`ffun yoyo migrate`) did not take an exclusive lock on migrations to prevent concurrent runs. - ff-551 — Stopped normalizing native feed tags because Feeds Fun has no control over the logic that assigns them. ## 1.21.4 on 2025-10-07 **Operations required AFTER UPDATE**: 1. Run migrations `ffun migrate` Changes: - ff-517 — Implemented command `ffun cleaner renormalize-tags` — it goes through all tags in the database and tries to (re)normalize them according to the current configs. It updates the rules and tags of entries accordingly. - ff-526 — Correctly process ForeignKeyViolation errors when removing orphaned tags. ## 1.21.3 on 2025-10-03 **Operations required AFTER UPDATE**: 1. Run migrations `ffun migrate` Changes: - ff-518 — Silenced expected LocalProtocolError in feeds loader, due to the server closing the connection without following the protocol. - ff-515 — Fixed displaying text on checkboxes in the GUI (some of them displayed inverted text). - Tag normalizer now does not try to normalize technical tag parts `-dot-`, `-plus-`, `-sharp-`. - ff-463 — Extended CLI `ffun cleaner` functionality to remove tags that are not assigned to any entry. ## 1.21.2 on 2025-09-30 - Configured build system in pyproject.toml for Poetry. ## 1.21.1 on 2025-09-30 - ff-468 — Tag form normalization: - `book-reviews | books-review | books-reviews | book-review -> book-review` - `gravity-axes` -> `gravity-axis` - `wooden-axes` -> `wooden-axe` It should significantly reduce tag duplication pollution, but "normal form" is not always a "readable form" => Some tags may have weird forms, like `arms-control` -> `arm-control`. We'll solve such issues in gh-435. ## 1.21.0 on 2025-09-09 - ff-491 — Adapting Feeds Fun for gpt-5 and new Responses API: - Removed "general" OpenAI model descriptions, kept only specific ones. - OpenAI token calculation now uses only the iktoken library. - Migrated to the new Responses API. - Removed `presence_penalty` and `frequency_penalty` LLM config parameters, since Responses API does not support them. - ff-467 — Minimal valuable implementation of tag normalization. For details, see README.md. - ff-500 — Silenced the error when a news server disconnects during network communication. - ff-497 — Silenced the error when a news server disconnects without sending all the data. - ff-496 — Better SLL error handling. - ff-495 — Silenced the HTTP/2 error when a news server resets a stream. - ff-494 — Silenced the HTTP/2 error when a news server terminates the connection. ## 1.20.8 on 2025-08-26 - ff-493 — Stop raising exception on proxy error 400 (Bad Request). - ff-492 — Stop raising `RemoteProtocolError` when `receive buffer too long`. - ff-492 — Added support for HTTP2. - ff-157 — Better frontend versioning: - All essential static files are now under the correct static content versioning provided by Vite. - `/api/get-info` now returns the current backend version and can be called without authentication. - Frontend now shows the current backend version in the footer. ## 1.20.7 on 2025-08-05 - ff-483 — Fixed displaying of "red dot" on top of "show sidebar" button when sidebar is closed and there are tags in tag filter. - ff-483 — Save all user settings (including news filters & GUI) on the backend. - ff-487 — Stop feedsparser from making HTTP requests instead of parsing the passed feed content. - ff-486 — Log Gemini responses with missing candidatesTokenCount ## 1.20.6 on 2025-08-02 - ff-461 — Collect tag frequency metrics. - ff-460 — Collect "new tags at a date" metrics. - ff-458 — Collect metrics of raw & normalized tags per tag processor. ## 1.20.5 on 2025-07-30 - ff-465 — Fixed News view resetting due to rule reapplication. Added a checkbox on the public collection view. ## 1.20.4 on 2025-07-30 - ff-465 — Option to limit the number of loaded tags on the News view. Tags are filtered by the number of occurrences in the news items. ## 1.20.3 on 2025-07-28 - ff-479 — Improved Sentry configuration to exclude false-positive reports from Sentry.OpenAI integration and improve stack traces. - ff-482 — Correct parsing broken OPML files: no head section, no type attribute, wrong case of the type attribute. ## 1.20.2 on 2025-07-17 - ff-455 — Yet another fix for the Great Chinese Firewall. - ff-456 — Fixed parsing of custom URLs from OPML files (like `newsletter:666:noreply@example.com`). - ff-457 — Handle Gemini API prompt block reasons correctly. - ff-478 — Added ZSTD compression support into Accept-Encoding header for the Loader. ## 1.20.1 on 2025-06-24 - ff-164 — Backend upgraded to Python 3.13. All dependencies are updated to the latest versions. - ff-377 — Added zstd compression support. ## 1.20.0 on 2025-06-24 **Operations required BEFORE UPDATE:** 1. If you use Supertokens, migrate it manually from `9.0.2` to `11.0.4`. See [CHANGELOG](https://github.com/supertokens/supertokens-python/blob/master/CHANGELOG.md) for instructions. Changes: - ff-386 — Upgraded Supertokens to `11.0.4`. ## 1.19.8 on 2025-06-20 - ff-395 — Better handling of errors in feedparser. - ff-396 — Custom error for wrong HTTP 302 redirect from the Great Chinese Firewall. - ff-397 — Handle Gemini API finish reasons correctly. - ff-399 — Improved performance of saving tags into the database. Reduced number of queries/connections used. - ff-400 — Correctly process HTTP 429 responses for proxy requests. ## 1.19.7 on 2025-06-13 - ff-394 — Replace published_at for a news entry with the current time in case of problems with parsing. ## 1.19.6 on 2025-06-13 - ff-363 — Control the number of stored entries per feed, even if the feed is no longer loaded correctly. - ff-362 — `ffun cleaner` now removes orphaned feeds, in addition to entries. - ff-364 — Skip failed entries on parsing the feed, keeping the rest instead of skipping the entire feed. - ff-365 — Silence parsing URL error for URLs with malformed hostnames. - ff-372 — Better handling of `RemoteProtocolError` in loader for cases of "peer closed connection without sending complete message body" - ff-373 — Trim too big entries (for LLM processing) in case `max_tokens_per_entry` limit is reached. - ff-369 — HTML text cleaner now correctly processes broken surrogate Unicode characters. - ff-370 — Added dump of the Gemini API response for the case when there is no "parts" field in the response. - ff-367 — Metrics for monitoring the position of tag processors in the queue. To detect situations when they are stuck. - ff-368 — Metrics for monitoring the number of new loaded entries. ## 1.19.5 on 2025-06-07 - ff-361 Fixed failure of tag processor in case it is trying to process an orphan entry. - ff-349 Improved validating of the values in the user settings (`10,1` -> `10.1`). ## 1.19.4 on 2025-06-07 - ff-358 — `ffun cleaner clean` command now removes all orphaned entries, not only the first chunk. - ff-360 — Fixed Sentry reporting for async background tasks. - ff-359 — `ffun` cli command now correctly works in the production environment (when no dev dependencies are installed). ## 1.19.3 on 2025-05-17 - ff-348 — Fixed on-release chain of GitHub action calls. ## 1.19.2 on 2025-05-17 - Made '.env' file optional for frontend-data image. ## 1.19.1 on 2025-05-17 - ff-335 — Official Docker image for the backend - ff-337 — Official Docker image for the frontend - ff-337 — Added `VITE_FFUN_HAS_COLLECTIONS` env variable to enable/disable collections in the frontend - ff-341 — Added multi-user docker-compose example - ff-342 — GitHub action to update DockerHub repository descriptions ## 1.19.0 on 2025-05-09 **Operations required AFTER UPDATE**: 1. Run migrations `ffun migrate` Changes: - ff-326 — Dependency on the tabler-icons CDN is replaced by a local copy of icons. - ff-317 — Added footer element and pages for Terms of Service and Privacy Policy. - ff-316 — Added a modal dialog for "cookie consent". Analytics collection is disabled until the user accepts cookies. - ff-322 — The user can remove their own account from the system from the Settings page. ## 1.18.2 on 2025-04-23 - ff-298 — Tracking user events on the frontend is disabled by default. - ff-298 — Passing of `utm_*` URL query parameters to the backend. ## 1.18.1 on 2025-04-18 - ff-227 — Added "hide/show sidebar" button. - ff-292 — r/SomebodyMakeThis added to the entrepreneurship collection. - ff-243 — Updated Google models' description to flash-2, because flash-1.5 is deprecated. - ff-294 — Added OpenAI 4.1 models. ## 1.18.0 on 2025-03-28 - ff-225 — Slightly bigger vertical spacing on the main page on mobile devices - ff-232 — Access to news from collections without registration. The parameter `slug` was added to the collections config. Set it to the name of the collection you want to see in URLs. - ff-232 — URL now changes to reflect the current tags filter state. - ff-232 — Improved performance of frontend on first loading of news list. - ff-196 — If there is no news in the requested period, Feeds Fun will load some older news to show something to demonstrate that feeds are alive. ## 1.17.1 on 2025-02-27 - ff-225 — Added new screenshots. ## 1.17.0 on 2025-02-27 - ff-225 — Full GUI restyling. ## 1.16.6 on 2025-02-11 - ff-221 — Added tracking of tag filter usage. ## 1.16.5 on 2025-01-16 - Added the new screenshot, to better represent recent UI changes. ## 1.16.4 on 2025-01-15 - ff-219 — Fixed sending User-Agent header in requests. - ff-220 — Improved GUI of the "mark read/unread" operation. Added "undo mark as read" button. ## 1.16.3 on 2025-01-10 - ff-209 - Uped priority of Reddit feeds discoverer "hack". ## 1.16.2 on 2025-01-10 - ff-209 — Improved logging for feeds loading & discovering logic. ## 1.16.1 on 2025-01-01 - ff-205 — fixed processing of quota errors in Google LLM provider. - ff-206 — skip entries that caused temporary errors in the general LLM processor. ## 1.16.0 on 2024-12-28 **Operations required AFTER UPDATE**: 1. Run migrations `ffun migrate` Changes: - ff-174 — Custom API entry points for OpenAI and Gemini clients. - ff-175 — Export feeds to OPML file. - ff-171 — Simplified rules creation: - The rules creation form was moved to the tags filter. - Rules now allow specifying excluded tags (will not apply if the news has any of them). - Tags under the news caption now behave as tags in the tags filter. - Button `[more]` on the tags line under the news caption now opens the whole news. - Openned news items now always show all tags. - Only a single news item now can be opened. - Performance of the News page improved 2-3 times. - ff-172 — Added feeds collection "Entrepreneurship & Startups". Also added cli commands `ffun estimates entries-per-day-for-collection` and `ffun estimates entries-per-day-for-feed` - ff-199 — Fixed Reddit feeds discovery. ## 1.15.0 on 2024-12-15 - ff-173 — Significantly improved feeds discovery. Also: - Added types for URL values for better consistency control. - GUI now will reload news and feeds after importing an OPML file. ## 1.14.2 on 2024-11-21 - ff-156 — Further optimizations of `/api/get-last-entries`, concentrated on `ontology.operations.get_tags_for_entries`. ## 1.14.1 on 2024-11-18 - ff-158 — Improved prompts to produce less tags of better quality. - ff-159 — Fixed the exception in the API when no entries found. - ff-153 — The model Gemini 1.0 pro is removed from fixtures because Google discontinued its support. ## 1.14.0 on 2024-11-14 - ff-155 — Performance improvements. - use [orjson](https://github.com/ijl/orjson) instead of standard json lib for response serialization; - changed response format of `/api/get-last-entries` and `/api/get-entries-by-ids` API to reduce the size of the response and speed up its generation. ## 1.13.3 on 2024-11-07 - Track only user metrics with values != 0. ## 1.13.2 on 2024-11-07 In this release, we added a bunch of tracking functionality to better understand how users interact with the app. This analytics: - is strongly for our internal use; - uses only internal IDs — does not contain emails, urls, etc. - in most cases does not exceed what we already have in logs and database — just a more convenient way to access the data. Changes: - Frontend dependencies upgraded. - ff-141 — Track frontend events `news_link_opened`, `news_body_opened`. - ff-103 — Added `in_collection` marker to `feed_linked` and `feed_unlinked` events. - ff-142 — CLI command to track aggregated metrics. - ff-143 — Fixed a situation when, after removing a feed on the Feeds page, the feeds list was not updated. - ff-145 — Track users' interest in feeds.fun social channels. - ff-119 — Track OPML imports. - ff-112 — Track subscriptions on feeds from collections. - ff-131 — Track subscription dynamics on feeds.fun news channels. ## 1.13.1 on 2024-10-31 - Added normalization to business event attributes. ## 1.13.0 on 2024-10-31 - Updated frontend packages. ## 1.12.8 on 2024-10-31 - ff-70 — Business events are written in logs. ## 1.12.7 on 2024-10-24 - ff-68 — Tech metrics are written in logs. They can be filtered and processed by tools such as SplitBit or Vector and redirected to monitoring systems. Note that metrics are written at the INFO log level—if a higher log level is set, they will be hidden with all INFO logs. ## 1.12.6 on 2024-10-22 - Changed the environment variables prefix for logs settings from `FFUN_` to `FFUN_LOGS_`. ## 1.12.5 on 2024-10-14 - Mark all ssl errors catched by httpx as expected. ## 1.12.4 on 2024-10-14 - Connection error `[SSL: TLSV1_UNRECOGNIZED_NAME]` added to the list of known "ok" errors for the feeds loader. ## 1.12.3 on 2024-10-14 - Connection error `[SSL: CERTIFICATE_VERIFY_FAILED]` added to the list of known "ok" errors for the feeds loader. ## 1.12.2 on 2024-10-14 - ff-56 — Connection error `[SSL: WRONG_VERSION_NUMBER]` added to the list of known "ok" errors for the feeds loader. - ff-51 — "No description" text for feeds without a description in the Feeds list. - ff-52 — Fixed the `remove-deprecated-settings` command, now it really removes only deprecated settings. - ff-50 — Unsubscribing from a feed now do not lead to excessive server requests due to cache invalidation. ## 1.12.1 on 2024-10-12 - Removed dependency on `pkg_resources`. ## 1.12.0 on 2024-10-12 **Operations required AFTER UPDATE**: 1. Run migrations `ffun migrate` 2. Run `ffun user-settings remove-deprecated-settings` 3. If you are using an OpenAI tag processor, specify a custom configuration file for tag processors with an API key. Details can be found in the updated README.md 4. If you want to periodically clean your database from old entries, add the call `ffun cleaner clean` to your cron tasks. It is recommended. Changes: - [gh-229](https://github.com/Tiendil/feeds.fun/issues/229) — Removed `Allow using OpenAI key for feeds in standard collections` user settings. It was confusing for users and not usable in the project's current state. Instead, you can specify an LLM API key to process collections (one per tag processor). By new logic, the service's owner is responsible for managing tags for all feeds in collections. - [gh-245](https://github.com/Tiendil/feeds.fun/issues/245) — Implemented the universal LLM tag processor. Currently, it supports two API providers: OpenAI (ChatGPT) and Google (Gemini). Also: - The configuration of tag processors was moved to a separate file; see README.md for actual details. - The configuration of LLM models was moved to a separate file; see README.md for actual details. - You can configure multiple LLM tag processors with different parameters, including prompts, API keys, etc. - Token usage tracking has been replaced with cost tracking. User settings will convert automatically. - Collections refactored. Now, they are configurable and empty by default. You can specify the path to the directory with collections configuration in `FFUN_FEEDS_COLLECTIONS_COLLECTION_CONFIGS`. An example of configuration can be found in the `./feeds_collections/collections`. - `FFUN_META_MAX_ENTRIES_PER_FEED` setting moved to `FFUN_LIBRARY_MAX_ENTRIES_PER_FEED`. ## 1.11.1 on 2024-08-25 - [gh-136](https://github.com/Tiendil/feeds.fun/issues/136) — Links to the Discord server and to the Reddit community. - [gh-24](https://github.com/Tiendil/feeds.fun/issues/24) — Link to the blog. Blog RSS is added to collections. ## 1.11.0 on 2024-08-21 - [gh-220](https://github.com/Tiendil/feeds.fun/issues/220) Removed Home link from internal pages. - [gh-221](https://github.com/Tiendil/feeds.fun/issues/221) Slighly increased width of the central column on the main page. - [gh-241](https://github.com/Tiendil/feeds.fun/issues/241) Optional plausible analytics for the frontend. - [gh-41](https://github.com/Tiendil/feeds.fun/issues/41) Build dev service images only once. ## 1.10.1 on 2024-08-09 - [gh-231](https://github.com/Tiendil/feeds.fun/issues/231) CLI tool and base of texts to measure quality of tag processors. - [gh-233](https://github.com/Tiendil/feeds.fun/issues/233) Improved prompt of OpenAI General processor. It should start to output more relevant tags. - [gh-234](https://github.com/Tiendil/feeds.fun/issues/234) (possibly) Fixed deadlocks in updating tags properties by `apply_tags_properties`. ## 1.10.2 on 2024-08-09 - [gh-231](https://github.com/Tiendil/feeds.fun/issues/231) CLI tool and base of texts to measure quality of tag processors. - [gh-233](https://github.com/Tiendil/feeds.fun/issues/233) Improved prompt of OpenAI General processor. It should start to output more relevant tags. - [gh-234](https://github.com/Tiendil/feeds.fun/issues/234) (possibly) Fixed deadlocks in updating tags properties by `apply_tags_properties`. ## 1.10.0 on 2024-07-21 **Configs migration:** if you have turned on OpenAI ChatGPT processors, like `FFUN_LIBRARIAN_OPENAI_CHAT_35_FUNCTIONS_PROCESSOR__ENABLED="True"` or `FFUN_LIBRARIAN_OPENAI_CHAT_35_PROCESSOR__ENABLED="True", remove their configs and add configs for OpenAI General Processor, like `FFUN_LIBRARIAN_OPENAI_GENERAL_PROCESSOR__ENABLED="True"`, instead. The semantic of the configs is the same. - [gh-227](https://github.com/Tiendil/feeds.fun/issues/227) — Old OpenAI ChatGPT processors is replaced with OpenAI General Processor which utilizes power of GPT-4o-mini model. ## 1.9.0 on 2024-07-19 **Recommendation:** Because `GPT-4o-mini` is much smarter than `GPT-3.5-turbo`, I recommend you to disable GPT function processor `FFUN_LIBRARIAN_OPENAI_CHAT_35_FUNCTIONS_PROCESSOR__ENABLED="False"` and use only standard GPT processor `FFUN_LIBRARIAN_OPENAI_CHAT_35_PROCESSOR__ENABLED="False"`. In [gh-227](https://github.com/Tiendil/feeds.fun/issues/227), one of the processors will be refactored, and one of them will be removed. - [gh-226](https://github.com/Tiendil/feeds.fun/issues/226) Switch used OpenAI model to gpt4o-mini ## 1.8.1 on 2024-06-06 DB migration required: **no** - [gh-217](https://github.com/Tiendil/feeds.fun/issues/217) Fixed: `apply_tags_properties` fails because of duplicated tags. ## 1.8.0 on 2024-06-05 DB migration required: **yes** - [gh-214](https://github.com/Tiendil/feeds.fun/issues/214) Added not null constraint to the `o_tags_properties.tag_id` column. - [gh-213](https://github.com/Tiendil/feeds.fun/issues/213) Fixed: `Native tags` tags processor periodically fails with deadlock in the database. ## 1.7.0 on 2024-06-02 Breaking changes: - [gh-68](https://github.com/Tiendil/feeds.fun/issues/68) Supertokens services upgraded to version 9.0.2. If you are using Supertokens, you should upgrade them manually (from 5.0.0 to 9.0.2) according to the instructions in https://github.com/supertokens/supertokens-core/blob/master/CHANGELOG.md Changes: - [gh-128](https://github.com/Tiendil/feeds.fun/issues/128) Code migrated to Python 3.12 - [gh-128](https://github.com/Tiendil/feeds.fun/issues/128) Upgraded backend dependencies to the latest suitable versions - [gh-205](https://github.com/Tiendil/feeds.fun/issues/205) Changelog added, with help of [Changy](https://github.com/Tiendil/changy)