Skip to content
Merged
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
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ A defence-in-depth pass across the API, token, export, and deployment surfaces:
- **OIDC β€” fix broken `OIDCAdapter` flows (#7837).** Repairs the adapter flows and widens the storage type to include `string` for the `userCode` index; adds regression tests.
- **Accessibility β€” dialog titles/descriptions and a missing l10n key (#7835 / #7836).** Adds the `index.code` key referenced by `index.html` but never defined (which produced a "Couldn't find translation key" console error on the landing page), and gives every admin `@radix-ui/react-dialog` `Dialog.Content` a `Dialog.Title` and `Dialog.Description` (visually hidden where there's no visible heading), silencing Radix's a11y warnings. A new backend spec fails CI if any `data-l10n-id` in `src/templates/*.html` is missing from `en.json`.
- **Offline/air-gapped Docker boot β€” stop pnpm self-provisioning a pinned version (issue #7911).** The official image installs pnpm directly (corepack was dropped for Node 25+). Because the image's pnpm intentionally lags the `packageManager` pin in `package.json` (pnpm 11.1.x enforces a minimum-release-age policy the frozen-lockfile build can't satisfy), pnpm treated every call β€” including the informational `pnpm --version` probe Etherpad runs at startup β€” as a request to download the pinned build. Behind a firewall that download failed (`Failed to get pnpm version: … Command exited with code 1`), breaking startup. The Dockerfile now sets `pnpm_config_pm_on_fail=ignore`, and the startup probe plus the updater's pnpm-on-PATH checks run with the same flag, so pnpm uses the installed version instead of reaching for the network (without changing which pnpm runs the build-time install). A backend spec fails CI if that guard is dropped while a version gap exists.
- **Firefox authorship colours β€” tag early keystrokes with the right author (#7910).** The inner editor's `thisAuthor` starts empty and is only populated when collab_client's queued `setProperty('userAuthor', userId)` reaches the iframe (applied asynchronously via `pendingInit`). Under Firefox timing the first keystrokes could beat it, so freshly typed text β€” and early line-attribute changes (lists, headings, alignment) β€” were tagged `author=''`, which canonicalises to an unattributed insert that the server's pad-corruption guard rejects, dropping the whole change and losing authorship (the intermittent `clear_authorship_color` flake, where undo couldn't restore the author colour). A `getLocalAuthor()` helper now falls back to `clientVars.userId` (the same id, available synchronously) whenever `thisAuthor` is still empty, applied at the text-insert sites and to seed `documentAttributeManager.author`; the intentional clear-authorship path and the server-side guard are unchanged.
- **Dark mode β€” fix the white address bar and the light-flash on load (#7909, issue #7606).** Dark-mode users still saw a white mobile address bar above the dark toolbar, and the whole page flashed light before going dark. Both came from rendering the light state server-side and switching to dark only after the JS bundle ran: iOS Safari reads `theme-color` at parse time and doesn't reliably repaint on a later JS mutation, and the page painted light before the bundle applied the dark skin classes. The server now emits a `prefers-color-scheme`-scoped `theme-color` pair so the address bar is correct at first paint, plus a small blocking `<head>` script that applies the dark skin classes before the stylesheet paints. Both are gated on `enableDarkMode` (default on) and the colibris skin; `pad.ts` still runs on init to wire up the `#options-darkmode` toggle (which now updates every `theme-color` meta) and theme the editor iframes. Applies to the pad and timeslider views.

### Internal / contributor-facing
Expand All @@ -40,7 +41,7 @@ A defence-in-depth pass across the API, token, export, and deployment surfaces:
### Dependencies

- Two major bumps: `redis` 5.12.1 β†’ 6.0.0 (#7869) and `ejs` 5.0.2 β†’ 6.0.1 (#7860).
- `ueberdb2` 6.1.2 β†’ 6.1.8, `mssql` 12.5.3 β†’ 12.5.5, `nodemailer` 8.0.7 β†’ 8.0.10, `mysql2` 3.22.3 β†’ 3.22.4, `oidc-provider` 9.8.3 β†’ 9.8.4, `@elastic/elasticsearch` 9.4.1 β†’ 9.4.2, `lru-cache` 11.5.0 β†’ 11.5.1, `rate-limiter-flexible` 11.1.0 β†’ 11.1.1, `semver` 7.8.1 β†’ 7.8.2, `js-cookie` 3.0.7 β†’ 3.0.8, `tsx` 4.22.3 β†’ 4.22.4, `@tanstack/react-query` 5.100.11 β†’ 5.101.0 (+ devtools), plus `i18next`, `react-router-dom`, and several dev-dependency group bumps.
- `ueberdb2` 6.1.2 β†’ 6.1.8, `mssql` 12.5.3 β†’ 12.5.5, `nodemailer` 8.0.7 β†’ 8.0.10, `mysql2` 3.22.3 β†’ 3.22.5 (#7915), `undici` 8.3.0 β†’ 8.4.1 (#7914), `pdfkit` 0.18.0 β†’ 0.19.0 (#7916), `oidc-provider` 9.8.3 β†’ 9.8.4, `@elastic/elasticsearch` 9.4.1 β†’ 9.4.2, `lru-cache` 11.5.0 β†’ 11.5.1, `rate-limiter-flexible` 11.1.0 β†’ 11.1.1, `semver` 7.8.1 β†’ 7.8.2, `js-cookie` 3.0.7 β†’ 3.0.8, `tsx` 4.22.3 β†’ 4.22.4, `@radix-ui/react-switch` 1.2.6 β†’ 1.3.0 (#7913), `@tanstack/react-query` 5.100.11 β†’ 5.101.0 (+ devtools), plus `i18next`, `react-router-dom`, and several dev-dependency group bumps (#7912).

### Localisation

Expand Down
Loading