evidence · 14.1 KiB

README.md

Committed at docs/evidence/coherent-shell/accessibility-scale/README.md. This is what grounds the requirements that cite it.

Open raw source

Vision option: larger text and high contrast (tasks C.1–C.3)

What changed

Host evidence (2026-10-16)

Evidence class: host renders and unit tests only. The board check is task C.4 and is recorded separately.

Renders

The three generations were prepared on the host from nix/handheld-theme-default/catppuccin with theme_activate.prepare, once per choice. Each prepare was preceded by theme_vision.save(state, choice) and used state_root=<state>, user_themes=<state>/none, builtins=None and tools=HOST_TOOLS. Generation ids:

NameChoiceGeneration
defaultdefault / standarde1a358a6af0533bf8f1ef70b
largelarge / standarde60e8ad8b173237d6a98737d
highdefault / high956c733aca3ac6093f1351b0

They were rendered with:

cargo run --offline -q --manifest-path nix/rust-shell-client/Cargo.toml \
  --example render_accessibility_scale_evidence -- <out> <state>/generations \
  default=e1a358a6af0533bf8f1ef70b large=e60e8ad8b173237d6a98737d \
  high=956c733aca3ac6093f1351b0

The example writes 24 frames. Twelve of them are committed in host/: for each choice, Settings and the Vision page at 1280x800, and the Shade and the drawer at 568x1232. The grey area under the portrait Shade is the example’s backdrop, not the shell.

Limits

Board evidence by injected input (2026-10-16, task C.4 progress)

Evidence class: native grim captures from the board’s compositor, with taps injected through uinput, plus a soft reboot. These are not a camera recording or a real-finger interaction. The output was HDMI at 1280x800.

FileWhat it shows
board/01-settings.pngSettings with “Vision ›” beside “Themes ›” (default).
board/02-vision-default.pngVision page after the tap, both Off.
board/03-large.pngAfter tapping Larger text: On, text larger, “Applied to every theme”. The helper log shows handle vision … outcome=ok, and vision.json read large/standard.
board/04-both.pngAfter tapping High contrast: black background, white and yellow text. vision.json read large/high.
board/05-both-settings.pngSettings with both on.
board/06-reboot-shade.pngAfter systemctl reboot (16:51:17Z → ssh back 16:52:52Z): the Shade still draws large and high contrast. vision.json still read large/high.
board/07-reboot-vision.pngVision page after the reboot, both On.
board/08-restored.pngBoth toggled Off by tap; vision.json back to default/standard.

Limits

Panel captures (2026-10-16, DSI-1 1232x568 landscape)

Evidence class: native grim captures of the panel output, after the operator unplugged HDMI and turned on Larger text on the device (helperd vision … outcome=ok at 12:19:58). These are compositor frames, not camera photographs of the glass.

FileWhat it shows
board/09-panel-home-ring-overflow.pngHome at the larger step: the battery ring’s “100%” crossed the ring.
board/10-panel-shade.pngThe Shade at the larger step.
board/11-panel-drawer.pngThe drawer at the larger step. Long names (Files (N…, Same G…) ellipsize.
board/12-panel-home-ring-fitted.pngThe same Home after commit 91a60bfb (ring_label_size shrinks only that label to fit inside the ring). Deployed live as b6wn851s…-nixos-system-….

The operator’s own look at the glass, and their judgement of legibility, are still needed for C.4.

Redesign: four steps and reflow (2026-10-16, tasks C.5–C.7)

The operator found the drawer “not particularly legible” at the old Large step (125%) and judged a two-way normal/large choice too coarse. The redesign offers four steps: 100, 130, 160 and 200%. An existing large choice maps to 130%. Each surface reflows at a larger step instead of clipping.

Measured against the panel (568x1232 at 4.1”, about 2.07 px per dp), the 100% body text of 17–18 px is about 8.5 sp. At 200% it reaches about 17 sp. Tap targets stay at or above 99 px (48 dp).

Host evidence

Evidence class: host renders and unit tests. The board and glass checks are task C.8.

The five generations were prepared as described above, from nix/handheld-theme-default/catppuccin, with theme_vision.save before each prepare:

NameChoiceGeneration
defaultdefault / standard5c64a4c1de62429c468041bc
large130% / standardaf7b32bfc4793dfe05c678e7
larger160% / standardbcc10b3fb39a95aa3c43ea80
largest200% / standard0fc1fc47cd7b409f46f67425
largest-high200% / highc1792d0524753badee55226d

render_accessibility_scale_evidence was run with those five names. It drew 40 frames: each name for the drawer, Shade, Settings and Vision, at 568x1232 and 1232x568. The fixture app names include two-word names (“System Monitor”, “Image Viewer”).

Each file in steps/ puts the five frames of one surface and orientation side by side (portrait) or stacked (landscape), in the table’s order, at half size:

FileSurface
steps/drawer-portrait.png, steps/drawer-landscape.pngDrawer
steps/shade-portrait.png, steps/shade-landscape.pngShade
steps/settings-portrait.png, steps/settings-landscape.pngSettings, unscrolled (at 200% the Power section is below the fold and is reached by scrolling)
steps/vision-portrait.png, steps/vision-landscape.pngVision page

Limits

Panel captures of the redesign (2026-10-16, task C.8 progress)

The board ran /nix/store/sbn9x5qi1a3qlrd6sh0npjnxwiqyd70y-nixos-system-…, built from integration branch integ-cma-popup at 0c438090. That branch contains 8799961c (Home widgets) and the fit-margin commit on this branch. It was deployed live with switch-to-configuration test.

Method: the step was chosen by injected taps on the Vision page (tools/board-pointer.py). Each surface was opened with the shell socket route command. Each frame is a native grim capture of DSI-1 at 1232x568. After each change the theme helper logged outcome=ok, and k230-theme list read larger/standard or largest/standard.

Evidence class: injected input and native captures. These are not real-finger interaction and not a judgement on glass.

FileWhat it shows
board/13-panel-200-home-before-widget-fix.pngHome at 200% before 8799961c: the clock overlaps and the battery stats truncate.
board/14-panel-200-home.pngHome at 200% after the fix. The widgets keep their cell-proportional text, and the battery grid uses two columns.
board/15-panel-200-drawer.pngDrawer at 200%.
board/16-panel-200-shade.pngShade at 200%.
board/17-panel-200-settings.pngSettings at 200%, unscrolled.
board/18-panel-200-vision.pngVision page at 200%.
board/19-panel-160-home.pngHome at 160%.
board/20-panel-160-drawer.pngDrawer at 160%.
board/21-panel-160-shade.pngShade at 160%. The title “Notifications” is whole; before the 4% fit margin it ellipsized to “Notificatio…”.
board/22-panel-160-settings.pngSettings at 160%. The keyboard hint caption fits.
board/23-panel-160-vision.pngVision page at 160%.

After the capture, the board was set back to largest/standard.

Limits

Operator judgement on glass (2026-10-16)

Evidence class: the operator looked at the landscape panel. No camera recording was made. Verbatim: “it’s all good however the clock widget could use a redesign it’s got some text too small to see really but yeah it’s good”. This accepts C.8 and closes C.4.