HydraIssues

mercator-talks watchdog timeout on fluffy-dumpling-87 — status dedup bug (pre-v2.0.57)
open bug Project: hydrabody Reporter: 22 May 2026 01:29

Description

Summary

Session node-11d-3 on body fluffy-dumpling-87 (node-11da9ea3, bxl1-test-2/cloud-seven) was terminated by hydracluster watchdog at 2026-05-22T01:22:25Z after 64s of streaming. The iPad head node-d0112bf1 reported the stream as failing after 170s ("Connection Terminated: The connection was terminated, error code: -1").

This is a confirmed instance of the status dedup bug fixed in hydrabody v2.0.57.

Timeline

  • 01:07:47Z — hydrabody v2.0.57 commit tagged (fix: reduce status dedup window to 45s)
  • 01:12:57 CEST (local iPad time) — First streaming attempt; connected, then stop() called after ~17s (likely earlier watchdog kill, session not in history — session node-11d-1 or node-11d-2 not retained)
  • 01:15:37Z — v2.0.57 tag pushed; CI build begins
  • 01:21:20Z — Second streaming attempt begins (session node-11d-3)
  • 01:21:20Z — body_last_heartbeat_at = started_at (only ONE heartbeat ever received from body)
  • 01:22:25Z — hydracluster watchdog fires at 64s; session terminated (end_reason: watchdog_timeout)
  • 01:24:01 CEST (local iPad time) — Moonlight receives unexpected disconnect event (errorCode=-1), stream ends after 170.1s from Moonlight perspective
  • 01:25:11Z — Issue #355 auto-filed by iPad head

Root Cause

The body was running a version of hydrabody prior to v2.0.57 that had a 5-minute status POST dedup window. Once the body reported its initial streaming status at session start, no further status POSTs were sent (state unchanged = dedup suppressed). Hydracluster tracked body_last_heartbeat_at as the session start time only. After 60s without a body heartbeat, the session watchdog triggered TerminateStream on Sunshine, dropping the control stream and disconnecting Moonlight.

The body is now running v2.0.57 (confirmed via /api/v1/nodes/node-11da9ea3: service_versions.hydrabody = v2.0.57). The fix reduces the dedup window to 45s, ensuring the body posts status at least every 45s during stable streaming — well within the 60s watchdog threshold.

Scope

The session history shows 3 sessions all ended with watchdog_timeout in the 01:19–01:22Z window, affecting fluffy-dumpling-87 (node-11da9ea3), cosmic-pretzel-98 (node-4c2be4b0), and chunky-turnip-23 (node-b961f1c8). All share the same signature: body_last_heartbeat_at == started_at.

Status

Covered by the v2.0.57 fix already deployed. No further code changes required. Monitor next sessions to confirm watchdog timeouts no longer occur.