Conversation
Stats for nerds showed Aether telemetry only, so a failed or degraded stream said nothing about what the server planned or what went wrong. Match prairie-smarttv Silo-Server#116 on iOS and tvOS: - Plan section: method (direct play / remux / transcode), container, codecs, resolution, dynamic range and bitrate from the protocol-v3 plan, the planner's decision reason, active quality, selected audio track, and the stream path with query, user info, ids and media filenames stripped. - Recent events: a ring buffer of the last 8 player events and errors (plan, first frame, rebuffering, stalls, replans, quality and audio changes, typed Aether failures), timestamped, redacted through MediaLogRedactor, with consecutive repeats collapsed so a flapping state can't flush the error that caused it. - tvOS Info HUD stats pane shows Plan in the left column and Recent events at the end of the right column (added to the paging targets). The iOS overlay adds the plan rows and lists events beside the rows in landscape, or four events below them when narrow. Unit tests cover the ring buffer, summary and path formatting, and the projection pass-through. Invariant anchors added for the new wiring. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Advanced Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
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.
Stacked on #35 (base
fix/restore-prairie-customizations). Merge #35 first. GitHub then retargets this PR tomain.Problem
Stats for nerds on iOS and tvOS showed only Aether telemetry. When a stream failed or degraded, the panel did not show the server's plan, why the planner chose it, or the player's own error. prairie-smarttv Silo-Server#116 and the web overlay already show this.
Solution
Reuses
PlaybackStats,AetherPlaybackStatsProjectionandPlaybackStatsPanel. The new Prairie-only logic is inScreens/Player/PlaybackDiagnostics.swift(pure Foundation):PlaybackStats.planRows):effective_recipe, falling back tosourcedecision_reason):id) and media filenames ([media]) removedPlaybackEventLogis a ring buffer of the last 8 events, recorded whether or not diagnostics upload is on.MediaLogRedactor, capped at 160 characters.×Ncount, so a flapping state cannot push the causing error out of the buffer.Tests
PlaybackDiagnosticsTests: ring buffer capacity and order, repeat collapse, severity not collapsed, blank or zero-capacity input, redaction and length cap, time and severity formatting, event row order and identity, plan summary formatting for every delivery, a summary built from the vendored v2 plan fixture, and stream-path redaction (query, user info, UUID, loopback, manifest names kept, media filenames, offline files).AetherPlaybackStatsProjectionTests: plan detail passes through toPlaybackStats, and tokens never reach any row.Risks
AI disclosure: written by Claude Opus 5.5 (
claude-opus-5-5[1m]) in the Claude Code agent harness. No other AI tooling.🤖 Generated with Claude Code