Skip to content

fix(core): the keyboard height reads the whole keyboard while Safari pans to a focused field - #9983

Open
vjeux wants to merge 2 commits into
meta:mainfrom
vjeux:uikit/c08-keyboard-pan
Open

vjeux wants to merge 2 commits into
meta:mainfrom
vjeux:uikit/c08-keyboard-pan

Conversation

@vjeux

@vjeux vjeux commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

Stack: #9983 → #8217
Merge group: #9983, #8217

User impact

While Safari on iOS pans the page to a focused field near the bottom, the keyboard module measured no keyboard, so readers such as useMobileKeyboard's recovery check took it as down. During that pan Safari reports innerHeight as the visual viewport's height (377 of 714 on iOS 26.2).

Problem and solution fit

layoutViewportHeight read innerHeight, but the root's client height keeps the layout viewport's 714. At a visual-viewport scale of 1, where innerHeight equals the visual viewport's height and the root is as wide as the visual viewport, taking the larger of the two restores the keyboard's height. Elsewhere nothing changes: a zoomed-out page's scaled innerHeight and unscaled root differ in units, a layout wider than the screen has a taller root, and the scroll clamp reads as on main.

Expected behavior and authority

spec:AST-099 FR2: "A page pan or a visual-viewport offset is a pan to put back (FR4), never a smaller keyboard." The FR2 verification row now names Safari's pan to a focused field and the Simulator.

Smallest restoration

layoutViewportHeight returns the larger of its current value and the root's client height (the body's in quirks mode), in that one state. The README's ride formula now uses layoutViewportHeight(window). No API change.

Evidence

The module's own reading on a page Safari pans (a local probe story, not in the diff), iOS 26.2 Simulator, hostname masked:

Before: keyboard height 0 px with the keyboard up; after: 337 px

  • Reproduction before the change: innerHeight 377, root 714, visual viewport 377 panned 337: the module reads 0 (2 takes).
  • Result after the change: it reads 337, the whole keyboard (2 takes).
  • Representative unchanged path: unit cases keep a zoomed-out page and a layout wider than the screen at no keyboard, and the scroll clamp at main's reading. On the Android emulator at this head (table in Testing), the root's client height equals innerHeight in every reading, so the floor returns main's value.
  • Regression test: layoutViewport.test.ts and keyboardHeight.test.ts pan cases, red on main.

Open PRs on these files: #9776 touches other hunks of the keyboard module; #9777 adds layoutViewport.ts from an older base and takes this fix when it rebases.

Scope

  • One defect is restored.
  • Separable contradictory or unsettled tagalongs were removed or split.
  • No new public API, visual representation, default, or interaction model is hidden under the bug-fix label.
  • Public text and artifacts contain no internal Meta context.

Writing rubric results

R1 narration: none (the row states what verifies FR2). R2 research: none. R3 evidence: the row names its tests and the Simulator, no change. R4 rejected alternatives: none. R5 change references: none. R6 open questions: none.

Testing

  • Rebased onto main 9f84782 with no conflicts; the patch is identical to the previous head 280bac1.
  • Red-first: on main's layoutViewport.ts, the 2 pan cases fail (one per test file); with the change all pass. The wide-layout, zoomed-out and scroll-clamp cases pass on main and here; the wide-layout cases fail on the previous head (a 1,105 px keyboard with none shown).
  • vitest --project ui keyboard module and layoutViewport: 74/74. Core units: 21,147 of 21,151 pass; the other 4, in Switch.focusRing.source-build.test.mjs and RadioListItem.press.source-build.test.mjs, fail on main too (a fresh install has no @babel/preset-react at the root).
  • Core typecheck 0 errors; strict ESLint (CI=true) 0 errors; Prettier; pnpm check:knowledge.

