Repository navigation
Replace react-positioning runtime with parity engine - #36951
Draft
Dmytro Kirpa (dmytrokirpa) wants to merge 9 commits into
Draft
Dmytro Kirpa (dmytrokirpa) wants to merge 9 commits into
Dmytro Kirpa (dmytrokirpa) wants to merge 9 commits into
Conversation
Dmytro Kirpa (dmytrokirpa)
added this pull request to stack #36952
October 20, 2026 09:34
Dmytro Kirpa (dmytrokirpa)
marked this pull request as draft
October 20, 2026 09:46
|
Pull request demo site: URL |
…-contracts' into dmytrokirpa-upstream-positioning-engine
…-contracts' into dmytrokirpa-upstream-positioning-engine
Dmytro Kirpa (dmytrokirpa)
removed this pull request from stack #36952
October 23, 2026 17:11
Dmytro Kirpa (dmytrokirpa)
changed the base branch from
dmytrokirpa-upstream-positioning-contracts
to
master
October 23, 2026 17:11
📊 Bundle size reportUnchanged fixtures
|
| @@ -0,0 +1,6 @@ | |||
| { | |||
There was a problem hiding this comment.
🕵🏾♀️ visual changes to review in the Visual Change Report
vr-tests-react-components/Avatar Converged 2 screenshots
| Image Name | Diff(in Pixels) | Image Type |
|---|---|---|
| vr-tests-react-components/Avatar Converged.badgeMask - RTL.normal.chromium.png | 6 | Changed |
| vr-tests-react-components/Avatar Converged.badgeMask.normal.chromium.png | 6 | Changed |
vr-tests-react-components/Positioning 2 screenshots
| Image Name | Diff(in Pixels) | Image Type |
|---|---|---|
| vr-tests-react-components/Positioning.Positioning end.updated 2 times.chromium.png | 49 | Changed |
| vr-tests-react-components/Positioning.Positioning end.chromium.png | 878 | Changed |
vr-tests-react-components/ProgressBar converged 3 screenshots
| Image Name | Diff(in Pixels) | Image Type |
|---|---|---|
| vr-tests-react-components/ProgressBar converged.Indeterminate + thickness - Dark Mode.default.chromium.png | 106 | Changed |
| vr-tests-react-components/ProgressBar converged.Indeterminate + thickness - High Contrast.default.chromium.png | 100 | Changed |
| vr-tests-react-components/ProgressBar converged.Indeterminate + thickness.default.chromium.png | 126 | Changed |
vr-tests-react-components/TagPicker 1 screenshots
| Image Name | Diff(in Pixels) | Image Type |
|---|---|---|
| vr-tests-react-components/TagPicker.disabled - Dark Mode.chromium.png | 658 | Changed |
There were 1 duplicate changes discarded. Check the build logs for more information.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Previous Behavior
@fluentui/react-positioningused the Floating UI engine at runtime and had no repeatable browser benchmark comparing the positioning workload against that implementation.New Behavior
Replaces the runtime positioning engine with a standalone parity engine, preserving the existing public hook semantics and pinned lower-stack geometry/lifecycle contracts. Adds a 15,000-byte minified bundle gate, a paired Electron benchmark against the immutable lower-PR Floating UI implementation, and a bounded raster comparison target. The benchmark reports workload-specific medians, p95s, and paired ratios without machine-dependent pass/fail thresholds.
The lower stack's fractional-layout correction uses an engine-free sibling reference based on committed literal baseline styles; the baseline file remains unchanged. Negative controls confirm that sub-layout-step inline-style drift and rectangle displacement are still detected. A scoped
::-webkit-scrollbarrule keeps scroll fixtures consistent in the older Chromium bundled with Cypress 13, without disabling scrolling.Validation on this host after syncing lower-stack commit
85dedaeb3d1938cac02e60cb49104b77d3301c11:NX_DAEMON=false yarn nx run react-positioning:build— passed.NX_DAEMON=false yarn nx run react-positioning:test— passed (24 suites, 219 tests).NX_DAEMON=false yarn nx run react-positioning:lint— passed.NX_DAEMON=false yarn nx run react-positioning:type-check— passed.NX_DAEMON=false yarn nx format:check --files=packages/react-components/react-positioning/library/scripts/positioning-raster.mjs— passed.NX_DAEMON=false yarn nx format:check --files=packages/react-components/react-positioning/library/README.md,packages/react-components/react-positioning/library/src/usePositioning.geometry.cy.tsx— passed.NX_DAEMON=false yarn nx run react-positioning:test-bundle-size— passed.NX_DAEMON=false yarn nx run react-positioning:bundle-size --skip-nx-cache— passed at 14,996 / 15,000 minified bytes.NX_DAEMON=false yarn nx run react-positioning:e2e --spec=src/usePositioning.geometry.cy.tsx --browser=electron --config=retries=0— passed (143/143 browser cases).NX_DAEMON=false yarn nx run react-positioning:test-raster— passed (143/143 contract tests for both implementations; 142 raster comparisons with zero differing pixels). The unchanged oracle is788e3b739fe79246a2f8850d1c575cf4018fd744.POSITIONING_BENCH_SEED=36870 NX_DAEMON=false yarn nx run react-positioning:benchmark— passed against lower-stack oraclefca219991ed9e907b01274bd89ac1431e51c573a. On this single Electron 33.2.1 / Chrome 130 run, replacement/oracle median paired ratios were 0.722x initialization, 0.565x imperative updates, 0.394x scroll, and 0.394x resize; p95 paired ratios were 0.733x, 0.667x, 0.417x, and 0.412x respectively. This is one-host comparative evidence, not a universal no-regression claim.tmp/rit/react-17/node_modulesdependencies are absent; the target stops during its prepare step. The lower-stack owner reports 150/150 cases passing in the React 17 / Cypress 13 run after the scrollbar fix.Related Issue(s)