Repository navigation
Conversation
This branch has not been deployed
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.
Summary
Related #2083 — fixes the Octop server's silent capture-failure/status bug described in the report. The GPU compositor hang / virtual-display launcher policy in
octop-browseris outside this patch; this PR intentionally does not close that issue._capture_jpeg()already bounds each screenshot attempt and returnsNoneon failure, but_stream_loop()always advertisesstreamingand keeps retrying without any visible failure signal. A stuck compositor therefore leaves the viewer blank while the UI claims the stream is healthy and production logs contain no warning.Track consecutive failed captures in this connection's stream loop:
status=errorwire message and log one warning identifying the profile.status=streamingbefore the frame and reset the failure count. A later independent failure episode can report its own error.The existing dashboard hook/viewer already handles these status messages and displays its localized error/reconnect UI, so there is no new frontend production logic or user-facing string. Includes one Unreleased CHANGELOG line.
Issue and existing PR checks
develop@99e479a6b45ecf6f13a1abf32db4f2b5787240e8.Verification
Windows / Python 3.12 / frozen
uv.lock:uv run --no-sync python -m pytest tests/unit/api/test_browser_stream_capture.py tests/unit/api/test_browser_stream_listen.py tests/unit/api/test_browser_stream_mouse.py tests/unit/api/test_browser_stream_normalize_nav.py -q— 20 passed. Exercises the real capture helper with synthetic CDP timeouts / empty results / frames, and verifies wire statuses, one warning per failure episode, resets, recovery and listen-only behavior.npx vitest run src/hooks/useBrowserStream.status.test.tsx— 1 passed. Renders the actualuseBrowserStream+BrowserViewer, delivers WebSocket status messages, checks the existing failure/reconnect UI and recovery on the same connection.npx tsc -band ESLint on the new frontend test — passed.make all RUN="uv run --no-sync python -m" PYTEST_JOBS=8(ASCII path overrides for the Windows checkout) — passed: format/lint, mypy, 4607 passed / 209 skipped backend tests.These are deterministic tests; no claim is made to have reproduced an AMD/NVIDIA GPU hang on this Windows machine. The launcher/GPU root cause remains for the browser package. Remote CI remains separate from local verification.
Target branch
develop