Android emulator readings at this head (CSS px; a local probe page, not in the diff, reads the module built from this head; Android 16 BE2A.250530.026.D1, Chrome 133.0.6943.137 with Gboard 15.1.08, Firefox 159.0.1; a field at the page's bottom, tapped, then Back):

Browser, page Keyboard innerHeight Root client height Visual viewport (height @ offsetTop, scale) Module's keyboard height
Chrome + Gboard, default down 811 811 811.43 @ 0, 1 0
Chrome + Gboard, default up 811 811 499.43 @ 312, 1 311.57
Chrome + Gboard, resizes-content down 811 811 811.43 @ 0, 1 0
Chrome + Gboard, resizes-content up 499 499 499.43 @ 0, 1 0
Firefox, default down 796 796 795.6 @ 0, 1 0
Firefox, default up 796 796 486.2 @ 245.93, 1 309.8
Firefox, resizes-content down 796 796 795.6 @ 0, 1 0
Firefox, resizes-content up 486 486 486.2 @ 0, 1 0
  • Every row reads the same with animations at normal scale, with animations removed (window, transition and animator scales 0), and under a slow-device profile (the emulator held to one host core); only Firefox's slow default pass read offsetTop 0, before its pan. Back returns every pass to its "down" row. 12 passes, every screenshot viewed; a second run of the same 12 read the same numbers.
  • Under resizes-content, innerHeight equals the visual viewport's height at scale 1 with the keyboard up, so the new branch runs; the root shrinks with them, so it returns the same value as main.
  • iOS 26.2 Simulator (iPhone 17 Pro, Mobile Safari): a page whose field sits at its bottom, focused by a tap; the module's reading shown by a local probe story; 2 takes per build at 280bac1 (the same patch), order-balanced; frames viewed.

@vercel

vercel Bot commented Nov 4, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
astryx Ready Ready Preview Nov 6, 2026 10:12pm UTC

Request Review

@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Meta Open Source bot. label Nov 4, 2026
@astracat-bot

astracat-bot Bot commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

AI review status for this pull request.

Review status Updated
🟡 Reviewed (for maintainers only) Nov 6, 2026, 11:28 PM UTC

@github-actions github-actions Bot added the needs:spec-owner-review Current knowledge records await owner approval label Nov 4, 2026
@cixzhang

cixzhang commented Nov 4, 2026

Copy link
Copy Markdown
Contributor

/approve-spec 0dbf6f3

@github-actions github-actions Bot removed the needs:spec-owner-review Current knowledge records await owner approval label Nov 4, 2026
@github-actions

github-actions Bot commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

PR Analysis Report

🔎 Preview · 76289f2

Storybook · Sandbox · built from this PR's head

Modified components

Component Size LoC
lab/Comments 307.9 kB (+91 B) · 2.5 kB CSS (0) —
lab/CommentPin 52.9 kB (+88 B) · 1.2 kB CSS (0) —
DropdownMenuSubMenu 64.9 kB (+83 B) · 9.4 kB CSS (0) —
110 more components
Component Size LoC
SideNavHeading 67.1 kB (+82 B) · 10.7 kB CSS (0) —
ChatComposer 68.7 kB (+81 B) · 11.3 kB CSS (0) —
AvatarGroupOverflow 44.7 kB (+80 B) · 5.5 kB CSS (0) —
lab/CommentThread 302.7 kB (+80 B) · 2.4 kB CSS (0) —
Carousel 60.9 kB (+79 B) · 10.4 kB CSS (0) —
DropdownMenu 87.6 kB (+79 B) · 16.8 kB CSS (0) —
Popover 79.9 kB (+79 B) · 13.5 kB CSS (0) —
TableSelectionToolbar 61.6 kB (+79 B) · 12.5 kB CSS (0) —
Thumbnail 56.4 kB (+79 B) · 11.0 kB CSS (0) —
MoreMenu 87.8 kB (+78 B) · 16.8 kB CSS (0) —
Toolbar 39.8 kB (+78 B) · 7.9 kB CSS (0) —
TopNavHeading 66.6 kB (+78 B) · 10.5 kB CSS (0) —
lab/ListInput 96.6 kB (+78 B) · 1.6 kB CSS (0) —
DateTimeInput 199.4 kB (+77 B) · 18.2 kB CSS (0) —
Typeahead 74.7 kB (+77 B) · 12.2 kB CSS (0) —
lab/CommentComposer 139.2 kB (+77 B) · 1.9 kB CSS (0) —
AppShell 82.0 kB (+76 B) · 12.9 kB CSS (0) —
MobileNav 62.2 kB (+76 B) · 10.0 kB CSS (0) —
Selector 94.0 kB (+76 B) · 16.9 kB CSS (0) —
Slider 102.0 kB (+76 B) · 8.7 kB CSS (0) —
lab/EmojiPicker 81.6 kB (+76 B) · 751 B CSS (0) —
Banner 54.1 kB (+75 B) · 9.9 kB CSS (0) —
BreadcrumbItem 76.2 kB (+75 B) · 11.5 kB CSS (0) —
Lightbox 103.3 kB (+75 B) · 9.9 kB CSS (0) —
Link 49.0 kB (+75 B) · 6.9 kB CSS (0) —
Calendar 63.0 kB (+74 B) · 10.0 kB CSS (0) —
DateInput 177.1 kB (+74 B) · 16.5 kB CSS (0) —
ToggleButton 52.9 kB (+74 B) · 9.5 kB CSS (0) —
TopNavMegaMenu 61.4 kB (+74 B) · 11.2 kB CSS (0) —
lab/DiffViewer 78.4 kB (+74 B) · 2.1 kB CSS (0) —
Button 52.0 kB (+73 B) · 9.4 kB CSS (0) —
InfoTip 43.5 kB (+73 B) · 5.3 kB CSS (0) —
MobileNavToggle 52.4 kB (+73 B) · 9.4 kB CSS (0) —
TimeInput 153.8 kB (+73 B) · 15.6 kB CSS (0) —
Tooltip 26.1 kB (+73 B) · 4.3 kB CSS (0) —
DrawerHeader 55.1 kB (+72 B) · 12.3 kB CSS (0) —
SideNavCollapseButton 52.9 kB (+72 B) · 9.5 kB CSS (0) —
Stepper 53.7 kB (+72 B) · 9.6 kB CSS (0) —
TabList 40.4 kB (+72 B) · 6.4 kB CSS (0) —
TabMenu 63.5 kB (+72 B) · 10.5 kB CSS (0) —
lab/SelectableCardGroup 60.0 kB (+72 B) · 162 B CSS (0) —
lab/TransferListSelector 98.3 kB (+72 B) · 1.9 kB CSS (0) —
richtext/RichTextEditor 291.3 kB (+72 B) · 2.6 kB CSS (0) —
ChatLayout 55.3 kB (+71 B) · 9.9 kB CSS (0) —
ChatSendButton 52.5 kB (+71 B) · 9.4 kB CSS (0) —
CheckboxList 54.5 kB (+71 B) · 7.9 kB CSS (0) —
IconButton 52.1 kB (+71 B) · 9.4 kB CSS (0) —
Pagination 104.1 kB (+71 B) · 17.3 kB CSS (0) —
Table 100.8 kB (+71 B) · 17.3 kB CSS (0) —
Avatar 39.7 kB (+70 B) · 5.5 kB CSS (0) —
BaseTypeahead 62.3 kB (+70 B) · 10.4 kB CSS (0) —
DateRangeInput 87.0 kB (+70 B) · 12.2 kB CSS (0) —
richtext/RichTextEditorToolbar 245.2 kB (+70 B) · 454 B CSS (0) —
ChatDictationButton 52.6 kB (+69 B) · 9.5 kB CSS (0) —
CodeBlock 66.8 kB (+69 B) · 10.7 kB CSS (0) —
HoverCard 24.6 kB (+69 B) · 4.3 kB CSS (0) —
MultiSelector 89.5 kB (+69 B) · 16.4 kB CSS (0) —
SegmentedControl 89.7 kB (+69 B) · 6.8 kB CSS (0) —
SideNavItem 62.0 kB (+69 B) · 10.5 kB CSS (0) —
StatusDot 27.8 kB (+69 B) · 5.3 kB CSS (0) —
TableCell 92.5 kB (+69 B) · 17.0 kB CSS (0) —
TopNav 63.8 kB (+69 B) · 10.3 kB CSS (0) —
TopNavMenu 66.3 kB (+69 B) · 10.6 kB CSS (0) —
richtext/RichTextView 271.5 kB (+69 B) · 2.3 kB CSS (0) —
charts/ChartTooltip 158.0 kB (+68 B) · 423 B CSS (0) —
FileInput 64.5 kB (+68 B) · 10.7 kB CSS (0) —
Markdown 163.1 kB (+68 B) · 19.6 kB CSS (0) —
NumberInput 67.1 kB (+68 B) · 11.1 kB CSS (0) —
lab/ChatReactionBar 99.0 kB (+68 B) · 1.1 kB CSS (0) —
lab/TourStep 86.2 kB (+68 B) · 590 B CSS (0) —
lab/TransferList 91.3 kB (+68 B) · 1.7 kB CSS (0) —
AlertDialog 96.2 kB (+67 B) · 13.8 kB CSS (0) —
AvatarGroup 42.4 kB (+67 B) · 5.6 kB CSS (0) —
ChatComposerInput 66.7 kB (+67 B) · 10.7 kB CSS (0) —
ChatLayoutScrollButton 52.5 kB (+67 B) · 9.6 kB CSS (0) —
DialogHeader 54.8 kB (+67 B) · 10.9 kB CSS (0) —
RadioListItem 63.0 kB (+67 B) · 9.8 kB CSS (0) —
SideNav 81.7 kB (+67 B) · 10.8 kB CSS (0) —
TableHeaderCell 92.1 kB (+67 B) · 16.8 kB CSS (0) —
TextArea 58.1 kB (+67 B) · 9.2 kB CSS (0) —
lab/ChatEmojiPicker 97.9 kB (+67 B) · 773 B CSS (0) —
BottomSheet 63.1 kB (+66 B) · 7.5 kB CSS (0) —
ChatComposerTokenElement 66.7 kB (+66 B) · 10.7 kB CSS (0) —
FieldLabel 47.4 kB (+66 B) · 5.6 kB CSS (0) —
Switch 96.6 kB (+66 B) · 9.8 kB CSS (0) —
Toast 89.6 kB (+66 B) · 9.7 kB CSS (0) —
Tokenizer 86.1 kB (+66 B) · 18.1 kB CSS (0) —
CheckboxInput 60.1 kB (+64 B) · 9.1 kB CSS (0) —
ContextMenu 91.4 kB (+64 B) · 16.6 kB CSS (0) —
InputGroup 52.3 kB (+64 B) · 7.8 kB CSS (0) —
lab/Schedule 100.0 kB (+64 B) · 3.9 kB CSS (0) —
charts/Chart 180.5 kB (+63 B) · 494 B CSS (0) —
CheckboxListItem 66.1 kB (+63 B) · 10.9 kB CSS (0) —
ComplexSelector 66.2 kB (+63 B) · 11.4 kB CSS (0) —
PowerSearch 275.2 kB (+63 B) · 23.2 kB CSS (0) —
ListItem 65.1 kB (+59 B) · 10.9 kB CSS (0) —
TextInput 63.1 kB (+58 B) · 10.9 kB CSS (0) —
Field 50.7 kB (+57 B) · 7.2 kB CSS (0) —
RadioList 52.1 kB (+57 B) · 7.2 kB CSS (0) —
CommandPalette 59.7 kB (+1 B) · 12.4 kB CSS (0) —
ChatMessageList 23.9 kB (0) · 6.9 kB CSS (0) —
ChatToolCalls 27.8 kB (0) · 8.3 kB CSS (0) —
CommandPaletteInput 27.9 kB (0) · 7.5 kB CSS (0) —
Heading 8.2 kB (0) · 5.3 kB CSS (0) —
Spinner 20.5 kB (0) · 6.1 kB CSS (0) —
Text 7.6 kB (0) · 5.3 kB CSS (0) —
Timer 9.7 kB (0) · 5.9 kB CSS (0) —
ProgressBar 11.5 kB (−1 B) · 6.2 kB CSS (0) —
charts/ChartLegend 35.8 kB (−2 B) · 224 B CSS (0) —
Timestamp 23.2 kB (−2 B) · 9.7 kB CSS (0) —

Package size: @astryxdesign/core 6.82 MB packed (+888 B); no new dependencies.

API changes: none in this pull request

Committed API report behind this build: cli 19 rows, core 24 rows; run pnpm api:report.

Not run on this PR: add ci:run-visual, ci:run-a11y or ci:run-rtl to run them.


Generated by PR Enrichment workflow | View full report

@astracat-bot astracat-bot Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Requesting changes: the fix restores the keyboard height in the Safari focus pan it targets, but the new root-height floor makes a zoomed-out page report a keyboard that is not there.

  • layoutViewportHeight (packages/core/src/utils/layoutViewport.ts:49-52) compares the root's unscaled client height with the scaled innerHeight * scale reading, so a page with no width=device-width viewport or a fixed width=1024 viewport now reads a 984–1,246 px keyboard with none shown (0 before), against AST-099 FR2; apply the floor only where the units match (for example at a visual-viewport scale of 1) and add a no-keyboard test for a zoomed-out page.
  • The ride formula in packages/core/src/keyboard/README.md (line 96) still computes the keyboard's top as innerHeight − height, which is now 40 px during Safari's focus pan instead of the 377 px the hook uses, so it should read layoutViewportHeight(window) − height.
  • The Android claims (resizes-content still reading 0, Chrome's toolbar-hidden height kept) and the scroll-clamp change rest on unit fixtures with assumed root heights, while AST-099 DEC-3 asks for emulator evidence for Android claims, so please add emulator readings (Chrome with Gboard and Firefox for Android) and a Simulator reading of the clamp state at the fixed head.

The four red-first unit cases and the Simulator capture show the focus-pan fix itself.

[Automated review]

@astracat-bot astracat-bot Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Still requesting changes: the scale-1 gate restores the keyboard height during Safari's focus pan, but it lets a fixed-width page wider than the screen read a keyboard that is not there, and the Android readings the keyboard record requires are missing.

  • layoutViewportHeight (packages/core/src/utils/layoutViewport.ts:52-56) takes the root's client height whenever the scale is 1 and innerHeight equals the visual viewport's height, so a width=1024, initial-scale=1, user-scalable=no (or minimum-scale=1) page with no keyboard reads a 1,246 px keyboard in Chromium's Pixel 7 emulation where it read 0 before, against AST-099 FR2; also require the root to be as wide as the visual viewport, and add a no-keyboard test for a wider layout at scale 1.
  • The new branch also runs on Android, but the change has no emulator evidence, which AST-099's Platform support and DEC-3 require at the exact head before merge; please add keyboard-height readings in Chrome with Gboard (default and resizes-content) and in Firefox for Android at the fixed head.

The red-first pan tests and the Simulator capture show the focus-pan fix itself.

[Automated review]

@cixzhang

cixzhang commented Nov 4, 2026

Copy link
Copy Markdown
Contributor

/approve-spec 280bac1

@astracat-bot astracat-bot Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Requesting changes: the scale-1 root floor now restores the keyboard height during Safari's focus pan and keeps a layout wider than the screen at no keyboard, but the Android emulator readings the keyboard record requires at this head are not on the pull request.

  • The new branch in layoutViewportHeight (packages/core/src/utils/layoutViewport.ts:54-61) also runs on Android, and AST-099's Platform support and DEC-3 make emulator evidence at the exact head a merge gate, so please post here the readings the description attributes to another run: innerHeight, the root's client height, the visual viewport and the module's keyboard height, keyboard up and down, in Chrome with Gboard (default and resizes-content) and in Firefox for Android.

The red-first pan tests, the new wide-layout tests and the Simulator capture cover the iOS fix itself.

[Automated review]

expect(layoutViewportHeight(win)).toBe(377);
});

