Skip to content

test: reproduce #90 — capture completes black on desktop-size-only update - #342

Merged
sibson merged 2 commits into
mainfrom
claude/triage-issue-90
Aug 14, 2026
Merged

test: reproduce #90 — capture completes black on desktop-size-only update#342
sibson merged 2 commits into
mainfrom
claude/triage-issue-90

Conversation

@sibson

@sibson sibson commented Aug 13, 2026

Copy link
Copy Markdown
Owner

Failing reproduction for #90 (black captures against TightVNC on Windows, reported 2017–2025). This PR carries one file: the expectedFailure regression test — it is safe to merge without pulling any debugging content into main.

Mechanism. When the first framebuffer update contains only the PSEUDO_DESKTOP_SIZE pseudo-rectangle — which TightVNC's first response is, per the -v logs on the issue — updateDesktopSize replaces self.screen with a black canvas (vncdotool/client.py:413-421) and _doConnection fires commitUpdate unconditionally once the rectangle count hits zero (vncdotool/rfb.py:408-412). The pending capture completes, the black canvas is saved, and the CLI exits before the server's pixel data arrives. The QEMU key-event pseudo-rect is already special-cased as "no real update" (vncdotool/rfb.py:450-452); DesktopSize isn't.

The test replays the logged byte sequence into VNCDoToolClient with a mocked transport and asserts the refresh does not complete without pixel data. It is marked @unittest.expectedFailure so CI stays green; when the fix lands, unittest will report an unexpected success — at that point move the test into tests/unit/test_client.py, drop the marker, rename it for the behaviour it checks, and delete the standalone file.

Supporting evidence — a wire-level reproduction (scripted server replaying the TightVNC behaviour, real vncdo CLI runs, failing/working/workaround/after-fix logs) — lives in the issue thread, not in this diff, so it stays readable and the repo stays clean.

Relationship to #343: that PR fixes the bug and carries this test in final form (moved, un-marked, renamed). If #343 merges first, close this unmerged — merging both would leave an expectedFailure test that reports unexpected success on a fixed tree.

…date

A framebuffer update whose only rectangle is the PSEUDO_DESKTOP_SIZE
pseudo-encoding completes a pending non-incremental refresh:
updateDesktopSize creates a black canvas (client.py) and _doConnection
fires commitUpdate unconditionally once the rect count hits zero
(rfb.py), so captureScreen saves the black canvas and the CLI exits
before the server's pixel data arrives. TightVNC on Windows answers the
first update request exactly this way, per the -v logs on the issue.

The unit test replays the logged byte sequence into VNCDoToolClient and
is marked expectedFailure so CI stays green; it belongs in
tests/unit/test_client.py once fixed. tests/triage/issue_90/ carries a
wire-level reproduction (scripted server + vncdo runs + logs and
screenshots for both failing and working orderings) and is deleted at
fix time along with the test file.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Merging this PR should carry exactly one file into main: the
expectedFailure regression test. The scripted server, run logs and
screenshots were debugging evidence, not tree content — they now live
as text in an issue comment, which survives branch deletion and is
where the next reader of #90 will look.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@sibson
sibson merged commit 9daa4fe into main Aug 14, 2026
10 checks passed
@sibson
sibson deleted the claude/triage-issue-90 branch August 14, 2026 00:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants