Repository navigation
linux: work-666 - #986
linux: work-666#986
Conversation
The soft keyboard now reaches the app as a bottom inset (virtualKeyboard geometrychange, or visualViewport on iOS) rather than a canvas resize. The root lays out above a spring-followed inset, and a focused field scrolls itself above it when it gains focus, the inset moves or it grows. The hidden input is clamped above the keyboard so the browser does not pan the page. Agent-Team: linux Worker: claude Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
PM note: how this PR will be handledWhat it is for: linux: work-666 Rules that apply: touches build scripts; changes agent rules or guides. Things to watch (checked by rule):
What happens next:
A living status comment below is kept current. Nothing here is a merge decision. |
Where this PR standsStage: Waiting for the maintainer What the PM needs before approving (ticks as it is met; the full CI runs only at the end, after the reviews are clean):
Rules that apply: touches build scripts; changes agent rules or guides. Reviews at the current commit (
3 earlier reviews are for older commits and will be redone. Latest fixes comment: https://github.com/fizzyedit/work/issues/668#issuecomment-6479286917 (15 findings answered) Updated 2026-10-28 21:27 UTC by the PM. This comment is edited in place. |
Agent-Team: linux Worker: codex
Part of fizzyedit/work#666
Rework: work#671
In plain words
Phone users can keep typing with their text field visible above the on-screen keyboard. Safari and Firefox now receive keyboard coverage information too, and opening the keyboard keeps the drawing surface steady. Pages containing several editors adjust only the editor being used.
What you will notice
Search, settings, rename and save fields move into view when focused or when the keyboard opens. Embedded editors account for where they sit on the page.
How this serves fizzy
Goal: phone typing (plans#115 K-4); the same usable typing experience across browsers serves the vision's one-codebase/every-platform and respect-the-person principles.
Goal
Part of fizzyedit/work#666. Answer the supplied reviews of PR #986 at de18bc1. Suggested public title: web: keep phone text fields above the keyboard.
What changed and why
Install keyboard inset reporting in both browser execution paths, clamp the hidden input, measure overlap against each canvas, and check focus ownership. Preserve the focused canvas height on resizes-content pages and omit unchanged worker size messages. Finish shared text entries through a lifecycle helper that closes their internal scroll area before revealing the field in its enclosing area. Remove a one-line getter and clarify spring units and test-global writers.
The notch findings concern unchanged code already merged in parent #971, so they are declined rather than reverting that separate change. FIXES.md answers every supplied finding; the harness supplies the final commit and posts the single FIXES response.
How it was verified
Node keyboard and embed tests exercise visualViewport, VirtualKeyboard, two-copy ownership, canvas-relative overlap, CSS height preservation, main-thread wasm delivery and worker resize suppression. Removing the main-thread listener makes the embed regression fail. The Zig regression uses a real multiline TextEntry and the production cleanup path, checking its bottom after keyboard opening and growth. Removing the production scroll call makes that test fail; restoring it passes the filtered integration gate (100/100 steps, 18/18 tests). Gate details are in GATES.md.
Not done / follow-ups
No physical phone/browser recording was available in this sandbox; browser evidence uses a fake DOM and Zig evidence uses the headless layout harness. The external console composer must adopt the same text-entry cleanup lifecycle. Publishing, title changes and the final FIXES comment are handled by the harness; no commit, push or GitHub calls were made here.
Changes (19 files, +354/-13)
Gates: 6 of 6 passed
scripts/check-fmt.sh(exit 0)scripts/zb build --summary all(exit 0)scripts/zb build test --summary all(exit 0)scripts/zb build test-integration --summary all(exit 0)scripts/zb build check-web --summary all(exit 0)scripts/zb build test-sdk-version --summary all(exit 0)