Code-review fixes and refactors #76

Merged
eliott merged 10 commits from fix/code-review into main 2026-10-15 22:39:25 +02:00
Owner

Code-review pass for the web app. Release 0.11.0 (matches the v0.11.0 changelog entry in rollnote-api).

Includes the unreleased work already on develop (password reset, email change) and the brand update.

  • Generic catalog (CatalogConfig + shared tab/row/select/skeleton) for the 7 settings entities, visible field errors, in-place edit/delete, 404 handling, filter stops 0..10
  • Shoots: paginated list with server search, keyboard-accessible folder menu, error states with Retry, several bug fixes (edit while loading, folder expand, 404 back-button trap)
  • Frames: shared exposure fields, location refine/remove fixes, map load errors handled
  • App: service worker update + chunk-load recovery, signed-in redirect after a slow session, silent list errors + toast dedupe, credentials interceptor, lib/auth and app/layout split, per-page titles
  • Account: drawers on the shared form drawer, import preview race fixed, wipe confirmation, password fields cleared on close
  • API types generated from rollnote-api's openapi.json (pnpm api:types, CI drift check)
  • Infra: nginx-unprivileged on port 8080 (reverse proxy upstream must change), CSP fixed for map tiles (still Report-Only), Permissions-Policy, gitleaks, prettier check, docker build in CI

Tests: 1126 unit, 12 e2e.

Code-review pass for the web app. Release **0.11.0** (matches the v0.11.0 changelog entry in rollnote-api). Includes the unreleased work already on develop (password reset, email change) and the brand update. - Generic catalog (CatalogConfig + shared tab/row/select/skeleton) for the 7 settings entities, visible field errors, in-place edit/delete, 404 handling, filter stops 0..10 - Shoots: paginated list with server search, keyboard-accessible folder menu, error states with Retry, several bug fixes (edit while loading, folder expand, 404 back-button trap) - Frames: shared exposure fields, location refine/remove fixes, map load errors handled - App: service worker update + chunk-load recovery, signed-in redirect after a slow session, silent list errors + toast dedupe, credentials interceptor, lib/auth and app/layout split, per-page titles - Account: drawers on the shared form drawer, import preview race fixed, wipe confirmation, password fields cleared on close - API types generated from rollnote-api's openapi.json (`pnpm api:types`, CI drift check) - Infra: nginx-unprivileged on **port 8080** (reverse proxy upstream must change), CSP fixed for map tiles (still Report-Only), Permissions-Policy, gitleaks, prettier check, docker build in CI Tests: 1126 unit, 12 e2e.
User guide fixes:
- forgot/reset password pages, email and display name changes
- data change service so lists refresh after writes

Audit fixes:
- import preview no longer retries forever; paginated lists stop polling on
  error and offer Retry; 401 refetches the session before redirecting
- film edit sends the ISO id, camera edit sends null format, cleared
  location labels are saved, frame count refreshes after duplicate
- new frame: location failure is non-fatal (no duplicate frames)
- profile drawer keeps unsaved edits, 2FA calls the right endpoint, logout
  handles errors, double-submit guards, keyboard-accessible option cards
- perf: lazy service worker JS group with cache warmup, animations and
  primeicons removed, Lara preset trimmed to used components, cached
  reference lists, leaflet loaded near viewport, deferred confirm dialog,
  boot shell, initial bundle 772 kB -> 584 kB
- infra: nginx gzip_static, hashed-only immutable caching, security headers
  and report-only CSP, pinned Node/nginx images, prod build in CI
Reviewed-on: #74
Also lowercase the boot-shell label added on develop.
- serve with nginx-unprivileged on port 8080 (reverse proxy upstream must
  point at rollnote-front:8080), hardened compose service
- CSP: API origin from an API_ORIGIN build arg, map tile hosts in
  connect-src (the service worker fetches them), Permissions-Policy;
  still Report-Only for this release
- CI: prettier check, gitleaks with a baseline for historical findings,
  docker build, generated API types drift check
- .dockerignore/.gitignore cover test artefacts and the fallow cache
- README and CLAUDE.md rewritten for the current layout and deploy
feat: code-review fixes - generic catalog, error states, a11y, typed API client (0.11.0)
Some checks failed
tests / test (pull_request) Failing after 1m16s
a3228df4c7
- catalog: one CatalogConfig per entity drives a generic tab, row, select
  and skeleton; visible field errors, notBlank, in-place patch/remove,
  404 handling, filter stops 0..10
- shoots: paginated list with server search, keyboard folder menu, error
  states with retry, edit-while-loading and folder-expand fixes
- frames: shared exposure fields, location refine/remove fixes, map load
  errors handled
- app: service worker update handling and chunk-load recovery, signed-in
  redirect after a slow session, silent list errors and toast dedupe,
  credentials interceptor, lib/auth and app/layout split, page titles
- account: drawers on the shared form drawer, import preview race and wipe
  confirmation, password fields cleared on close
- theme preset trimmed with identical rendering
- API types generated from rollnote-api's openapi.json (pnpm api:types)
- e2e mocks match the API, new 401/admin/logout coverage
- release 0.11.0 (matches the v0.11.0 changelog entry)
refactor: lower complexity fallow flags against main
All checks were successful
tests / test (pull_request) Successful in 4m12s
f8d90e44a7
The fallow audit gate on a PR to main scopes to the line diff against
main, which still lacks develop's password reset / email change work,
so three over-threshold units from that work counted as introduced.

- profile-edit-drawer: split onSubmit into changedValue, profileChanges
  and applyChanges (was cyclomatic 22)
- rings: move the clear-button, track tabindex and aria-disabled
  conditions into shared RingControl computeds (canClear,
  trackTabIndex, ariaDisabled); clear() reuses canClear
- account: expose the session user as a computed instead of an inline
  template expression

No behaviour change.
eliott merged commit 71e8582074 into main 2026-10-15 22:39:25 +02:00
eliott deleted branch fix/code-review 2026-10-15 22:39:25 +02:00
Sign in to join this conversation.
No reviewers
No labels
run-ci
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
RollNote/rollnote-front!76
No description provided.