From 063c5f0750b775362e45e21a97e0dc2250c89f77 Mon Sep 17 00:00:00 2001 From: Christophe Besson Date: Fri, 18 Sep 2026 11:05:47 +0200 Subject: fix(cast): keep the Chromecast progress log out of the terminal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The receiver reports its state on a timer, so `player status: PLAYING` repeats for as long as a film runs and buries everything else in the terminal the app was started from. The progress lines now go through Node's own `debuglog`, which costs nothing when disabled — the message is never formatted — and is restored with: NODE_DEBUG=cast-chromecast npm start The socket error stays on console.error. It fires when the connection to the receiver dies and is the only trace of why a cast stopped; routing it through the same switch would make the one failure worth seeing the one that disappears. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01UGY17EPph5LsLzePPXhUVc --- packages/meshbay-hub/tests/test_cast_subtitles.py | 27 +++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'packages/meshbay-hub') diff --git a/packages/meshbay-hub/tests/test_cast_subtitles.py b/packages/meshbay-hub/tests/test_cast_subtitles.py index 722a56a..3fe627d 100644 --- a/packages/meshbay-hub/tests/test_cast_subtitles.py +++ b/packages/meshbay-hub/tests/test_cast_subtitles.py @@ -391,3 +391,30 @@ def test_a_stream_without_subtitles_declares_none(loaded): """ assert "tracks" not in loaded["without"]["media"] assert loaded["without"]["options"]["activeTrackIds"] == [] + + +@chromecast_only +def test_progress_logging_is_off_unless_asked_for(): + """ + The receiver reports its state on a timer, so `player status: PLAYING` + repeats for as long as a film runs. Left on `console.log` it fills the + terminal the app was started from and buries everything else in it. + + Read rather than run because the noisy line only fires with a device on the + network. What is checked is the property that matters: nothing in this + module reaches the terminal unconditionally except a failure. `console.warn` + and `console.info` are named too — a future line using either would be just + as loud, and this guard would not otherwise see it. + """ + src = CHROMECAST.read_text(encoding="utf-8") + unconditional = [ + line.strip() for line in src.splitlines() + if ("console.log(" in line or "console.warn(" in line + or "console.info(" in line) + and not line.lstrip().startswith(("*", "//"))] + assert unconditional == [], ( + "these reach the terminal whatever the user asked for; route them " + f"through `debug` or `console.error`: {unconditional}") + # And the failure path is still audible, or a cast that dies takes its own + # explanation with it. + assert "console.error(`[cast-chromecast] client error" in src -- cgit v1.2.3