5.3 KiB
UX package 7 and iPhone screen edges — 2026-10-07
The operator approved continuing with package 7 and requested a continuous background behind the iPhone 17 Pro camera/battery/status area. They also confirmed that the generation-554 reconnect fix works on their device. Sol High retained; no delegation or model change.
Behavior
Buttons have at least 44 × 44 CSS-pixel hit areas with compact icons and visible focus. Phone headers wrap when needed; video calling moves to More actions. Menus support keyboard entry, arrow/Home/End selection, Escape with focus return, Tab and outside-pointer dismissal. A native modal fingerprint dialog contains focus and makes the background inert; the explicit opener gets focus after closing, even when opening did not focus it. New-chat and invitation fields take focus explicitly and Escape returns to their trigger. Group person actions focus their heading and return to the selected person.
The existing viewport-fit=cover is supplemented with the Apple standalone and black-translucent status-bar metadata. Canvas/theme color match the header surface under light/dark/system themes, including a system theme change. All four safe-area insets protect controls; the connection banner consumes the top inset once. Portrait-only manifest orientation is removed. Implementation/source references: the root README's phone-controls section.
Candidate evidence
Zero svelte-check errors/warnings, production build, runner syntax/diff review
and 68 passing tests (node --test --test-isolation=none test/*.test.ts).
Reports/captures stay private under /tmp/chat-ux-runner/results; credentials
and stable A/B profiles remain outside Git. No new audit device identities.
- Chromium
state-chromium-1791409417010: phone controls, drafts, actual closed-profile offline recovery, immediate Retry and group flow pass. Its old pagination assertion incorrectly required the first visible key to stay identical when a newly loaded preceding row occupied the old Load older/date space. The original message's position is now measured directly; correctedstate-chromium-1791409565255passes navigation, reload, pagination, late sizing and latest jump with unchanged source. - WebKit
state-webkit-1791409597716: controls, drafts, corrected reading anchors, Retry and complete group flow pass, zero page errors. - Controls are measured at 320/402 px portrait, 740 px compact landscape with simulated 58 px side insets, and 1280 px desktop. Simulated top/bottom insets, 32 px control text, themes, native modal containment/inertness, Escape/return, menu navigation/dismissal and the offline banner are checked. Screenshots inspected; no document overflow, composer remains on screen.
- Group checks use disposable owned rooms, exercise owner/admin/member permission differences and absent people, verify person-heading focus and return, nickname navigation, invite/leave and retained drafts. Rooms are destroyed and their bookmarks removed; production policy is untouched.
The explicit-opener regression opens the dialog while the textarea still
owns focus. Final Chromium state-chromium-1791409730063 and WebKit
state-webkit-1791409761823 pass it and all phone-controls checks, zero page
errors. Final JS assets/index-CLrBYhSP.js, SHA-256
2a2ac49b608c8bfcdada74bbbcf4aae53bf54d13dab06d8019d20d55733833e6.
Release and live evidence
Client f6feaa7 is pushed to main and pinned by blunix f96d8e1, pushed
to capability-layout. Switch succeeded as generation 555, system
/nix/store/ph97mfjp2p9czfby65vbgzp7ih56lzvm-nixos-system-blunix-26.11.20260910.8ce4ef6;
nginx root /nix/store/mch7r3n3h0yak6f0k6hvrkgvwixgzgml-0ff-chat-0.1.0.
Candidate, store and HTTPS JS hashes match. HTTP 200, unchanged strict CSP,
screen-edge metadata and revalidation headers verified. Only nginx restarted;
all ten checked platform services are active and there are zero failed units.
Fallback is 554. Existing 177 blunix handoff additions remain unstaged.
Live Chromium state-chromium-1791409921061: matching HTTPS bundle/CSP,
phone controls/focus/themes/layouts and actual closed-profile offline
history/draft recovery pass. Retry begins in 66 ms and is online in 214 ms.
Zero page errors. Live WebKit state-webkit-1791409975210 passes matching
HTTPS bundle/CSP, phone controls/focus/themes/layouts and the full owned
group/person flow, with zero page errors. All fourteen owned audit rooms
are confirmed absent after cleanup; their bookmarks were removed by the
group runner. The local preview is stopped.
The operator reloaded and fully reopened the PWA and explicitly answered “Ja, der Hintergrund geht durch” for the camera/battery/status area on their iPhone 17 Pro. This confirms that screen-edge request on the physical device; it does not certify VoiceOver, keyboard behavior or every native control.
Remaining physical-device checks
Screen-edge appearance is operator-confirmed above. Further keyboard/safe-area response, touch comfort and VoiceOver checks require the operator's phone. Linux WebKit is not native iOS certification. Fully offline WebKit emulation retains the documented limitation; actual closed-profile offline coverage uses Chromium. Reload and fully reopen the installed PWA after future rollouts. Do not clear browser storage as a routine update step. Packages 8–9 remain planned.