# Release notes Curated summaries of selected releases. Every tagged change is in the [changelog](../CHANGELOG.md). ## Contents - [1.5.0](#whats-new-in-150) - [1.1.0](#whats-new-in-110) - [1.0.0](#whats-new-in-100) - [0.6.0](#whats-new-in-060) ## What's new in 1.5.0 - **Volatility for every instrument type.** Stocks and funds now show the 1-year volatility computed from daily closes, with source and date in the detail area. ETFs keep justETF's value when it has one. - **Fund size is always in millions.** Values from justETF are in EUR; values you enter by hand keep the currency you entered. - **New storage layer on SQLModel.** Existing databases are read unchanged; a comparison against a copy of a real database found no differences. - `GET /fx` reports the source's own timestamp in `quote_time` where the source provides one, for example `as_of` in a YAML file. Yahoo has none; there `quote_time` stays the fetch time. - A mistyped ISIN such as `DE000110253X` is rejected with `400` and `code: invalid_isin_format` instead of being looked up as a symbol. [↑ Contents](#contents) ## What's new in 1.1.0 - `GET /instrument-types` lists the asset types declared by the configured plugins, including source status and whether the catalog is complete. - `GET /fields` describes core and plugin fields in English, independently of the dashboard language or `Accept-Language`. - The dashboard development proxy also forwards `/instrument-types`. [↑ Contents](#contents) ## What's new in 1.0.0 - Version 1.0.0 introduced AGPL-3.0-or-later for the application and offered separate commercial terms. This is historical; the current license is [EUPL 1.2 only](../LICENSING.md). The independent plugin API remains under [MIT](../plugin_api/LICENSE). - `make build` includes and checks the license texts in the Docker image. `make push` accepts only the checked image from the current source commit. - The Docker source-profile command writes to the named volume used by `make up`, including before the first container start. [↑ Contents](#contents) ## What's new in 0.6.0 - **All eight ETF metrics are maintainable by hand** — provider, replication, fund size, fund domicile and fund currency join TER, volatility and accumulating. Maintained in an expandable detail area per row, not in the table cell. ![Detail area](../unraid/screenshots/detail-area.png) - **Stored metrics survive an outage.** A failed justETF request no longer wipes what was already there — "asked and empty" is now distinguishable from "could not ask". `METADATA_TTL_DAYS` finally does what it always claimed: justETF is scraped once per cycle instead of on every quote. - **Merging duplicate instruments no longer loses data.** Manual values and the daily-sync watermark move to the surviving row instead of being cascaded away. - **Three probes, three questions.** `/health` stays cheap (is the process alive?), `/ready` actually touches the database (is normal operation released?), and the new `/operational` answers what the Docker healthcheck needs (can the process do its current job?). A pending migration is not a fault — `/ready` says `503`, `/operational` stays `200`. - **The identity migration is a mandatory, two-phase flow.** On startup the service works out what a migration would cost, blocks every business route and shows the list; only an explicit confirmation runs it. Instruments whose symbol cannot be split into ticker and exchange leave the portfolio and are named in the report instead of being guessed. - **Stricter API contract** — symbols and time ranges are validated (`422` instead of a wrong result), and an unresolvable ISIN answers `404` instead of `502`. [↑ Contents](#contents)