it('keeps innerHeight where it is taller than the root, as in Chrome on Android with its toolbar hidden', () => {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This case and the resizes-content case above encode Android readings from assumed root heights. AST-099's Platform support makes emulator evidence at the exact head a merge gate, so please post the emulator's own readings at this head on the pull request: Chrome with Gboard (default and resizes-content) and Firefox for Android, keyboard up and down.

…pans to a focused field

While Safari on iOS 26.2 pans the page to a focused field near the bottom,
it reports innerHeight as the visual viewport's height (377 of 714 with
the keyboard up). layoutViewportHeight read innerHeight, so the keyboard
module measured 0, as if no keyboard were up, against AST-099 FR2 ("a page
pan is never a smaller keyboard"). The root's client height keeps the
layout viewport's height. At a visual-viewport scale of 1, where
innerHeight equals the visual viewport's height and the root is as wide
as the visual viewport, layoutViewportHeight now takes the larger of the
two. Everywhere else it is unchanged: a zoomed-out page's scaled
innerHeight and the root's unscaled height are in different units, a
layout wider than the screen gives a root taller than the screen, and the
scroll clamp reads as before.

The README's ride formula now takes the keyboard's top from
layoutViewportHeight(window), not innerHeight.

@astracat-bot astracat-bot Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Requesting changes: the scale-1 root floor restores the keyboard height during Safari's pan to a focused field and keeps zoomed-out and wider-than-screen layouts at no keyboard, but the Android emulator readings the keyboard record requires at the exact head are still not on the pull request.

  • The new branch in layoutViewportHeight (packages/core/src/utils/layoutViewport.ts:54-61) also runs on Android, and AST-099's Platform support makes emulator evidence at the exact head a merge gate, so please post here the readings the description attributes to another run (innerHeight, the root's client height, the visual viewport and the module's keyboard height, keyboard up and down) in Chrome with Gboard, default and resizes-content, and in Firefox for Android.

The red-first pan tests and the Simulator capture cover the iOS fix itself.

[Automated review]

@vjeux

vjeux commented Nov 5, 2026

Copy link
Copy Markdown
Contributor Author

The readings at this head are now in the description's Testing section. They come from the Android 16 emulator: Chrome 133 with Gboard, default and resizes-content, and Firefox 159, keyboard down and up. A local probe page reads the module built from 86c74e8.

  • Chrome default, keyboard up: innerHeight 811, root 811, visual viewport 499.43 @ 312, keyboard 311.57.
  • Chrome resizes-content, keyboard up: 499, 499, 499.43 @ 0, keyboard 0.
  • Firefox default, keyboard up: 796, 796, 486.2 @ 245.93, keyboard 309.8.
  • Firefox resizes-content, keyboard up: 486, 486, 486.2 @ 0, keyboard 0.
  • Keyboard down: all four browser and page pairs read 0, with innerHeight and the root equal (811 or 796).

The root's client height equals innerHeight in every reading, so the floor returns main's value. Under resizes-content the new branch runs, and the root shrinks with the viewport. The readings are the same with animations at normal scale, with animations removed, and under a slow-device profile.

@astracat-bot

astracat-bot Bot commented Nov 5, 2026

Copy link
Copy Markdown
Contributor

In reply to @vjeux

I'll run a full review to re-check this with your note.

@astracat-bot astracat-bot Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving: the scale-1 root floor in layoutViewportHeight restores the whole keyboard height during Safari's pan to a focused field and keeps zoomed-out and wider-than-screen layouts at no keyboard, and the Android emulator readings at this head now cover Chrome with Gboard (default and resizes-content) and Firefox for Android.

Approved pending CI: CI has not run on this head yet, because its branch is in a fork; a maintainer adds the ci:run label so CI runs.

[Automated review]

@vjeux
vjeux marked this pull request as ready for review November 5, 2026 15:18
@cixzhang cixzhang added the ci:run A maintainer lets this outside contributor's pull request run CI (AST-030 FR17) label Nov 6, 2026
@cixzhang
cixzhang marked this pull request as draft November 6, 2026 17:26
@cixzhang
cixzhang marked this pull request as ready for review November 6, 2026 17:27
@github-actions github-actions Bot added the needs:spec-owner-review Current knowledge records await owner approval label Nov 6, 2026
@cixzhang

cixzhang commented Nov 6, 2026

Copy link
Copy Markdown
Contributor

/approve-spec 76289f2

@github-actions github-actions Bot removed the needs:spec-owner-review Current knowledge records await owner approval label Nov 6, 2026

@astracat-bot astracat-bot Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Requesting changes: the scale-1 root floor in layoutViewportHeight still restores the whole keyboard height during Safari's pan to a focused field and keeps zoomed-out and wider-than-screen pages at no keyboard, and CI passes on this head, but the merge from main needs the Android emulator readings taken again.

  • Regression: merging main moved the head after the Android emulator readings were taken, and AST-099's Platform support requires them at the exact head now that the merged docked ride, reveal and room checks read layoutViewportHeight, so please re-take the Chrome-with-Gboard (default and resizes-content) and Firefox for Android readings, keyboard up and down, with the three animation and device profiles, on a build of this head, and refresh the Testing section, which still describes the earlier rebase.

[Automated review]

This branch was successfully deployed

1 active deployment
Preview — 76289f2e Deployed Nov 6, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci:run A maintainer lets this outside contributor's pull request run CI (AST-030 FR17) CLA Signed This label is managed by the Meta Open Source bot.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants