diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 816df2d5..04779995 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.3.1" + ".": "0.3.2" } diff --git a/CHANGELOG.md b/CHANGELOG.md index e444022a..7e588cf1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,118 @@ # Changelog +## v0.3.2 - 2026-09 + +### Description + +A consolidation release after the production cutover. It repairs the interface and +deployment faults that the first weeks of real use surfaced, cuts upload and page-load +latency, and makes the release and backup paths fail loudly instead of quietly. + +### Features + +- A "?" overlay lists the app's keyboard shortcuts ([#219]) +- The lightbox serves a 2560px tier, and product lists serve real thumbnails rather than + full-size originals ([#268], [#222]) +- A theme-adaptive favicon on web ([#208]) +- Deploys run as a dedicated user over a restricted key, with a no-cache rebuild + available when one is needed ([#201], [#203], [#204], [#210]) + +### Fixes + +- Two concurrent edits to the same product no longer lose one of the saves ([#264]) +- Deleting a product that has components succeeds ([#217]) +- Product detail returns to the list it was opened from ([#209]) +- Registration failure, search, support-contact, and accessibility copy say what is + actually true ([#207], [#218]) +- One `h1` per page, labels on the last unlabelled controls, and a focus ring that no + longer outlines the whole page column, each held in place by a lint rule ([#223], + [#225], [#226], [#233]) +- Photographs stay out of Smart Invert ([#230]) +- Web layout regressions found after the cutover ([#200], [#221], [#247]) +- The migration that moves `pg_trgm` stops cleanly when a superuser owns the extension + ([#215]) +- Background work after an upload runs on the paths it was meant to ([#261]) +- Backups guard the uploads volume against silent data loss and rebuild before stamping + ([#269], [#271]) +- Deploy and release failures are loud: an unreadable `.env`, timers rendered as root, + and compose run by hand under the wrong stack identity ([#199], [#238], [#246], + [#249], [#260]) +- The backup watchdog parses restic's Z-suffixed timestamps on the system Python, and + says why a git probe failed instead of only that it did ([#272]) + +### Security + +- Addresses stay out of the logs, and the edge exemption for automated runs is narrowed + to the hosts and routes that need it ([#262]) +- The tunnel container drops its capabilities ([#254]) +- The app serves a Content-Security-Policy header ([#202]) +- Cloudflare applies are gated on the plan they apply ([#257]) + +### Performance + +- Uploads answer before the wide thumbnails are derived, and transactional email no + longer blocks the response ([#239]) +- The web export has a first-load JavaScript budget, checked on every run ([#243]) +- Smaller runtime images and build contexts, with Metro cached across builds ([#224], + [#228], [#236]) +- A k6 baseline and an upload benchmark across a spread of photo sizes ([#237], [#241]) + +### Maintenance + +- CORS preflights carry the staging edge key and pass the edge's bot protections + ([#206], [#214], [#216]) +- E2E runs never reuse a leftover preview server ([#227], [#229]) +- CodeQL suppressions use the comment form it honors ([#251]) + +[#199]: https://github.com/CMLPlatform/relab/pull/199 +[#200]: https://github.com/CMLPlatform/relab/pull/200 +[#201]: https://github.com/CMLPlatform/relab/pull/201 +[#202]: https://github.com/CMLPlatform/relab/pull/202 +[#203]: https://github.com/CMLPlatform/relab/pull/203 +[#204]: https://github.com/CMLPlatform/relab/pull/204 +[#206]: https://github.com/CMLPlatform/relab/pull/206 +[#207]: https://github.com/CMLPlatform/relab/pull/207 +[#208]: https://github.com/CMLPlatform/relab/pull/208 +[#209]: https://github.com/CMLPlatform/relab/pull/209 +[#210]: https://github.com/CMLPlatform/relab/pull/210 +[#214]: https://github.com/CMLPlatform/relab/pull/214 +[#215]: https://github.com/CMLPlatform/relab/pull/215 +[#216]: https://github.com/CMLPlatform/relab/pull/216 +[#217]: https://github.com/CMLPlatform/relab/pull/217 +[#218]: https://github.com/CMLPlatform/relab/pull/218 +[#219]: https://github.com/CMLPlatform/relab/pull/219 +[#221]: https://github.com/CMLPlatform/relab/pull/221 +[#222]: https://github.com/CMLPlatform/relab/pull/222 +[#223]: https://github.com/CMLPlatform/relab/pull/223 +[#224]: https://github.com/CMLPlatform/relab/pull/224 +[#225]: https://github.com/CMLPlatform/relab/pull/225 +[#226]: https://github.com/CMLPlatform/relab/pull/226 +[#227]: https://github.com/CMLPlatform/relab/pull/227 +[#228]: https://github.com/CMLPlatform/relab/pull/228 +[#229]: https://github.com/CMLPlatform/relab/pull/229 +[#230]: https://github.com/CMLPlatform/relab/pull/230 +[#233]: https://github.com/CMLPlatform/relab/pull/233 +[#236]: https://github.com/CMLPlatform/relab/pull/236 +[#237]: https://github.com/CMLPlatform/relab/pull/237 +[#238]: https://github.com/CMLPlatform/relab/pull/238 +[#239]: https://github.com/CMLPlatform/relab/pull/239 +[#241]: https://github.com/CMLPlatform/relab/pull/241 +[#243]: https://github.com/CMLPlatform/relab/pull/243 +[#246]: https://github.com/CMLPlatform/relab/pull/246 +[#247]: https://github.com/CMLPlatform/relab/pull/247 +[#249]: https://github.com/CMLPlatform/relab/pull/249 +[#251]: https://github.com/CMLPlatform/relab/pull/251 +[#254]: https://github.com/CMLPlatform/relab/pull/254 +[#257]: https://github.com/CMLPlatform/relab/pull/257 +[#260]: https://github.com/CMLPlatform/relab/pull/260 +[#261]: https://github.com/CMLPlatform/relab/pull/261 +[#262]: https://github.com/CMLPlatform/relab/pull/262 +[#264]: https://github.com/CMLPlatform/relab/pull/264 +[#268]: https://github.com/CMLPlatform/relab/pull/268 +[#269]: https://github.com/CMLPlatform/relab/pull/269 +[#271]: https://github.com/CMLPlatform/relab/pull/271 +[#272]: https://github.com/CMLPlatform/relab/pull/272 + ## v0.3.1 - 2026-09 ### Description diff --git a/CITATION.cff b/CITATION.cff index c1c572fd..e9c862f9 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -14,14 +14,14 @@ authors: affiliation: "Department of Industrial Ecology, Institute of Environmental Sciences (CML), Leiden University" title: "Relab - Data Collection Platform" abstract: "Data collection platform for disassembled power tool images and metadata supporting computer vision tasks for life cycle assessments." -version: 0.3.1 # x-release-please-version +version: 0.3.2 # x-release-please-version identifiers: # The concept DOI always resolves to the newest release, which is what a "cite this # software" identifier should do. Version DOIs live on the Zenodo concept record. - type: doi value: 10.5281/zenodo.16637742 description: Concept DOI for all versions of Relab -date-released: 2026-09-08 # x-release-please-date +date-released: 2026-09-10 # x-release-please-date url: https://cml-relab.org repository-code: "https://github.com/CMLPlatform/relab" license: "AGPL-3.0-or-later" diff --git a/app/app.json b/app/app.json index 3e932414..1d6fa61f 100644 --- a/app/app.json +++ b/app/app.json @@ -2,7 +2,7 @@ "expo": { "name": "relab-app", "slug": "relab-app", - "version": "0.3.1", + "version": "0.3.2", "orientation": "portrait", "icon": "./src/assets/images/favicon.png", "scheme": "relab-app", diff --git a/app/package.json b/app/package.json index de504951..7984cd54 100644 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "relab-app", "main": "expo-router/entry", - "version": "0.3.1", + "version": "0.3.2", "license": "AGPL-3.0-or-later", "scripts": { "dev": "[ \"$(uname)\" = Linux ] && export ELECTRON_DISABLE_SANDBOX=1; BROWSER=none expo start --web --port 8011", diff --git a/backend/app/__version__.py b/backend/app/__version__.py index 584b1a43..ed534166 100644 --- a/backend/app/__version__.py +++ b/backend/app/__version__.py @@ -1,3 +1,3 @@ """For versioning the FastAPI app.""" -version = "0.3.1" # x-release-please-version +version = "0.3.2" # x-release-please-version diff --git a/docs/package.json b/docs/package.json index 1d9d0225..a15266fb 100644 --- a/docs/package.json +++ b/docs/package.json @@ -1,7 +1,7 @@ { "name": "relab-docs", "type": "module", - "version": "0.3.1", + "version": "0.3.2", "private": true, "license": "AGPL-3.0-or-later", "contributors": [ diff --git a/package.json b/package.json index a8a8d2e0..4b61814f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "relab", "private": true, - "version": "0.3.1", + "version": "0.3.2", "license": "AGPL-3.0-or-later", "packageManager": "pnpm@12.1.0+sha512.d9b8276d97f6ec86e49815877f91ee9f63cee61f2063b304e43b6dab8fa07ce8a9afd46d2facd39f921e6a9d06b3c75a81349c7b888c2d22886bae0229901037", "engines": { diff --git a/www/package.json b/www/package.json index 610e18d7..0a0b0330 100644 --- a/www/package.json +++ b/www/package.json @@ -1,7 +1,7 @@ { "name": "relab-www", "type": "module", - "version": "0.3.1", + "version": "0.3.2", "private": true, "license": "AGPL-3.0-or-later", "contributors": [