Fleet changelogs · dev.ecs0.net
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


Key Changes

  1. Initial Connect Backfill Wiring (DishTTYViewModel.swift):
    • Added hasBackfilledHistory latch in DishTTYViewModel.
    • On initial online telemetry snapshot (or manual refreshNow), triggers poller.fetchHistory() once to populate HistoryBuffer with 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.
  2. Buffer Ingestion & Outage Updates (HistoryBuffer.swift & DishyTelemetryPoller.swift):
    • Added updateOutages(_:) to HistoryBuffer to allow refreshing outage events without altering the rolling sample buffer.
    • Added refreshOutages() and autoBackfillHistoryOnConnect flag to DishyTelemetryPoller.
    • 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.
  3. Captured Frame Wire Decoder Test (DishProtobufResponseDecodingTests.swift):
    • Added testDecodeDishGetHistoryCapturedFrame() validating gRPC wire frame unwrapping and decoding of dish_get_history (tag 2006) containing current, packed floats for latency/drop/throughput, and repeated DishOutage submessages (cause, start timestamp, duration, didSwitch).
  4. Integration & UI Test Coverage:
    • Added testChartsAndOutagesPopulatedWithinOnePollOfLaunch in DishTTYViewModelTests.swift proving that charts (≥50 downsampled points) and recent outages populate within a single poll.
    • Added testOutagesCardViewWithMultipleCausesAndDurations in SingleLineMetricsTests.swift validating OutagesCardView rendering across multiple outage causes (.obstructed, .noPings, .noDownlink, .thermalShutdown, .booting).

Verification Evidence


Rollback / Undo