fix(843): config-on-connect app_config no longer gated on LocalProxy#844
Merged
Conversation
… Android) `applyServerAppConfig()` early-returned when `localProxy` was false, silently dropping all #800 config-on-connect app_config (segment/protocol/live_offset/ peak/muted #838) on every LocalProxy-OFF run — the characterization default. The guard was gating on the wrong flag. `localProxy` (`is.flag.local_proxy`) toggles the on-device LocalHTTPProxy (iOS 127.0.0.1 rewrite) / the media port (Android); it does NOT control whether the session's app_config exists or is readable. The lookup reads `/api/sessions` off the API port (iOS `metricsBaseURL`→playbackURL, Android `activeServer.apiUrl`), reachable regardless. The fetch is already best-effort (null on miss), so removing the guard is a no-op for normal user plays. - iOS: drop `guard localProxy else { return }` (PlayerViewModel.swift). - Android: drop `if (!_state.value.localProxy) return` (PlayerViewModel.kt). - Update the #838 mute matrix specs — `CHAR_LOCAL_PROXY=true` is no longer needed. Verified on a 2-sim Device Farm fleet with LocalProxy OFF (CHAR_LOCAL_PROXY unset): before fix: overlay log ABSENT (guard blocked), [localproxy] NET logs absent after fix: overlay log PRESENT (muted=true / muted=false per arm), [localproxy] NET logs still absent (LocalProxy genuinely off) — i.e. the read-back now applies without the on-device proxy. Both fleet subtests PASS. Fixes #843. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
jonathaneoliver
added a commit
that referenced
this pull request
Jun 23, 2026
…845) Follow-up to #844. The config-on-connect comment in `experimentPlayerPatch` still claimed `app_config.muted` "needs LocalProxy ON — run with `CHAR_LOCAL_PROXY=true`". The guard was removed in #843/#844, so that's no longer true. Comment-only, no behavior change. Relates to #843. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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 join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Fixes #843.
applyServerAppConfig()early-returned whenlocalProxywas false, so all #800 config-on-connectapp_config(segment / protocol / live_offset / peak /mutedfrom #838) was silently dropped on every LocalProxy-OFF run — which is the characterization default.Root cause
The guard gated on the wrong flag.
localProxy(is.flag.local_proxy) toggles the on-device LocalHTTPProxy (iOS127.0.0.1rewrite) / the media port (Android) — it does not control whether the session'sapp_configexists or is readable. The lookup reads/api/sessionsoff the API port (iOSmetricsBaseURL→playbackURL, AndroidactiveServer.apiUrl), reachable regardless. The fetch is already best-effort (null on miss), so removing the guard is a no-op for normal user plays.Change
guard localProxy else { return }(PlayerViewModel.swift).if (!_state.value.localProxy) return(PlayerViewModel.kt).CHAR_LOCAL_PROXY=trueis no longer required.Verification (2-sim Device Farm fleet, LocalProxy OFF)
Clean before/after, controlled on the fix only:
[localproxy]NET logsmuted=true/muted=falseper arm)[localproxy]NET logs absent in both confirms LocalProxy was genuinely OFF (positive control). Both fleet subtests PASS. Server/api/sessionsstoredapp_config.mutedin both (it always did — localProxy-independent).iOS
** BUILD SUCCEEDED **; AndroidcompileDebugKotlinclean.🤖 Generated with Claude Code