2026.7.15
Pre-release
Pre-release
TestFlight build 13 — 2026-07-15
What to Test:
Playback now recovers after leaving Plozz and returning, with video, controls, and progress resuming correctly.
Try the redesigned media-share setup for SMB, WebDAV, SFTP, FTP/FTPS, and NFS, including automatic protocol detection and folder browsing.
Check local-library matching, metadata, duplicate handling, watch progress, and resume behavior across servers and file shares.
Confirm authenticated video, music, subtitles, and scrub previews still load normally.
Changes (130):
- Fix playback recovery after tvOS suspension
- NFS listExports: throw on loop-cap breach instead of break
- Drop the NFS subtitle in the Servers list entirely
- NFS reads as a credential-free connection, not a sign-in
- Onboarding form redesign, focus fixes, readable default names, StatusChip
- Onboarding: consolidate Connect form, move share nickname off the picker, FTP validates on Connect
- Pin the folder-picker confirm action above the list
- Fix SFTP onboarding crash on auth failure (leaked NIO promise)
- Refine folder-picker scroll: directional fade, no side clipping, drop hint
- NFS export listing + FTP folder browsing + reusable fading scroll area
- Add SFTP folder browsing to onboarding (drill into a subfolder)
- Preserve username case in SFTP/FTP share identity
- Unified onboarding UI for NFS, SFTP, and FTP shares
- Make stale-session eviction test deterministic (fix latent release race)
- Evict dead idle sessions from the transport registry before reuse
- Disable username autocapitalization in share onboarding
- Use an informational icon for HTTP credential notice
- Make HTTP credential notice informational
- Place insecure-connection notice beside the address
- Preserve WebDAV HTTP/HTTPS through discovery and manual entry
- Refine media-share onboarding and confirm swept protocols
- Add unified add-a-media-share flow (one Connect form for all transports)
- Fix cursor-reader leak on shutdown-vs-first-read race
- FTP: make socket awaits cancellation-aware (no head-of-line block)
- Harden NFS transport after Opus 4.8 + GPT-5.6 code review
- Add box grouping + curated Channel-B port sweep for media-share discovery
- Second-review hardening of SFTP transport
- Add unified media-share onboarding foundation: transport descriptor registry + neutral Bonjour discovery
- FTP: bound every socket await + document drift policy
- Harden SFTP transport per cross-model review
- FTP: honest seek capability + activate detection
- Trim NFS onboarding wiring to headless transport only
- Add FTP/FTPS media-share transport
- Add NFS as a media-share transport (read-only NFSv3)
- Add SFTP media-share transport (headless)
- Coalesce redundant background scans (fix WebDAV scan-thrash)
- Make the perf log self-describing with screen + scan-lifecycle events
- Enrich the hitch probe with per-window stats for controlled measurement
- Add dev instrumentation to measure whether share scans stall the UI
- Clean up the Servers summary chip row spacing and separators
- Refine transport badge sizing: smaller glyph, wider label, higher band
- Enlarge the Servers summary chip icons without growing the row
- Tighten transport label width to 0.7 so long labels clear the border
- Shrink transport label and drop the badged-icon scale
- Scale badged share icon down 5% so it doesn't crowd its frame
- Lift badged share icons so they sit optically centered
- Tune transport badge chop to 0.41
- Tune transport badge chop to 0.40 so more of the drive glyph shows
- Chop a consistent band, not the text silhouette, for the transport badge
- Bottom-align the transport knockout so the drive icon stays visible
- Knock the transport label out of the shared share icon everywhere
- Badge each file share's drive icon with its transport (SMB/WebDAV/…)
- Group media shares by full share root so same-host shares don't merge
- Let the shared WebDAV scanner session parallelize across the scan pool
- Refactor route detection into an additive TransportClaimant registry
- Route to WebDAV on any HTTP response, not just a DAV header
- Detect WebDAV by probing the DAV header, not path/port guessing
- Unify local-media onboarding: auto-detect transport, no protocol pick
- Harden the WebDAV onboarding flow (Phase 3 review fixes)
- Add the WebDAV share onboarding UI
- Fix WebDAV endpoint path encoding + account-ID dedup (Phase 1+2 review)
- Fix flaky HeroRandomLibraryLoader cancellation test on CI
- Persist WebDAV shares via the envelope path + wire the ETag identity
- Wire WebDAV adapters into AppShell via transport-neutral dispatch
- Speed up tests: build-once matrix + data-driven change-scoped selection
- Harden the WebDAV range/GET path (Phase 0 review fixes)
- Add the WebDAV media-transport adapter (Sources/MediaTransportWebDAV)
- Add stat + bounded GET to the WebDAV HTTP primitive
- Prefer English title for foreign-language TVDB matches (El eternauta)
- Replace stale enrichment on version bump (fixes Punisher "TAP" logo)
- Fix Eternaut/Punisher/Outlander metadata mismatches
- Fix Outlander mismatch and Your Honor duplicate card
- Reject parody/recap TVDB matches; English overview on the search path
- Revert AetherEngine to the production pin d97fad24
- Merge typo'd series folders when corroborated by a shared external id
- Fix nested-folder over-split regression; force re-enrich for stale shows
- Split nested spinoff folders; fetch English overview for by-id shows
- Harden share metadata: by-id resolve, canonical titles, safer normalization
- Fix series duplicate splits/merges with robust keys, real year, embedded ids
- Normalize SMB series titles and add filename-title search fallback
- fix: disambiguate same-name series by on-disk episode titles (TheTVDB)
- fix: anchor a share series to its show folder, not the filename or nested folders
- fix: include the (case-normalized) username in a media share's identity
- fix: give media shares a stable identity so re-adding updates in place
- diag: capture AVPlayer wedge state + segment-request pattern for the SMB/DV stall
- fix: stop stall-recovery retry from cancelling its own re-resolve
- Drain leased transport before stall retry; journal failure detail
- Recover network-file playback stalls and expand diagnostics
- Test AetherEngine stalled-seek fixes
- Persist playback failure diagnostics
- Use series IDs for episode merging
- Merge matching episode cards
- Refresh cached episode watch state
- Clear watched progress immediately
- Fix rewound resume and episode fan-out
- Fix Trakt episode identity
- Pin detail picker to library origin
- Honor source-specific library origins
- Centralize watch-state updates
- Keep playback on source-specific libraries
- Refresh share grid after playback
- Refresh detail after playback progress
- Preserve duration in final playback report
- Make local watch state durable
- Format About build number
- Polish About details
- Simplify About messaging
- Refresh About messaging
- Update tvOS deployment baseline references
- Secure managed scrub previews
- Secure managed subtitle delivery
- Accept Jellyfin empty query components
- Stabilize share scan lifecycle UI
- Secure managed theme playback
- Secure managed music playback
- Secure managed video playback
- Coordinate share scanning and playback
- Migrate SMB playback to transport resolver
- feat: move SMB browsing onto transport core
- feat: add protocol-neutral transport core
- feat: make share credentials transactional
- feat: add durable credential transactions
- feat: add revisioned media credential vault
- feat: add credential-free media source models
- refactor: scope provider resolution context
- feat: prove WebDAV transport primitives
- Use current tvOS SDK in CI
- Fix CI for the tvOS runner
- refactor: own transport reader lifecycle
- test: run every declared suite by default