Releases
v0.3.2
Compare
Sorry, something went wrong.
No results found
0.3.2 (2026-09-10)
Features
app: Add a "?" keyboard shortcuts overlay (#219 ) (8e7ccb7 )
app: Serve the theme-adaptive favicon on web (#208 ) (eaded5e )
deploy: Allow 'build nocache' over the deploy key (#210 ) (7b8c27b )
deploy: Drop capabilities on the tunnel (#254 ) (1999923 )
deploy: Let timers run as a dedicated deploy user (#201 ) (d8d46ca )
deploy: Restricted remote deploys and the deploy-user host setup (#203 ) (9556bcd )
edge: Skip bot fight mode for keyed e2e runs and public product reads (#206 ) (1cb4479 )
images: Add a 2560px thumbnail tier for the lightbox (#268 ) (ad9af5d )
Bug Fixes
Acceptance-run fixes for the app CSP header and e2e lanes (#202 ) (279ca0e )
Act on the v0.3.0..HEAD codebase review (#247 ) (edba860 )
api: Allow the staging edge key header in CORS preflights (#216 ) (1c70913 )
app,docs: Never reuse a leftover preview server in E2E (#229 ) (487017c )
app: Clearer user-facing copy for search and support contact (#218 ) (9def3fb )
app: Finish the heading pass and guard it with lint (#225 ) (6134d39 )
app: Give the public profile one h1 and refresh three stale E2E specs (#233 ) (e2e1501 )
app: Keep photographs out of Smart Invert and gate the rule (#230 ) (9300c84 )
app: Label the last unlabelled controls and gate the rule (#226 ) (b07000f )
app: Read the detail back target from the fetched record (#209 ) (6aa003e )
app: Stop a concurrent product save losing an edit (#264 ) (ef04261 )
app: Stop the entry-focus ring outlining the page column (#223 ) (59583f8 )
app: V0.3 UI critique and QA follow-ups (#221 ) (341a24f )
app: Web layout regressions found after the prod cutover (#200 ) (39021c2 )
backend: Correct the background-work paths behind the upload split (#261 ) (162d2da )
backend: Delete products with components without tripping raiseload (#217 ) (10e5703 )
backend: Stop the pg_trgm move cleanly when the superuser owns the extension (#215 ) (0e84db8 )
backup: Guard the uploads volume against silent data loss (#269 ) (5e648ea )
backup: Rebuild before stamping, and say what the stamp did (#271 ) (9a8fee1 )
ci: Use the suppression comment form CodeQL honors (#251 ) (bb0c003 )
deploy: Fail clearly when .env exists but is unreadable (#249 ) (2771aec )
deploy: Give hand-run compose the stack's real identity (#238 ) (6e0ba3a )
deploy: Include /snap/bin in the deploy user's PATH (#204 ) (f4457df )
deploy: Make three release-path failures loud (#260 ) (8e07f02 )
deploy: Refuse to render systemd timers as root (#199 ) (0861c52 )
deploy: Remove the scratch container's anonymous volume (#246 ) (764d277 )
edge: Let CORS preflights past bot fight mode on the api hosts (#214 ) (47400bd )
images: Serve real thumbnails in product lists (#222 ) (aa91535 )
infra: Gate cloudflare applies on the plan they apply (#257 ) (e86e064 )
Point registration failure and accessibility copy at what's actually true (#207 ) (84440bd )
security: Keep addresses out of logs, narrow the edge exemption (#262 ) (a747df7 )
watchdog: Parse restic's Z-suffixed timestamps on the system python (3d3fab2 )
watchdog: Say why the git probe failed (#272 ) (38367a0 )
www: Never reuse a leftover preview server in E2E (#227 ) (c01084b )
Performance Improvements
app: Budget the web export's first-load JavaScript (#243 ) (d47c4df )
auth: Stop transactional email from blocking the response (318eb2c )
backend: Benchmark uploads across a spread of photo sizes (#241 ) (ecb4000 )
backend: Make the k6 baseline measure something, and fix what it found (#237 ) (c157b78 )
docker: Allowlist the backend context and cache Metro across builds (#228 ) (e3f33d8 )
docker: Shrink build contexts and drop a dead migrations layer (#224 ) (72a39c2 )
docker: Shrink the runtime images (#236 ) (133016f )
images: Take the wide thumbnails off the upload response path (#239 ) (ecb0174 )
You can’t perform that action at this time.