monal-rebuild/UX-PHONE-RESULTS.md

89 lines
5.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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; corrected `state-chromium-1791409565255` passes 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.