Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/.release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.3.1"
".": "0.3.2"
}
113 changes: 113 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
4 changes: 2 additions & 2 deletions CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
2 changes: 1 addition & 1 deletion app/app.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
2 changes: 1 addition & 1 deletion app/package.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down
2 changes: 1 addition & 1 deletion backend/app/__version__.py
Original file line number Diff line number Diff line change
@@ -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
2 changes: 1 addition & 1 deletion docs/package.json
Original file line number Diff line number Diff line change
@@ -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": [
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -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": {
Expand Down
2 changes: 1 addition & 1 deletion www/package.json
Original file line number Diff line number Diff line change
@@ -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": [
Expand Down
Loading