rdmbair15m5-changelog-20260923-0746-dishtty-backfill-charts-and-outages
rdmbair15m5-changelog-20260923-0746-dishtty-backfill-charts-and-outages
Summary: Delivered FEAT-20260916-03:
DishTTY now backfills 15-minute rolling historical telemetry and real
outages from dish_get_history on initial connect / launch,
ensuring charts and OutagesCardView are populated within
one poll of startup while preserving monotonic ring buffer
continuity.
Scope
- Hosts:
rdmbair15m5(working tree),rdmsm4x(canonical hub) - Project:
apps/DishTTY - Commits:
753871b(code & tests),04eabc3(docs & status) - Ticket:
FEAT-20260916-03(Resolved)
Key Changes
- Initial Connect Backfill Wiring
(
DishTTYViewModel.swift):- Added
hasBackfilledHistorylatch inDishTTYViewModel. - On initial online telemetry snapshot (or manual
refreshNow), triggerspoller.fetchHistory()once to populateHistoryBufferwith 15-minute telemetry points (ping latency, drop rate, downlink/uplink throughput) and recent outages. - Clears latch on dish switch (
selectDish) and provider mode switch (setMode) so newly active dishes backfill their respective historical windows.
- Added
- Buffer Ingestion & Outage Updates
(
HistoryBuffer.swift&DishyTelemetryPoller.swift):- Added
updateOutages(_:)toHistoryBufferto allow refreshing outage events without altering the rolling sample buffer. - Added
refreshOutages()andautoBackfillHistoryOnConnectflag toDishyTelemetryPoller. - Preserved monotonic ring buffer continuity during live polling: initial backfill runs while buffer is empty, and subsequent 1 Hz/3 Hz live polls append smoothly without timestamp regression.
- Added
- Captured Frame Wire Decoder Test
(
DishProtobufResponseDecodingTests.swift):- Added
testDecodeDishGetHistoryCapturedFrame()validating gRPC wire frame unwrapping and decoding ofdish_get_history(tag 2006) containingcurrent, packed floats for latency/drop/throughput, and repeatedDishOutagesubmessages (cause, start timestamp, duration, didSwitch).
- Added
- Integration & UI Test Coverage:
- Added
testChartsAndOutagesPopulatedWithinOnePollOfLaunchinDishTTYViewModelTests.swiftproving that charts (≥50 downsampled points) and recent outages populate within a single poll. - Added
testOutagesCardViewWithMultipleCausesAndDurationsinSingleLineMetricsTests.swiftvalidatingOutagesCardViewrendering across multiple outage causes (.obstructed,.noPings,.noDownlink,.thermalShutdown,.booting).
- Added
Verification Evidence
- Local host (
rdmbair15m5):DishTTYCoreTests: 315 tests (was 314) + 17 Swift Testing tests = 332 passedDishTTYUITests: 125 tests (was 123)- Total: 457 tests passed, 0 failures (+3 tests added)
- Canonical host (
rdmsm4x):swift test --package-path ~/dev/apps/DishTTY: 315 tests + 17 Swift Testing tests passed in 13.46sswift test --package-path ~/dev/apps/DishTTY --filter DishTTYUITests: 125 tests passed in 24.80s- Total: 457 tests passed, 0 failures (100% reproducible cross-host)
- Git Sync:
- Pushed to
git.ecs0.net:git/apps/DishTTY.gitonmain. - Fast-forward pulled on canonical
rdmsm4x:~/dev/apps/DishTTY. - Pushed to GitHub remotes:
https://github.com/richhdoty/DishTTY.gitandhttps://github.com/richhdoty/rdmsm4x-dev-apps-dishtty.git.
- Pushed to
Rollback / Undo
git revert 04eabc3 753871binapps/DishTTY.