Repository navigation
Prepare One 2.11 native desktop, DOM and routing features - #1027
Merged
Merged
Conversation
Validation: none (plan and empty package skeleton) Team-Machine-Session: p102526
Validation: none Team-Machine-Session: p102544
…d at M1 RN 0.88 core, host and textlayoutmanager compile with no RN source patches. Validation: ninja build of libOneMacosCore.a (Debug, arm64) Team-Machine-Session: p102544
Validation: none (plan update) Team-Machine-Session: p102526
…k, debug hooks Validation: ran the app against a hand written bundle; view, text, toggle round trip and HMR edit with toggle state kept confirmed by window snapshots. No automated checks. Team-Machine-Session: p102544
Validation: none (plan update) Team-Machine-Session: p102526
Resolution is .macos, then .native, then plain. React Native falls back to its .ios files, with Platform overridden so OS is macos. Third-party ios/android-only modules stub on macos. One.platform is a macos-only wrapper, so the shared currentPlatform body is unchanged. Validation: packages/utils platformEnv vitest, 3 passed. On studio-64, tests/native-features ios.js is 10908831 bytes sha256 adf026f9a21e0547eedc3922170a66cdd819a973f638d95187cb7cce7ac113d1 and android.js is 7115711 bytes sha256 a7c221a53bdb05b579bd90867dc9d81bff0a5e8200e24f6ed8f5f8695691d571, both identical to the base-commit baselines. examples/one-basic web, 65 files, matches after substituting CACHE_KEY 1297683 vs 42447962 and five vite content hashes, 0 content mismatches. Team-Machine-Session: p102542
View, Text, and One.macOS.Toggle, plus a probe that resolves .macos before .native. Validation: local one dev served /index.bundle?platform=macos (9181408 bytes) with One.platform macos, probe macos-file, OneMacToggle, and Platform.OS macos. /hot?platform=macos with a clientId opened; without a clientId the socket closed. Team-Machine-Session: p102542
React Native's own files keep Platform.ios.js. The package entry and importers outside react-native get the one-macos override, so app code sees OS macos. Validation: bun probe of macosReactNativeFile. Text.js resolves Platform.ios.js, react-native/index.js and an app import resolve the one-macos override, ToastAndroid still falls back to its .ios.js, and an app relative import stays null. Team-Machine-Session: p102542
…setup files Stubs for ios/android-only third-party files throw when called. one-macos is a workspace dependency of macos-basic and its root is resolved once per project. Validation: tsc of vite-plugin-metro and utils; ios/android/web identity rerun pending Team-Machine-Session: p102526
Validation: bun install Team-Machine-Session: p102526
Validation: tsc of one and vxrn; tamagui-build emits one.macos.native.js importing only dist Team-Machine-Session: p102526
Validation: tsc of vxrn Team-Machine-Session: p102526
The spec lives in platform/mac, outside codegenConfig, and staticSpecs rewrites its dist mirrors like the shared specs. Validation: staticSpecs and nativeBundle vitest, tsc of one, dist mirror inspected Team-Machine-Session: p102526
Validation: none (plan update) Team-Machine-Session: p102526
…r out Built packages import siblings by full name, so macos now swaps in an emitted X.macos.native.js. Mac variants for the stack's shared transition boundary and bottom toolbar host drop reanimated and the UIKit toolbar from the mac bundle. Validation: tsc of one and vxrn; macos dev bundle 200, 9.18 MB to 7.66 MB, no reanimated module, both variants present Team-Machine-Session: p102526
Validation: one build Team-Machine-Session: p102526
Validation: none (plan update) Team-Machine-Session: p102526
Validation: macos-basic app builds; real bundle boots past NitroModules (log: next failure is WorkletsModule) Team-Machine-Session: p102544
Validation: app builds and the real bundle boots on Hermes (error text is Hermes-shaped); prebuilt hermes-ios debug 260318099.0.4 macosx slice from Maven, no source build Team-Machine-Session: p102544
Validation: xcodebuild Debug succeeded; app boots through WorkletsModule install on Hermes; real route still blocked by OneAdaptive hybrid at import (JS side) Team-Machine-Session: p102544
Mac windows have no size classes or hinges, like web, so both use one fixed implementation and macos no longer creates OneAdaptive at import. Validation: one build and tsc; macos dev bundle 200, no OneAdaptive or seed Team-Machine-Session: p102526
Validation: one build and tsc; macos dev bundle 200 with no nitro-image modules and no unguarded module-level hybrid creation Team-Machine-Session: p102526
Validation: built MacosBasic and ran it against one dev; View, Text and Toggle mount, toggle round trips, HMR text edit keeps toggle state without relaunch. No automated tests. Team-Machine-Session: p102544
Validation: one build Team-Machine-Session: p102526
Splitting the shared transition screen into a module added 158 bytes to the ios and android bundles; macos now has a stack-navigator variant instead. Validation: one build and tsc; macos dev bundle has no reanimated Team-Machine-Session: p102526
Validation: gate builds on studio-64 (ios, android normalized identical; web cache key only) Team-Machine-Session: p102526
Validation: none Team-Machine-Session: p102970
…deproj Validation: xcodegen + xcodebuild Debug build succeeds from the new paths. Team-Machine-Session: p102957
Validation: built MacosBasic and drove it with the debug command channel. Hover recolors a Pressable and sets the pointing hand cursor, two clicks press twice, click and Tab move focus (focus ring, onFocus/onBlur), Space presses the focused view. Screenshots in the session scratchpad. Team-Machine-Session: p102957
Validation: forced a JS props change between GTK measurement and Fabric submission in the release arm64 VM; baseline button stayed at height zero, repaired button reached 34 pixels. Removed temporary probe, rebuilt the release host, exercised route push/back and native button counter with uinput. git diff --check passed. No automated tests.
Validation: ran a release build of tests/macos-basic at 2a2a4ce and drove controls and app commands through accessibility actions; bare Tab chords not confirmed, New Window and Stack/Tabs not run.
Remove the contentLayout round trip, mount inline only while measuring, re-measure size-changing control props, key measurements on Fabric props, render tabs lazily. Validation: release host build, tests/linux-basic bundle and probe page in the arm64 VM under sway with uinput: measure and press pageY agree below the header, DropDown regrows after a longer selection, drag-resize under fatal warnings. Lazy tabs and the stale props key were not exercised.
Validation: release host build, two windows each running a worklet requestAnimationFrame loop in the arm64 VM; closing one left the other counting.
Validation: release host build in the arm64 VM with uinput: ctrl-shift-[ bound as cmd-shift-[, ctrl-+ and ctrl-k fire; a menu label with an underscore keeps it. One package build ran the Linux type declarations.
Validation: none (docs and captures)
Validation: ran package-core.sh and prepare-core.sh (tarball hit, stamp early exit, miss falls to source build) and package-app.sh deb in the one-linux VM; dpkg -i installed it and the app launched under sway (plans/one-linux-native-m5-deb.webp).
Validation: ran package-app.sh deb and flatpak in the one-linux VM; the deb depends on libicu74 and the Flatpak launched under sway on org.gnome.Platform 51 (plans/one-linux-native-m5-flatpak.webp). M5 is on hold, wip.
The Mac module code now lives in native-core, which already carries the per-root color scheme callback, so the Linux side wins in OneMacosModules and the appearance hunks of OneMacosRootView. The embedded Release bundle loader now goes through the shared runtime, and the Mac Button keeps the shared factory and adds prominent. Validation: conflict resolution read against both sides, no stale Mac module names left (git grep); builds and runtime checks follow
…opUpButton to the Mac fixture Validation: macos-basic Release (embedded bytecode bundle) and Debug (dev server bytecode) built and ran; controls, app commands and a light to dark change checked through the AX driver
Validation: Mac Release and Debug, Linux release host in the VM, see plans/one-linux-native.md
Validation: checked the iOS Release build receipt, native and DOM A/B/rollback captures, installed update asset hashes, and git diff --check. Android claim remains host-only. Team-Machine-Session: s78716
Keep shared Hermes resolution, native platform dispatch and DOM assets together. Use one native-platform predicate for output cleanup and bundling. Validation: One/vxrn typechecks, vxrn/utils package builds,8 Hermes compiler checks, native lifecycle guard across4 platforms,2 bundler checks and DOM graph/browser-assets integration passed. Focused lint/format passed. Native app proof remains tied to pre-merge39e4946/e51; no combined native rebuild. Team-Machine-Session: s78716
Validation: existing DOM integration guard reproduces desktop proxy emission before repair and passes macOS/Linux rejection after repair; One typecheck, focused lint and formatting pass. Team-Machine-Session: s78716
Validation: actionlint, bash syntax, embedded Python syntax, git diff --check. Linux runtime and static ICU linkage await CI.
Validation: actual vite-plugin-metro bun run build passed and generated only the missing declaration reported by CI; committed declaration matches the already-reviewed source signature. Team-Machine-Session: s78716
Validation: normal @vxrn/vite-plugin-metro bun run build passed under heavy admission; its only worktree output was the missing generated declaration. Generated signature matches the unchanged source; staged diff check passed. No runtime changes or native build.
Validation: CI run 40184422620 diagnosed non-PIC ICU link failures on both architectures; actionlint, bash syntax and git diff --check passed. PIC source build awaits CI.
Validation: run 40185359129 passed arm64 core build, static ICU dependency checks and RN first paint; x86_64 failed on missing atomic symbols. actionlint, bash syntax and git diff --check passed; repaired link awaits CI.
Validation: Linux Native Build run 40186988728 passed x86_64 and aarch64 core/host builds, no-ICU ELF checks, bytecode bundle and headless RN content paint at 000dc37. Inspected both screenshots. Documentation only.
Validation: workflow file read; the branch trigger was only for the CI bring-up run 40186988728
Validation: reproduced four adapter failures with built utils; all four pass with exact serve/build context assertions. Focused lint and diff check pass.
Validation: reused CI40184743386 compose-b failure log. Bounded default Android Metro 0.87.1 dev/lazy bundle returned HTTP 200 (17,532,909 bytes), retained home, Android, Compose family and deep-link routes, and excluded the DOM boundary. Dedicated Vite router entry returned HTTP 200 with its DOM proxy; registered browser HTML returned HTTP 200. Refreshed stale vxrn and One JavaScript prerequisites using installed dependencies. No native build or emulator run. git diff --check passed.
Validation: registry app crash report reproduced null string input. Incremental native Debug build passes. Actual rebuilt app stays alive for missing, empty and numeric target ids, then emits valid composer inspection. No Release behavior changes.
Validation: original source run40186988728 passed x86_64/aarch64 core and host builds, no dynamic ICU imports, bytecode and first text paint. Reviewed Linux-only delta and workflow; normal merge has no conflicts and no Mac/native-core changes.
Validation: existing reviewed release streaming and shortcut warmup changes only; no native runtime overlap. Exact containing checks remain with CI.
Validation: all69 selected manifests contain only version and internal family pin changes; skipVersion fixture remains0.0.0 and prior release goals byte-identical. Lock-only install and frozen install, check:deps and diff check pass. Existing batch native/app proof and independent repair review are recorded in goals; no stable publication.
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.
This prepares the approved native feature batch as One 2.11.0. One 2.10.0 was published separately from current main with the native application-context API and existing iOS fixes; those fixes are contained here. Final owner review, merge and stable publication remain held.
Included features:
validateSearchParams, collected component schemas and validation before server loaders. Preserves original PR1040 authorship/review.Validation:
The previous containing canary1792923527905 was installed from the registry and matched by archive integrity and installed files. The rebuilt Mac Debug app passed populated light/dark rendering, draft restoration across session changes, filters, both panes and native Reload. Original combined Mac Debug/offline Release and Linux VM checks passed. Linux portability run40186988728 built both architectures and painted the sample app with no dynamic ICU imports. Original iOS DOM Fabric Release proof covers offline A, staged B, activation B and failed C rollback; published iOS linking and schema browser/types/generated-Vercel-handler proof are separately recorded.
Final repair review approved the strict plugin command assertions (174/174 existing checks pass), default Metro fixture isolation (normal Metro and dedicated Vite DOM bundles return200), malformed debug target guard (actual rebuilt host rejects missing/empty/numeric ids and still inspects a valid view), and Linux integration scope. Release-selected manifests, frozen lock-only install, check:deps and diff check pass. Exact containing required CI and final canary qualification remain with the existing CI owner.
Limits: Android DOM is host-only, without a Fabric/Updates app claim. Minimum OS/device coverage, startup timing and latest combined Mac bare-Tab/two-window checks were not expanded. Linux packaging was not rerun after static ICU. Windows and Nitro V1 are separate. See
goals.mdand the owning plans for evidence boundaries and release limitations.