Repository navigation
Fix untranslated SSR labels and #418 hydration errors - #1416
Merged
Merged
Conversation
Labels built with `t` at module scope were evaluated once, when their chunk first loaded. On the SSR server that froze them for every later request: depending on timing they rendered as raw message ids (e.g. "D0tAMe") or in whichever locale loaded them first, and the client then re-rendered them, throwing React #418 hydration errors on the auth pages. On the client they never followed a language switch. Build them in getter functions instead, matching getEventCategories, and add a smoke spec that requests the login page in two locales.
|
🚅 Deployed to the Hi.Events-pr-1416 environment in Hi.Events
3 services not affected by this PR
|
railway-app
Bot
temporarily deployed
to
Hi.Events / Hi.Events-pr-1416
October 18, 2026 12:32
Destroyed
Contributor
|
| Mode | Result | ✅ Passed | ❌ Failed | ⏭️ Skipped | ⏱️ Duration | |
|---|---|---|---|---|---|---|
| Self-hosted | 595 | 0 | 2 | 4 | 16m 11s | |
| SaaS | 583 | 0 | 2 | 16 | 10m 30s |
⚠️ Flaky tests: failed first, then passed on retry (4)
- SaaS ·
widget/widget-editor.spec.ts:104· widget editor › organizers embed their events list from the organizer area - SaaS ·
widget/widget-playground.spec.ts:29· widget playground › the playground embeds an organizer events list as a custom element - Self-hosted ·
management/event-lifecycle.spec.ts:91· event lifecycle › an organizer deletes a draft event from the danger zone - Self-hosted ·
widget/widget-editor.spec.ts:104· widget editor › organizers embed their events list from the organizer area
⏭️ Why tests were skipped
Self-hosted
- 3 × Runs only against a SaaS stack (E2E_SAAS_MODE=true).
- 1 × Lifecycle emails only exist in SaaS mode.
SaaS
- 15 × Runs only against a non-SaaS stack (E2E_SAAS_MODE=false).
- 1 × The composer form is gated behind Stripe/manual account verification in SaaS mode.
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Production auth pages throw React error #418 (hydration text mismatch) on every load. The cause is the feature ticker in
AuthShell: its labels were built withtat module scope.A module-level
truns once, when its chunk first loads. On the SSR server that value is then reused for every later request, so the ticker rendered as raw message ids (production descriptors carry only the id) or in whichever locale loaded the chunk first. Reproduced against a production build:D0tAMe(raw id)D0tAMe(raw id)The client then rendered the real text, React found the mismatch, and the page threw #418. It only shows in production builds, because dev descriptors keep the English source text.
Fix
lingui/t-call-in-function, which is already in.eslintrcbut not run in CI, flags 81 more module-scopetcalls with the same problem:ReportTable,OrganizerReportTable)RecurrenceScheduleDrawer)On the client these also never followed a language switch. They're all now built in getter functions, matching
getEventCategories. The rule reports 0 afterwards.Tests
New
@smokespece2e/tests/ssr/server-translations.spec.ts:/auth/loginin German and then English, and expects each locale's ticker text. This fails on the old build and passes on the new one./auth/loginand/auth/registerand checks that hydration logs no Fix tests running twice #418/main <- develop #423/main <- develop #425 errors.Also checked against a local production build: login, register and forgot-password hydrate with no console errors.
tscadds no new errors; the two in the report tables already exist on develop.Independent of #1415 (build speed); no shared files.