evidence · 7.1 KiB

README.md

Committed at docs/evidence/card-shell/transparent-corners/README.md. This is what grounds the requirements that cite it.

Open raw source

Live cards reveal the wallpaper through rounded corners

Headless QEMU capture — not a board screenshot or a design mockup. The actual cross-built Sway/Pixman compositor now clips live card draws to rounded geometry. The previous implementation painted solid theme-colored patches over the corners, which visibly interrupted a wallpaper.

QEMU capture: real wallpaper through the selected and neighboring card corners

Before: opaque corner patches · Unobscured wallpaper baseline · Held horizontal drag · Held app-to-overview gesture · Held direct app switch · Opened app · ARGB client and translucent corner subsurface

These synthetic moving-band clients deliberately expose stale pixels and edge errors. This patterned wallpaper is generated by the fixture to make incorrect solid fills obvious; these are correctness captures, not a proposed visual theme. Native screenshots and user touch acceptance remain open.

What passed

The fixture’s first draft omitted its appearance-socket setting and therefore showed the solid fallback; it correctly failed the wallpaper comparison. Visual review also caught unstable concurrent client mapping, which could leave one neighbor off-screen. The final fixture maps clients sequentially and checks both slivers before accepting the corner result. Those fixture setup errors are not counted as compositor failures or passing wallpaper trials. The corrected fixture and final-binary trials are committed.

Source and artifacts

Source: 4b33dda9 on fix/transparent-card-corners, based on bb427e19. The code checkpoint is d67c600b; the follow-up also makes the wallpaper pause calculation honor rounded transparency. The RGB565 thumbnail cache format and byte budget remain unchanged.

The local wlroots extension is implemented in the production Pixman renderer. It adds scene damage, conservative rounded opaque regions, and rejects direct scanout for clipped nodes. It does not add or claim rounded rendering in the separate experimental VG-Lite/GLES/Vulkan paths. CPU cost and frame pacing on the physical board are UNVERIFIED.

Reproduce

From the repository root:

python3 -m pytest tests/test_card_rounded_clip.py tests/test_card_scaled_cache.py tests/test_card_shell_state.py -q
cc -std=c11 -Wall -Wextra -Werror -g -fsanitize=address,undefined -fno-omit-frame-pointer -I nix/card-shell tests/card_rounded_clip.c $(pkg-config --cflags --libs pixman-1) -lm -o /tmp/k230-rounded-asan
ASAN_OPTIONS=detect_leaks=1 /tmp/k230-rounded-asan
nix build .#card-shell --max-jobs 1 --cores 4 --no-link --print-out-paths

Build the ordinary host probe from the unchanged source:

mkdir -p /tmp/k230-rounded-client
wayland-scanner client-header /usr/share/wayland-protocols/stable/xdg-shell/xdg-shell.xml /tmp/k230-rounded-client/xdg-shell-client-protocol.h
wayland-scanner private-code /usr/share/wayland-protocols/stable/xdg-shell/xdg-shell.xml /tmp/k230-rounded-client/xdg-shell-protocol.c
cc -std=c11 -O2 -Wall -Wextra -Werror -I /tmp/k230-rounded-client nix/card-composition-probe-client/card-composition-probe-client.c /tmp/k230-rounded-client/xdg-shell-protocol.c $(pkg-config --cflags --libs wayland-client) -o /tmp/k230-rounded-client/client

The checked-in ARGB variant builder uses explicit substitutions, leaving the ordinary probe source untouched:

python3 tests/build_card_rounded_probe.py --output /tmp/k230-rounded-argb-client
python3 tests/card_rounded_clip_qemu.py \
  --sway /nix/store/7zvingic0whhz3z80w2gcpc343vipf7q-sway-unwrapped-riscv64-unknown-linux-gnu-1.12/bin/sway \
  --client /tmp/k230-rounded-client/client \
  --swaybg /nix/store/yhh05srfyhf81cdrm0f9ckxajjgh9qql-swaybg-riscv64-unknown-linux-gnu-1.2.2/bin/swaybg \
  --cache 1 --output /tmp/k230-rounded-complete-cache

Repeat with --cache 0 for direct draws, and with --client /tmp/k230-rounded-argb-client/client for the ARGB/corner-child case, choosing a fresh output directory each time. The negative control uses Sway /nix/store/vvca8zksyarjb7s7vfrs1p9c9lpp9jnn-sway-unwrapped-riscv64-unknown-linux-gnu-1.12/bin/sway and is expected to exit 1 at the wallpaper assertion.

Subsequent board trial

Native board screenshot and guarded trial now show wallpaper through the real terminal cards. This is a temporary compositor trial on the existing system; matching-system installation and finger acceptance remain open.

Remaining physical gate

The QEMU slice above used no board; the subsequent board trial is recorded separately and does not replace the integrated installation gate. After coordinator review/integration, build the combined system and perform a guarded activation. Capture the installed compositor over an actual theme wallpaper with live apps; record the system/Sway store paths and native screenshot. Keep real-finger gesture smoothness acceptance separate. The OpenSpec change remains open for those gates.