Skip to content

Hunter bird: sample the person's outline clear of the idle reticle - #171

Merged
charliehuge merged 1 commit into
mainfrom
claude/fix-hunter-bird-outline-test
Nov 10, 2026
Merged

charliehuge merged 1 commit into
mainfrom
claude/fix-hunter-bird-outline-test

Conversation

@ii-impy

@ii-impy ii-impy commented Nov 8, 2026

Copy link
Copy Markdown
Contributor

Cause

test_person_has_white_fill_and_ink_outline sampled the person's left outline at body v 0.62. With nothing targeted, the reticle idles near the screen centre, and its upper-right tick crosses the standing person's left edge at exactly that height. Attention is drawn over the world, so wherever the tick lands it paints half-alpha rust over the outline.

Where it lands depends on the GPU. The tick wobbles through a sin-based hash (sdWobble/vnoise), and those hashes round differently on different drivers:

  • llvmpipe (CI): the tick lands around column 172 and misses the sampled columns 177–180. The test passes.
  • Intel hardware Mesa (the show PC): the tick covers columns 177–180 at that row, so the outline pixel reads (104, 47, 28), a mix of ink and rust. The test fails.

The test is fragile, and neither side regressed:

Fix

The fix is in the test only. It samples the fill and outline at v 0.74, above the reticle's reach. That height is still inside the right eye's opening and clear of the top lid at the test's lid openness (about 0.70). The test now also asserts that precondition from Buffer B's reticle (centre, radius + 16 G tick reach). If the reticle ever moves into the sample, the test fails with a clear message instead of failing on some GPUs only. The fill and outline assertions themselves are unchanged.

Tests

python3 -m pytest -q ShowControl/FundingCAPTCHA/test_hunter_bird.py ShowControl/FundingCAPTCHA/test_shadertoy.py: 84 passed, on Intel hardware Mesa and with LIBGL_ALWAYS_SOFTWARE=1 (llvmpipe).

🤖 Generated with Claude Code

test_person_has_white_fill_and_ink_outline checked the outline at
v 0.62, exactly where the idle reticle's upper-right tick crosses the
standing person's left edge. The tick wobbles through a sin-based hash,
so where it lands differs by GPU: on llvmpipe (CI) it misses the
sampled pixels, on Intel hardware Mesa it covers them in half-alpha rust
and the ink check fails. Neither the shader nor the eyes change (#160)
is at fault; the failure reproduces with the original #159 shaders.

Sample at v 0.74 instead, above the reticle's reach, and assert that
precondition from Buffer B so a future move of the reticle fails loudly
rather than flakily.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@charliehuge
charliehuge merged commit 5a96c1c into main Nov 10, 2026
1 check passed
@charliehuge
charliehuge deleted the claude/fix-hunter-bird-outline-test branch November 10, 2026 11:37
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