--- name: playback-webview-debugging description: Use when playback, auth recovery, queue sync, or hidden WebView state diverges from native Swift state and you need to debug the DRM playback WebView, bridge events, or cookie/auth behavior. metadata: short-description: Debug playback WebView state --- # Playback WebView Debugging Use this skill when playback, auth recovery, queue sync, or hidden WebView state diverges from the native Swift state. ## When To Use It - Playback starts, stops, or advances unexpectedly - Auth looks stale and API calls return 401/403 - WebView metadata drifts from the native queue - You need to inspect JavaScript bridge events or DOM/player state ## Runtime Workflow 1. Reproduce with the packaged app or `Scripts/compile_and_run.sh`. 2. Use Xcode Console filters to watch runtime logs: `subsystem:Kaset category:player` `subsystem:Kaset category:auth` 3. In debug builds, verify `webView.isInspectable = true`, then inspect the player WebView with Safari Web Inspector. 4. To simulate auth expiry, delete `__Secure-3PAPISID` via Safari Web Inspector storage tools and trigger an authenticated API call. 5. If auth cookies or headers look suspicious, run `swift run api-explorer auth` and compare against the exported cookie state. ## Landmarks - `docs/testing.md` - `docs/playback.md` - `Sources/Kaset/Views/MiniPlayerWebView.swift` - `Sources/Kaset/Views/SingletonPlayerWebView+ObserverScript.swift` - `Sources/Kaset/Views/SingletonPlayerWebView+NavigationState.swift` - `Sources/Kaset/Views/SingletonPlayerWebView+QueueInjection.swift` - `Sources/Kaset/Services/Player/PlayerService.swift` - `Sources/Kaset/Services/Player/PlayerService+WebPlaybackIdentity.swift` - `Sources/Kaset/Services/Player/PlayerService+WebQueueSync.swift` - `Sources/Kaset/Services/Player/PlayerService+QueueNavigationRecovery.swift` - `Sources/Kaset/Services/WebKit/WebKitManager.swift`