evidence · 7.4 KiB

README.md

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

Open raw source

Android-recents-sized, rounded overview cards: headless-QEMU evidence

Historical corner implementation. The opaque overlays described here were replaced by actual compositor clipping over wallpaper. These original captures remain evidence of the earlier geometry pass.

Evidence for the operator’s explicit ask (“i think the cards should have a border radius and fill a lot of the screen not be tiny idk more like android does”) and docs/design/shell-polish-review-2026-09.md §6: resizing the overview’s focused card from the prior webOS-fan pass (50% of the panel’s width, 60% of its height) to an Android-recents proportion (80% of both), and giving it a visibly rounded 26px corner radius with no background or border behind the live content — the card IS the app content, scaled.

Revised once after coordinator review. A first pass kept the existing content plate (a themed, filled, stroked rounded rect behind the mirrored content, inset by a growing pad so its rounded corner peeked out around the square content) and only raised its radius (8px->26px) and pad (10px->32px). The coordinator reviewed that pass’s after-* screenshots and identified that a 32px padded plate is exactly the visible background the operator had separately, explicitly rejected: “when i swipe up to see active windows the cards have some background behind them that’s no good they should just be cards.” The after-* files below are the second, plate-free pass: live cards have no plate at all; rounding comes from four small corner-mask patches (card_corner_mask_scene) painted over the mirrored content’s own square corners in the deck’s backdrop colour. See openspec/changes/the-overview-shows-large-rounded-cards/design.md decisions 3-5 for the full technique and cost discussion.

Method

Same harness and method as docs/evidence/card-shell/webos-fan-switcher/README.md, run against nix build .#card-shell from this branch (feat/android-sized-cards): the real cross-built riscv64 Sway under qemu-riscv64-static user-mode emulation, real .desktop/icon resolution (nix/handheld-desktop-entries.nix-equivalent fixtures, Yaru icon theme), and the real card_shell test-touch IPC path driving the production cs_down/cs_motion/cs_up policy code, at the real panel size (568x1232). This is headless-QEMU proof (real cross-built compositor code, real IPC, real synthetic touch), not board/panel/real-finger touch proof. No board or /dev/ttyACM0 access was used.

Files

What the after-sequence shows

  1. 01-overview — the focused card now fills most of the panel, its content touching the card’s own edges with no visible border or fill behind it, and all four corners show a clean 26px rounded cut painted in the surrounding backdrop colour — compare directly against before-dark-01-overview.png’s much smaller card, which additionally shows a visible bordered plate around a smaller live thumbnail. Confirmed in both dark and light themes (after-light-01-overview.png): the corner-mask colour tracks the active theme’s own canvas colour, not a fixed value.
  2. 04-after-close — checked at pixel level (docs/evidence/ capture cropped and zoomed for this review) to confirm all four corners round correctly, not just the two nearest the panel’s own edges — a coarse thumbnail view can make a correctly-rounded corner look square next to a card-header icon; the zoomed crop confirms the arc is present and correctly oriented at all four corners.
  3. 02-scrolling / 03-scrolled-settled — the same fling-projects-the- resting-card physics as before (unchanged cs_up/cs_tick code), now recalibrated in tests/card_shell_policy_driver.c for the wider pitch (see that file’s horizontal/scroll_fling_multi_card/ scroll_end_clamp_soft/stream_cancel* comments): the fan still flicks through multiple cards and settles centered, just at the new size.
  4. 04-after-close — flick-up-to-close still works at the new card size; the remaining cards re-flow with no overlap artifact, still rounded.
  5. 05-opened — tap-to-expand still reaches a clean, full-bleed, square-cornered single-app frame (an ordinary maximized Sway view is not part of the card deck and is never corner-masked), confirming the compositor still leaves CS_DECK correctly.

What this does not show

Commands

nix build .#card-shell --max-jobs 1 --cores 6 --no-link --print-out-paths
SWAYBIN=$(nix-store -qR <that path> | grep -m1 sway-unwrapped-riscv64)/bin/sway
python3 tools/capture-webos-fan-switcher.py --sway "$SWAYBIN" \
  --client <host-arch nix/card-composition-probe-client build> \
  --icon-roots <symlinkJoin of pkgs.foot, pkgs.htop, nix/handheld-theme-icons> \
  --output /tmp/k230-fs-after