**********************
FlexMeasures Changelog
**********************
v0.33.0 | June 01, 2026
============================
.. note:: Read more on these features on `the FlexMeasures blog `_.
.. note:: It is recommended to assign a worker to the ``ingestion`` queue (or configure existing workers to handle it, as well),
so that sensor data posted via the API is processed asynchronously [see `PR #2101 `_].
For instance, using:
.. code-block:: bash
$ flexmeasures jobs run-worker --queue "forecasting|scheduling|ingestion"
.. warning:: We are deprecating ``FLEXMEASURES_MONITORING_MAIL_RECIPIENTS`` in favor of ``FLEXMEASURES_DEFAULT_MONITORING_MAIL_RECIPIENTS``.
New features
-------------
* Added API and UI support for copying assets and their subtrees [see `PR #2017 `_ and `PR #2120 `_]
* Improve UX after deleting a child asset through the UI [see `PR #2119 `_]
* Improve source filtering in the sensor data GET endpoint by exposing the documented query parameters in Swagger and allowing filtering by the account linked to data sources [see `PR #2083 `_ and `PR #2151 `_]
* Support sensor references for efficiency fields in storage flex-models [see `PR #2142 `_]
* Introduce the ``consumption`` and ``production`` flex-model fields for the ``StorageScheduler`` to save schedules to [see `PR #2190 `_ and `PR #2213 `_]
* Added a unified job status endpoint ``GET /api/v3_0/jobs/`` to retrieve the current execution status and result message for any background job [see `PR #2141 `_]
* Add ``flexmeasures jobs inspect-job`` CLI command to show job status and metadata information (similar to the job status endpoint in the API) [see `PR #2202 `_]
* New ``GET /api/v3_0/sources`` endpoint to list accessible data sources and defined types, with ``only_latest=true`` by default to return only the most recent version per source [see `PR #2126 `_]
* Add support for filtering sensor data GET requests by ``source-type`` on ``/api/v3_0/sensors//data`` [see `PR #2127 `_]
* Making monitoring alerts more flexible: allow ``flexmeasures monitor`` alerts to target one or more user IDs or email addresses with ``--recipient``; ``flexmeasures monitor last-seen`` can now narrow monitored users to one or more accounts with ``--account`` or to client accounts with ``--consultancy`` [see `PR #2158 `_]
* Improve LightGBM daily seasonal lag handling for sub-hourly forecasting sensors [see `PR #2157 `_]
Infrastructure / Support
----------------------
* Move sensor data ingestion to a job queue for improved performance when POSTing large amounts of data to the sensor data API, returning a ``202 Accepted`` response with a job status URL when queued [see `PR #2101 `_ and `PR #2207 `_]
* Remove legacy rolling viewpoint forecasting code and utilities after migrating to fixed-point forecasting [see `PR #2082 `_]
* Upgraded dependencies [see `PR #2114 `_, `PR #2148 `_, `PR #2161 `_ and `PR #2177 `_]
* Let RQ Dashboard job page load even when job data includes non-JSON-serializable values [see `PR #2200 `_]
* Run ``flexmeasures jobs run-worker`` with RQ's embedded scheduler on by default so jobs created with ``enqueue_in`` are promoted from the scheduled registry when due; pass ``--without-scheduler`` to disable [see `PR #2112 `_]
* Support filtering time series data by data source account [`PR #2065 `_]
* Speed up finding the data sources associated with a sensor and the sensors associated with a data source [`PR #2151 `_]
* Speed up sensor stats, especially potent when viewing sensors stats over a large sensor history [`PR #2173 `_]
* Various smaller fixes in documenting scheduling endpoints and flex-model fields [`PR #2122 `_]
* Add cross-cutting Copilot instruction files to ``.github/instructions/`` covering atomic commits, changelog format, docstrings, error handling, Marshmallow schemas, pre-commit hooks, testing, timezone awareness, and UI terminology [see `PR #2198 `_]
Bugfixes
-----------
* Fix forecasting covariate assembly to retain the latest known value per regressor when regressors have different belief times for the same event [see `PR #2155 `_]
* Fix ``StorageScheduler`` crash (``AttributeError: 'NoneType' object has no attribute 'event_resolution'``) when scheduling a site whose asset tree contains non-storage devices with only a ``power-capacity`` in their ``flex-model`` (no ``sensor`` key) [see `PR #2085 `_]
* Fix DST transition handling by supporting both native Python ``datetime`` and pandas ``Timestamp`` objects in time series segment processing, preventing ``AttributeError`` when processing segments with differing UTC offsets [see `PR #2197 `_]
* Fix forecasting regressor filtering to use only regressor beliefs known at the forecast ``belief_time`` [see `PR #2134 `_]
* Make the sensor page forecast button train from available sensor history instead of the default 30-day window [see `PR #2187 `_]
* Check read permissions for sensors referenced in forecasting and scheduling config payloads, and return a clearer 403 error when a referenced sensor is not readable [see `PR #2096 `_ and `PR #2125 `_]
* Add the missing ``force-new-job-creation`` field for triggering a schedule on an asset (tree) [see `PR #2182 `_]
* Clean up stale sensor references from ``flex-config`` and ``sensors_to_show`` when deleting a sensor, using JSONB queries to find affected assets before pruning those references [see `PR #2106 `_]
* Standardize resolution formatting across API endpoints for consistent response payloads [see `PR #2152 `_]
* Make the auth check for CLI commands work with ``flask``, too, instead of only with the ``flexmeasures`` alias [see `PR #2169 `_]
* Fix ``flexmeasures show asset`` for assets whose ``sensors_to_show`` uses the standardized ``plots`` schema [see `PR #2189 `_]
* Distinguish data sources with duplicate names in chart legends without showing source IDs [see `PR #2185 `_]
* Fix broken API endpoint links in Read the Docs output by post-processing both known API index layouts and rewriting ``(id)`` anchors [see `PR #1753 `_]
* Wrap Darts training ``ValueError`` about no common feature times as a clearer ``NotEnoughDataException`` when there is insufficient history for the requested forecast horizon [see `PR #2192 `_]
* Make Sentry also ignore 404 events, if we only log them without exc_info [`PR #2212 `_]
v0.32.3 | May 15, 2026
============================
Bugfixes
-----------
* Fix account UI page exposing details to users from other accounts; any logged-in user could previously view the page and see account attributes (introduced in v0.32.0), but no user/asset/sensor details [see `PR #2163 `_]
* Fix auth on asset creation: regular users can now create child assets (the permission check now targets the parent asset, not the current user's account), and account-admins can no longer nest assets under parents from other accounts [see `PR #2163 `_]
* Fix off-by-one error on sensor data deletion (button on the sensor page), which lead to not deleting the last data point in the selected time window [see `PR #2175 `_]
* Prevent JSON parsing failures when updating an asset's flex-config [see `PR #2162 `_]
v0.32.2 | May 12, 2026
============================
Bugfixes
-----------
* Fix removal of unchanged beliefs when saving data [see `PR #2159 `_]
* Fix soc-fields set to fixed quantities [see `PR #2160 `_]
* Fix disappearing plots on asset graphs during playback [see `PR #2147 `_]
v0.32.1 | May 5, 2026
============================
Bugfixes
-----------
* Fix account attribute saving via the API for accounts that have a consultancy account set; the PATCH endpoint no longer incorrectly rejects requests that do not include ``consultancy_account_id`` in the body [see `PR #2140 `_]
* Make the sensor page load much faster for sensors with lots of data, by avoiding to load statistics over all of its history by default [see `PR #2129 `_]
* Return a clear validation error (instead of a server ZeroDivisionError) when posting instantaneous (0-minute) data to non-instantaneous sensors via ``[POST] /sensors/(id)/data`` [see `PR #2116 `_]
* Fix asset form overwriting attributes [see `PR #2138 `_]
* Fix a bug where toast messages in flex-config modal are broken due to unexpected JSON structure [see `PR #2124 `_]
* Fix asset context page for asset names containing apostrophes [see `PR #2117 `_]
* Fix removal of unchanged beliefs by comparing per event [see `PR #2150 `_]
v0.32.0 | April 15, 2026
============================
.. note:: Read more on these features on `the FlexMeasures blog `_.
.. warning:: Upgrading to this version requires running ``flexmeasures db upgrade`` (you can create a backup first with ``flexmeasures db-ops dump``).
New features
-------------
* Upgrade graph modal to support flex-config references in plots [see `PR #1926 `_ and `PR #1904 `_]
* Add a button to create forecasts from the sensor page, visible to users with permission to record data on the sensor, and enabled when at least two days of data are present [see `PR #1985 `_]
* Button on sensor page to delete data (by date range and source) [see `PR #2095 `_]
* Support inferring ``soc-at-start`` from configured ``state-of-charge`` sources and fail early when those values are stale or missing near schedule start [see `PR #2026 `_]
* UI support for editing JSON attributes on sensors, assets and accounts [see `PR #2093 `_]
* Support fetching a schedule in a different unit still compatible to the sensor unit [see `PR #1993 `_]
* Support saving state-of-charge schedules to sensors with ``"%"`` unit, using the ``soc-max`` flex-model field as the capacity for unit conversion [see `PR #1996 `_]
* Version headers (for server and API) in API responses [see `PR #2021 `_]
* Support forecasting from a given time in the past, by allowing to specify a ``prior`` belief time in the forecasting API endpoint (as already possible with CLI command) [see `PR #1978 `_]
* Show sensor attributes on sensor page, if not empty [see `PR #2015 `_]
* Separate the ``StorageScheduler``'s tie-breaking preference for a full :abbr:`SoC (state of charge)` from its reported energy costs [see `PR #2023 `_ and `PR #2108 `_]
* Improve asset graph hover interaction with a vertical ruler across subcharts, while keeping hover dots for easier visual tracking [see `PR #2079 `_]
* Improve asset audit log messages for JSON field edits (especially ``sensors_to_show`` and nested flex-config values) [see `PR #2055 `_]
Infrastructure / Support
----------------------
* Support coupling data sources to accounts, and preserve user ID and account ID references in audit logs and data sources for traceability and compliance [see `PR #2058 `_]
* Stop creating new toy assets when restarting the docker-compose stack [see `PR #2018 `_]
* Migrate from ``pip`` to ``uv`` for dependency management, and from ``make`` to ``poe`` [see `PR #1973 `_]
* Improve contact information to get in touch with the FlexMeasures community [see `PR #2022 `_]
* Expand audit logging for password life-cycle: password_reset, password_changed and reset_password_instructions_sent events [see `PR #2036 `_]
* Upgraded some dependencies for security reasons [see `PR #2037 `_]
* Remove unused ``dictdiffer`` dependency after replacing JSON audit-diff logic with internal formatting utilities [see `PR #2055 `_]
* Upgraded dependencies, including sphinx from v8 to v9 [see `PR #2061 `_]
* Improve error logging for various exceptions [see `PR #2045 `_]
* Update agent instructions and workflows to customize the primary entry point and to make the test environment used by agents and by the test workflow identical [see `PR #2066 `_, `PR #1998 `_ and `PR #2068 `_]
* Filter out 404 (Not Found) errors from Sentry reports by default, configurable via ``FLEXMEASURES_DO_NOT_SEND_NOTFOUND_TO_SENTRY`` [see `PR #2071 `_]
* Document scripting with the client and in the CLI [see `PR #2097 `_]
* Document fallback schedule mechanism: explain how 303 (See Other) redirects work for infeasible schedules, with a client-side code example [see `PR #2107 `_]
Bugfixes
-----------
* Fix the Swagger endpoint for fetching a schedule [see `PR #2109 `_]
v0.31.3 | April 11, 2026
============================
Bugfixes
-----------
* Fix regression in upsampling speed [see `PR #2060 `_]
* Fix forecasting with multiple regressors in ``flexmeasures add forecasts`` by combining regressor time series as parallel components [see `PR #2088 `_]
* Fix a bug where ``save_to_db`` could silently drop a changed belief when the prior beliefs in the database happened to be ordered by descending belief time [see `PR #2086 `_]
* Prevent ``save_to_db`` from failing on saving duplicate beliefs in case ``FLEXMEASURES_ALLOW_DATA_OVERWRITE = False`` [see `PR #2059 `_ and `PR #2098 `_]
* Fix :abbr:`DST (Daylight Saving Time)` bug in processing time series segments [see `PR #2069 `_]
v0.31.2 | March 18, 2026
============================
Bugfixes
-----------
* Fix bug with resampling time series of e.g. SoC minima with different belief times for adjacent time slots [see `PR #2012 `_]
* Fix an issue where asset context was accessed in schemas that do not define a ``context`` attribute [see `PR #2014 `_]
* Fix wrap-up forecasting job [see `PR #2011 `_]
* Stop failure in the API endpoint that lists available endpoints (/api/v3_0/) [see `PR #2032 `_]
Infrastructure / Support
------------------------
* Re-add bcrypt dependency [see `PR #2029 `_]
v0.31.1 | March 6, 2026
============================
Bugfixes
-----------
* Fix CLI command ``flexmeasures add forecasts`` [see `PR #2007 `_]
* Add missing field documentation for ``aggregate-power`` and ``state-of-charge`` fields, which can be used to reference a sensor on which to record extra scheduling results [see `PR #2003 `_ and `PR #2006 `_]
v0.31.0 | February 28, 2026
============================
.. note:: Read more on these features on `the FlexMeasures blog `_.
.. warning:: As of this version, power schedules will no longer appear flipped (in UI charts) when they are recorded on *consumption* sensors.
Please note that:
- Schedules obtained via the dedicated API endpoints for scheduling are not affected by this change!
- The ``consumption_is_positive`` sensor attribute governs the sign of schedules saved to the database.
The sign convention of UI charts is to simply match what is in the database.
- If you inadvertently make use of the `sensor data API endpoint `_ to fetch *schedules*,
or have reporters that compute reports on *schedules*, rather than on *measurements*, be advised that you may experience flipped results.
You may need to adjust your client-side code or reporter configuration accordingly.
(Updating a reporter configuration automatically leads to a fresh data source for the saved time series.)
- Finally, if you maintain a plugin with a custom ``Scheduler`` class that returns time series to be saved on power sensors, we recommend incrementing the version of the ``Scheduler`` class.
This will yield a fresh data source for new schedules and allow you to discriminate your flipped schedules, which, for instance, will make it easier to flip back the historical schedules if you later want to.
.. warning:: Upgrading to this version requires running ``flexmeasures db upgrade`` (you can create a backup first with ``flexmeasures db-ops dump``).
New features
-------------
* New API endpoints to create annotations for accounts, assets, and sensors: `[POST] /annotations/accounts/(id) `_, `[POST] /annotations/assets/(id) `_ and `[POST] /annotations/sensors/(id) `_ [see `PR #1968 `_]
* New forecasting API endpoints, and all timing parameters in forecasting CLI got sensible defaults for ease of use `[POST] /sensors/(id)/forecasts/trigger `_ and `[GET] /sensors/(id)/forecasts/(uuid) `_ to forecast sensor data [see `PR #1813 `_, `PR #1823 `_, `PR #1917 `_ and `PR #1982 `_]
* Improve CSV upload validation by inferring the intended base resolution even when data contains valid gaps, instead of requiring perfectly regular timestamps [see `PR #1918 `_]
* Support setting a resolution when triggering a schedule via the API or CLI [see `PR #1857 `_]
* Support variable peak pricing and changes in commitment baselines [see `PR #1835 `_]
* Support storing the aggregate power schedule [see `PR #1736 `_]
* Make listing public assets on account page optional [see `PR #1872 `_]
* Step-by-step replay in the UI, using the **n** key to go to the **n**\ ext time step [see `PR #1898 `_]
* Support changing a sensor's timezone in the UI [see `PR #1900 `_]
* Improved the UX for creating sensors, clicking on ``Enter`` now validates and creates a sensor [see `PR #1876 `_]
* Show zero values in bar charts even though they have 0 area [see `PR #1932 `_ and `PR #1936 `_]
* Added ``root`` and ``depth`` fields to the `[GET] /assets` endpoint for listing assets, to allow selecting descendants of a given root asset up to a given depth [see `PR #1874 `_]
* Support creating schedules with only information known prior to some time, now also via the CLI (the API already supported it) [see `PR #1871 `_]
* Added capability to update an asset's parent from the UI [`PR #1957 `_]
* Add ``fields`` param to the asset-listing endpoints, to save bandwidth in response data [see `PR #1884 `_]
.. note:: For backwards-compatibility, the new ``fields`` parameter will only be fully active, i.e. also returning less fields per default, in v0.32. Set ``FLEXMEASURES_API_SUNSET_ACTIVE=True`` to test the full effect now.
* Allow testing out the scheduling CLI without saving anything, using ``flexmeasures add schedule --dry-run`` [see `PR #1892 `_]
* Allow unsupported ``flex-context`` or ``flex-model`` fields to be shown in the UI editors (they will be un-editable) [see `PR #1915 `_]
* Add back save buttons to both ``flex-context`` and ``flex-model`` UI editors [see `PR #1916 `_]
* Add a documentation section on the concept of ``Commitments`` [see `PR #1849 `_]
* Add resolution column to sensors list on asset context page [see `PR #1986 `_]
Infrastructure / Support
----------------------
* Upgraded dependencies [see `PR #1847 `_]
* End support for Python3.9 [see `PR #1965 `_]
* Improve general description on SwaggerDocs page and add three settings for hosts: FLEXMEASURES_SUPPORT_PAGE, FLEXMEASURES_SIGNUP_PAGE and FLEXMEASURES_TOS_PAGE [see `PR #1851 `_ and `PR #1889 `_]
* Allow plugins to register forecasters [see `PR #1863 `_]
* Support setting a ``custom-scheduler`` by name [see `PR #1924 `_]
* Allow plugin schedulers to skip saving any sensor data, while still making their results retrievable [see `PR #1933 `_]
* Migrated JSON fields to JSONB, so they can be used to look up sensors, attributes, sources [see `PR #1867 `_]
* Use ``flexmeasures jobs stats`` to show statistics of the job queueing system [see `PR #1838 `_]
* Less verbose error logs given common HTTP requests such as those leading to 404 (Not Found) responses [see `PR #1883 `_]
* Refactor base.html template from 1500 to ~300 lines [see `PR #1868 `_]
* 2FA UX: Hide rescue form by default & improve main message [see `PR #1875 `_]
* Add extra security layer to check for breached passwords [see `PR #1919 `_]
* Support and document data container in docker compose stack better [see `PR #1790 `_]
* Improve reported test coverage by including doctests and bringing back CLI tests to GitHub Actions [see `PR #1914 `_ and `PR #778 `_, respectively]
* Add DEFAULT_DATASOURCE_TYPES and use it in CLI and status page [see `PR #1938 `_]
* Fix README badges [see `PR #1913 `_]
* Allow seeing complete datetimes in the audit log [see `PR #1949 `_]
* Add latest dependabot alert suggestions [see `PR #1959 `_]
* Add standardized GitHub Copilot agent environment setup file for consistent development environment across agent sessions [see `PR #1962 `_, `PR #1963 `_ and `PR #1964 `_]
Bugfixes
-----------
* Fix: schedules are no longer saved upside down [see `PR #1348 `_]
* Fix: visiting the job page for any forecasting job led to a server error ("Object of type datetime is not JSON serializable"), by storing serialized kwargs in forecasting job meta [see `PR #1990 `_]
* Fix: flex-context dialogue is empty when flex-context has two booleans with the same value [see `PR #1907 `_]
* Bring back the ability to show (timed) annotations on the sensor page, and add some color highlighting, too, while we're at it [see `PR #1967 `_]
* Fixed toast notification display on the sensor detail upload form [see `PR #1921 `_]
* Fix: return validation errors instead of database errors for API/CLI fields that map to database objects [see `PR #1923 `_]
* Correct field documentation for flex-config fields that strictly allow sensor references [see `PR #1951 `_]
* Have the ``StorageScheduler`` correctly combine multiple sessions targeting the same sensor [see `PR #1948 `_]
* Mutate job state when running ``flexmeasures jobs run-job `` [see `PR #1929 `_ and `PR #1930 `_]
* Prevent inplace operation when using ``simplify_index`` [see `PR #1931 `_]
* Fix API tests failing with 401 UNAUTHORIZED when run in isolation by properly setting Flask-Security's ``fs_authn_via`` attribute in the ``requesting_user`` fixture [see `PR #1960 `_]
* Fix ReadTheDocs build pipeline [see `PR #1972 `_]
v0.30.3 | January 12, 2026
============================
Bugfixes
-----------
* Fix graphs & KPI data failing to load when daily KPIs are configured for the asset [see `PR #1909 `_]
* Fix ``delete-beliefs`` CLI command to correctly apply the ``--source`` filter when deleting beliefs, preventing unintended removal of beliefs from other sources [see `PR #1903 `_]
* Fix concatenation of DataFrames with mixed-order index level when dropping unchanged beliefs, which could cause saving data to fail in rare cases of running ``flexmeasures add report`` [see `PR #1905 `_]
v0.30.2 | January 6, 2026
============================
Bugfixes
-----------
* Make ``soc-usage`` & ``soc-gain`` fields editable again in the UI [see `PR #1860 `_]
* New sensors created through the API and UI get the server timezone rather than :abbr:`UTC (Coordinated Universal Time)` [see `PR #1894 `_]
* Correctly derive the shared unit in charts showing multiple temperature sensors [see `PR #1890 `_]
* Prevent duplicate forecasts from being saved when re-running the forecasting pipeline within the same resolution window by preserving the non-floored ``belief_time`` using a new ``save_belief_time`` field [see `PR #1853 `_]
* Keep around finished forecasting jobs just as long as finished scheduling jobs (configurable through the ``FLEXMEASURES_PLANNING_TTL`` config setting) [see `PR #1870 `_]
v0.30.1 | December 9, 2025
============================
Bugfixes
-----------
* Greatly reduce the number of various deprecation warnings when dealing with time series data [see `PR #1858 `_]
v0.30.0 | December 2, 2025
============================
.. note:: Read more on these features on `the FlexMeasures blog `_.
.. warning:: If you make use of ``flexmeasures add report`` with the ``--start-offset`` and/or ``--end-offset`` options (for instance, in a cron job), please check whether the report period logged by the CLI command still fits your use case.
Your offsets may need to be adjusted in relation to your ``FLEXMEASURES_TIMEZONE`` config setting (its offset with respect to :abbr:`UTC (Coordinated Universal Time)`).
.. warning:: Upgrading to this version requires running ``flexmeasures db upgrade`` (you can create a backup first with ``flexmeasures db-ops dump``) and ``flexmeasures add initial-structure``.
New features
-------------
* Improve ``flexmeasures add forecasts`` CLI command with clearer success and error messages when creating jobs or beliefs [see `PR #1822 `_]
* Major overhaul of ``flexmeasures add forecasts`` (use the ``--help`` option to learn more) [see `PR #1546 `_, `PR #1744 `_ and `PR #1834 `_]
* The new ``commitments`` field in the ``flex-context`` can be used to specify previous commitments (e.g. market positions) that the scheduler needs to take into account [see `PR #1754 `_ and `PR #1793 `_]
* Many more field descriptions in Swagger, including flex-model and flex-context fields [see `PR #1777 `_ and `PR #1841 `_]
* Maps auto-zoom to cover the asset portfolio visible to the user, with fresh users prompted to pan to their own location when adding their first asset [see `PR #1644 `_]
* Sticky replay button for asset and sensor pages [see `PR #1739 `_]
* The ``flexmeasures delete beliefs``, ``flexmeasures delete nan-beliefs`` and ``flexmeasures delete unchanged-beliefs`` CLI commands now support limiting the action to a given set of data sources [see `PR #1770 `_]
* Let consultants see client assets on dashboard and group by account [see `PR #1763 `_]
* More explicitly represent the unit of sensors that record dimensionless data [see `PR #1802 `_]
* Allow modifying asset trees with the CLI using ``flexmeasures edit transfer-parenthood`` [see `PR #1773 `_]
* Expanded the sorting columns of "latest jobs" table [see `PR #1821 `_]
* Let users specify the unit, which uploaded data is based on [see `PR #1836 `_]
* Allow to keep legend combined below graphs, even with many plots (useful on narrow screens) [see `PR #1816 `_]
Infrastructure / Support
----------------------
* Upgraded dependencies [see `PR #1752 `_, `PR #1820 `_ and `PR #1842 `_]
* Speed up data searches by refactoring our filter for selecting data from the latest version of a data generating model [see `PR #1698 `_]
* Add new tutorial for PV curtailment and multi-asset scheduling [see `PR #1804 `_ and `PR #1846 `_]
* Drop need for .env file in favour of more adaptation of flexmeasures.cfg config file [see `PR #1759 `_]
* Support saving beliefs with a ``belief_horizon`` in the ``AggregatorReporter`` [see `PR #1735 `_]
* Support skipping a ``PandasReporter`` transformation if any of its (keyword) arguments has no data [see `PR #1669 `_]
* Assets now have an `external_id` field so data from external sources can be linked to the right FlexMeasures asset in custom integrations [see `PR #1774 `_ and `PR #1806 `_]
* Save buttons in UI editors (flex-model, flex-context and data dashboards) [see `PR #1764 `_]
* Improve performance of the endpoint profiler and support configuration using the new ``FLEXMEASURES_PROFILER_CONFIG`` setting [see `PR #1799 `_]
* Use ``SimpleWorker`` instead of fork-based ``Worker`` on macOS to prevent segmentation faults when running ``flexmeasures jobs run-worker`` for development purposes on macOS [see `PR #1818 `_]
* Move flex model UI schema to server side [see `PR #1830 `_]
* Fewer version details in OpenAPI specs, to make pre-commit step complain less [see `PR #1845 `_]
Bugfixes
-----------
* Fix unit conversion when scheduling a storage asset that deals with power sensors recording data in kWh units [see `PR #1784 `_]
* Fix interpretation of ``--start-offset`` and ``--end-offset`` options in ``flexmeasures add report`` [see `PR #1758 `_]
* Let users search for flex context sensors on whole site tree again [see `PR #1826 `_]
* Fix unintended date range hopping, a UI bug where date ranges set in URL parameters would be overridden by the user's previously selected date range (a session variable) [see `PR #1821 `_]
* Fix off-center map markers [see `PR #1840 `_]
* Resolved a crash in the "latest jobs" table when sorting was applied, and corrected a typo in the Jobs API Swagger UI documentation [see `PR #1821 `_]
* Enhance dates on UI(sensor page) to be human friendly when representing future dates [see `PR #1832 `_]
* Fix spinner not disappearing on the asset graph page [see `PR #1831 `_]
* Fix links to API endpoint docs in Sphinx documentation [see `PR #1843 `_]
v0.29.1 | November 5, 2025
============================
Bugfixes
-----------
* Support different but still compatible units in time series segments of variable quantities [see `PR #1792 `_]
* Fix account and `/assets/owned_by` pages rendering, giving them asset icons [see `PR #1772 `_]
* Fix bug when sending one sensor in flex-model when triggering schedule on asset [see `PR #1795 `_]
* Allow consultants to view client users [see `PR #1755 `_]
* Fix bug where removed flex-model fields don't show up under the dropdown for new fields, except after a page refresh [see `PR #1775 `_]
* Fix bug in displaying user audit log (incl. expanding its API schema) [see `PR #1779 `_]
* Support flex-context prices with SI-prefixed currencies (e.g. kEUR) [see `PR #1844 `_]
v0.29.0 | October 14, 2025
============================
.. note:: Read more on these features on `the FlexMeasures blog `_.
.. warning:: Upgrading to this version requires running ``flexmeasures db upgrade`` (you can create a backup first with ``flexmeasures db-ops dump``).
New features
-------------
* Added a UI editor (form modal) to edit an asset's flex-model [see `PR #1429 `_ and `PR #1565 `_]
* New CLI command for scheduling, with full flex-context and flex-model support as well as the option to set your scheduler class [see `PR #1713 `_]
* Full coverage of flex-context fields in the UI editor [see `PR #1689 `_]
* Touch up the KPI cards [see `PR #1731 `_]
* Touch up asset context page [see `PR #1732 `_]
* Allow ``PandasReporter`` configurations to skip a transformation in case any of the transformation ``args`` or ``kwargs`` is missing all data [see `PR #1717 `_]
* The ``flexmeasures delete unchanged-beliefs`` CLI command now supports limiting the action to a given period [see `PR #1720 `_]
Infrastructure / Support
----------------------
* Migrate data for the ``flex-model`` of an asset to a dedicated column in the database table for assets [see `PR #1429 `_]
* Updated dependencies [see `PR #1707 `_]
* Upgraded Docker Image Ubuntu 24, which uses Python 3.12 [see `PR #1723 `_]
* Include finished and canceled jobs in the overview printed by the CLI command ``flexmeasures jobs show-queues`` [see `PR #1712 `_]
* Improved flex-context modal UI and UI-backend functionalities&structure [see `PR #1704 `_]
* Removed the use of ``consumption_price_sensor`` from the ``ProcessScheduler`` and replaced with now mandatory ``consumption_price`` in the ``flex-context`` [see `PR #1729 `_]
* Removed obsolete UI view [see `PR #1743 `_]
Bugfixes
-----------
* Changed 422 response for asset PATCH endpoint to the format also used elsewhere [see `PR #1722 `_]
* Fix UI flex-context editor for flex-contexts with boolean fields (that were set through the API) [see `PR #1733 `_]
* Fix floating spinner on asset graphs page [see `PR #1738 `_]
* Make monitoring tasks & users robust against db issues [see `PR #1715 `_]
v0.28.2 | October 3, 2025
============================
Bugfixes
-----------
* Fix horizons in UI chart tooltips [see `PR #1730 `_]
* Fix UI chart for Charge Point sessions [see `PR #1699 `_]
* Fix two audit logs in the sensor API, which were not committed to db [see `PR #1721 `_]
v0.28.1 | September 18, 2025
============================
Bugfixes
-----------
* Fix schema validation in ``PATCH /assets/(id)`` [see `PR #1711 `_]
* Fixed example values for peak pricing and improved error message for incompatible price units set in the ``flex-context`` [see `PR #1710