Skip to content

[SeerrNG #637] fix(lumen): audit pass for stale state, sign-in outage, dialogs, book detail and touch targets - #20

Closed
ncbudd wants to merge 2 commits into
mainfrom
seerrng-637
Closed

ncbudd wants to merge 2 commits into
mainfrom
seerrng-637

Conversation

@ncbudd

@ncbudd ncbudd commented Nov 10, 2026 •

Copy link
Copy Markdown
Owner

Mirror of snapetech-org/seerrng#637

A review pass over lumen/src plus a phone-width pass (360 and 390 wide). Each fix is its own commit with a release-note fragment; nothing outside lumen/ and release-notes/ changes.

Bugs

  • Season ticks reset on revalidate. TvDetail reset the ticked seasons whenever the show object changed, which a background revalidation does about a second after opening a cached show. Ticks now reset only when the show id or its defaults change.
  • Detail pages blanked after a request. Movie, series and book detail called dropCache then reload, losing scroll position and picked options. New useApi.refresh() keeps the page on screen while it refetches.
  • Back showed "Request" again. A restored usePaged snapshot was never revalidated. Snapshots now carry a cache generation and a stale one is re-read quietly.
  • A network blip signed people out. Any /auth/me failure cleared the user. Only 401/403 does now; anything else shows a Retry screen.
  • Requests polled while hidden. The 30 s poll now pauses on document.hidden and resumes on visibilitychange.
  • Book request badges went stale. Book states are invalidated on any change, a failed fetch is no longer cached as empty, and a request for both formats counts for each.
  • "Watch on Plex" had no link for 4K-only titles. It now links to the 4K copy when that is the only one.
  • "All" search skipped audiobooks. It now queries both book formats.
  • /audiobooks is titled "Audiobooks"; book cards have one tab stop; lumen-config.json is fetched once per page load.

Book detail and requests

  • Book detail shows the author and description (both already in the payload) and the whole cover instead of a cropped one.
  • With no recordings the section reads "Narrator" with a note, not "Choose a narrator / 0 recordings". Info panel cells fill their row.
  • Request rows use the drawn Cover fallback when a poster is missing.
  • Own-request Cancel, admin Decline, admin Remove and "Reset to defaults" ask for confirmation (ConfirmSheet). Remove no longer uses a timed second tap on the same button.

Accessibility and touch

  • New useDialog hook for the sheets that set aria-modal: focus moves in, Tab stays inside, Escape closes, the page behind is inert and does not scroll, focus returns to the opener.
  • friendlyError() gives plain messages for network, timeout, 401/403/429 and 5xx errors, keeps sentences the server wrote, and logs the raw error to the console.
  • Chips, segmented buttons, .btn-sm, request-row buttons and Open links are at least 44px high under @media (pointer: coarse), as are the hero buttons, "See all", the avatar, the detail Back button and the sort select. Desktop is unchanged.
  • The fact line on detail pages keeps each separator dot with the item before it, so no wrapped line starts with a dot.
  • The sign-in error renders under the form; JS smooth scrolling respects prefers-reduced-motion.

Testing

  • tsc --noEmit and vite build clean; node unit tests 35 passed.
  • Playwright, all four projects: 787 passed, 13 skipped (the existing skips), 0 failed.
  • New specs: lumen/tests/browser/audit-fixes.spec.ts and the book detail, dialog, confirmation, drawn cover and touch target cases, plus unit tests for the 4K link and the cache. Two existing tests that clicked Decline and Cancel directly now go through the confirmation.
  • The same commits have been running on a household instance (v3.72.25 backend) since 2026-11-10.

Not included

  • Duplicate /settings/public and /auth/me calls on page load.
  • Search paging and ranking, and paging of the own-request list.
  • The search input's 25px height inside its 44px bar, and one 13px checkbox on /me/lumen.

@ncbudd ncbudd closed this Nov 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant