Skip to content

2026.7.15

Pre-release
Pre-release

Choose a tag to compare

@thatcube thatcube released this 18 Jul 19:55

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