2026.7.29
Pre-releaseTestFlight build 19 — 2026-07-29
What to Test:
Series detail: the hero-to-episodes transition has been rebuilt.
Please try, on a show with several seasons:
• Press Down from Play into the episodes, and Up again from a season chip.
Both directions should be one fluid motion, with the hero, logo, season bar
and episode row all moving together.
• Move up and down quickly and repeatedly. The page should never end up in a
half-finished state, and the season chips, Cast and Related should never
become invisible.
• Move left and right along the episode row, then up to the seasons. The page
itself should stay put.
• Open a show directly on an episode (from Continue Watching or search) — it
should arrive already showing the episode row.
• Check Cast and Related below the episodes, including on a show that has
neither.
Also fixed: the first season chip and the focused Play button are no longer
clipped on their left edge, and the episode rail's loading label is now
translated.
Changes:
- l10n: translate the episode-rail loading label
- tvOS: finish the series hero/episode-browser transition
- tvOS: rebuild the series hero/episode-browser transition on a fixed stage
- Align iOS episode rail with the Play target
- Resolve episode entry and show rail skeletons
- Open iOS series rails on the tapped episode
- Render localized hero credit labels correctly
- Keep iPad hero pull updates out of Home rows
- Share pre-arrival source selection with iOS
- Constrain Related skeleton to the rail viewport
- Match Related skeleton and loaded rail geometry
- Stabilize huge series rails and focus transitions
- Choose the series source before opening detail
- Window very large episode rails around focus
- Keep Home hero recede smooth under heavy rows
- Stop movie details shifting on cold open
- l10n: record the new scan-label key in the source snapshot
- l10n: mark the retired scan-phase strings stale
- Stop a detail page re-laying itself out while you arrive on it
- Build a detail page's view model once per page, not once per render
- Give the card indicators the four fields they draw, not all 56
- Stop the whole app re-rendering for one screen's data
- Stop rebuilding the Home tab thousands of times a minute
- build: localize features before main
- fix: complete localization for settings UI
- Say "Updating library" instead of naming a phase that hides the other
- Load Related on movies, and size its skeleton to the real card
- Mark a continuation on iPhone and iPad too
- Mark a continuation on iPhone and iPad too
- fix: restore continuation cues on Related cards
- l10n: add reviewed Bulgarian, Finnish, Norwegian, and Simplified Chinese
- l10n: add reviewed Hebrew, Slovenian, and Thai
- l10n: format settings values in the app's selected locale
- Keep the merged card and its server picker agreeing
- l10n: preserve fragment spaces and multiline structure on import
- docs: add structured translation correction issue form
- l10n: add reviewed Catalan and Romanian
- l10n: add reviewed Indonesian and Turkish
- l10n: propagate RTL into the UIKit hero renderer
- l10n: add reviewed Croatian, Malay, Slovak, and Ukrainian
- l10n: mirror explicit Arabic and Hebrew app overrides
- docs: add full and delta translation export commands
- l10n: make full and delta translation packets reproducible
- l10n: add reviewed Czech, German, Italian, and Swedish
- build: prune locales removed from incremental app products
- test: align language-picker coverage with release parity
- l10n: add reviewed Danish, French, and Russian
- l10n: make releaseReady equal the languages the OS actually ships
- l10n: report corrections against the language actually on screen
- l10n: add reviewed Dutch, Polish, and Brazilian Portuguese
- l10n: put translation corrections one tap or scan away
- l10n: reject translations that alter protected brands
- l10n: report availability separately from native review
- docs: make reviewed model translation the production system
- ci: keep the translation importer attacks closed
- l10n: make directional UI mirror in right-to-left languages
- l10n: gate parallel translations through one deterministic importer
- l10n: separate library names Plozz invents from ones the server supplies
- l10n: audit the leaf modules, and stop showing users protocol diagnostics
- l10n: extend the Spanish layout seed to the player and setup screens
- l10n: seed Spanish for layout testing, and write down the trap
- l10n: let DEBUG builds pick a language that isn't finished yet
- l10n: fix a layout that broke on the first real translation
- docs: how Plozz gets translated, and the gate before a language ships
- l10n: split six English words that meant two different things
- l10n: give translators the context they'd otherwise have to guess
- tools: add a pseudolocalization pass to the tvOS deploy
- l10n: make Top Shelf and the track menus follow the in-app language
- l10n: finish CoreModels, and split copy out of the String pipelines
- l10n: delete the dead ratchet, widen the eager rule, wire CI
- l10n: migrate the copy the guard could not see in CoreModels
- Fix CKSyncEngine delegate re-entrancy crash (SIGTRAP)
- l10n: localize the permission prompts
- l10n: clear the catalog of everything a translator can't act on
- l10n: move plural selection out of Swift and into the catalog
- l10n: migrate the prose the guard's new return-type rule found
- fix(l10n): architecture review — guard blind spot, profile scoping, locale bugs
- fix: the episode rail's opening scroll never ran at all
- feat(l10n): finish the engineering pass — guard clean across all UI modules
- fix: episode rail opens un-aligned, and season pages opening on "Mark as Watched"
- feat(l10n): localize avatar categories; format skip intervals instead
- feat: make Dynamic Type actually take effect, and extend it to the tvOS chip
- feat(l10n): localize iOS shell and Music copy
- feat(l10n): localize Home row headings and shared row components
- style: +2pt on the resume chip bar, -2pt on the full-width card bar
- style: back to the film glyph for "Go to Movie"
- style: make the three navigation actions read as one family
- feat(l10n): localize AppShell, Profiles, Auth and Discovery copy
- feat(l10n): localize the in-player controls
- style: use a stacked-play glyph for "Go to Show"
- fix: label the episode navigation action "Go to Show"
- fix(l10n): don't rebuild the whole view tree on a language change
- fix: deepen the bottom card scrim so chrome reads consistently
- feat(l10n): add the in-app language picker
- style: translucent progress track again, dimmer resting foreground
- fix: opaque tones for the shared media chrome, brighter at rest
- feat(l10n): localize Settings option labels (the displayName category)
- feat: settle the shared media chrome's white at rest on tvOS
- feat(l10n): localize error messages, media actions, and CoreUI components
- feat(l10n): migrate the Settings component layer (+102 strings)
- feat(l10n): add the localization guard, and fix the bugs it found
- fix: one shared scrim behind all bottom card chrome
- style: shorten the resume chip's progress bar
- style: 14pt progress bar, evenly spaced against the download badge
- fix: pin the download badge, and stop the progress bar short of it
- refactor: one full-width white progress bar on every browsing card
- feat: show the white resume bar + time remaining on browsing posters
- fix: pin the accent to a monochrome per-theme tone instead of the OS default
- fix: scan progress bar rendered white on tvOS and blue on iPadOS
- feat: make the scan progress panels focusable on tvOS
- feat: real progress for share scans, and align the banner to the poster wall
- refactor: move share scan progress from library tiles to the library page
- feat: move share scan progress off Home into Settings + per-library progress bars