# HyperTwist Phase 3R Packet 3R-F Browser Spatial Support Implementation

Created on `2026-05-13`

## Status

`Phase 3R / Packet 3R-F` is now `closed`.

This packet converts the retained browser spatial owner trio:

- `mrdoob/three.js`
- `pmndrs/react-three-fiber`
- `pmndrs/xr`

from retained browser-support anchors into landed first-party HyperTwist browser spatial support lanes.

It does not reopen `Phase 0R`, `Phase 1R`, or `Phase 2R-B`.

Those earlier packets still own source-value extraction, retained-set routing, and ownership boundaries.

This packet owns the next question instead:

- what first-party browser spatial implementation actually landed
- which retained donor value was realized
- which rows are now live owners versus subordinate helpers
- what remains explicitly out of scope for this lane
- what validation was completed
- what the next bounded implementation move is after this landing

## Authority order

For future work on the browser spatial support lane, read in this order:

1. this packet for first-party landing scope, accepted widening, and validation result
2. [HYPERTWIST_LIVE_LANES_SOURCE_AND_PRESERVATION_AUDIT_2026-05-13.md](C:/HyperTwist/docs/HYPERTWIST_LIVE_LANES_SOURCE_AND_PRESERVATION_AUDIT_2026-05-13.md:1) for live-lane preserve posture
3. [HYPERTWIST_PHASE_2R_PACKET_2R_B_OWNERSHIP_AND_ACCEPTANCE_CONTRACT_2026-05-13.md](C:/HyperTwist/docs/HYPERTWIST_PHASE_2R_PACKET_2R_B_OWNERSHIP_AND_ACCEPTANCE_CONTRACT_2026-05-13.md:1) for ownership boundaries and pre-widening acceptance markers
4. [HYPERTWIST_PHASE_0R_PACKET_0R_B_EVALUATION_2026-05-12.md](C:/HyperTwist/docs/HYPERTWIST_PHASE_0R_PACKET_0R_B_EVALUATION_2026-05-12.md:1) for source-value extraction and non-promotion rationale
5. [REPO_LICENSE_TRACKING.md](C:/HyperTwist/docs/REPO_LICENSE_TRACKING.md:1) for license, notice, and provenance obligations

## Packet licensing snapshot

Owner rows widened by this packet:

- `mrdoob/three.js`: `MIT`
- `pmndrs/react-three-fiber`: `MIT`
- `pmndrs/xr`: `MIT`

Subordinate retained support rows referenced by this packet:

- `pmndrs/uikit`: `MIT`
- `pmndrs/postprocessing`: `Zlib`
- `pmndrs/react-postprocessing`: `MIT`
- `pmndrs/drei`: `MIT`
- `pmndrs/three-stdlib`: `MIT`
- `pmndrs/maath`: `MIT`
- `pmndrs/zustand`: `MIT`
- `pmndrs/leva`: `MIT`
- `pmndrs/use-gesture`: `MIT`
- `pmndrs/react-spring`: `MIT`
- `@react-spring/core`: `MIT`
- `@react-spring/shared`: `MIT`
- `@react-spring/types`: `MIT`
- `@react-spring/parallax`: `MIT`
- `@react-spring/rafz`: `MIT`
- `@react-spring/animated`: `MIT`

Checked local notice surfaces:

- [mrdoob/three.js package.json](C:/Workspaces/HyperTwist/mirrors/permissive/mrdoob/three.js/package.json:1)
- [pmndrs/react-three-fiber package.json](C:/Workspaces/HyperTwist/mirrors/permissive/pmndrs/react-three-fiber/packages/fiber/package.json:1)
- [pmndrs/xr package.json](C:/Workspaces/HyperTwist/mirrors/permissive/pmndrs/xr/packages/react/xr/package.json:1)
- [pmndrs/postprocessing LICENSE.md](C:/Workspaces/HyperTwist/mirrors/permissive/pmndrs/postprocessing/LICENSE.md:1)

## Packet result

`3R-F` lands the browser spatial owner trio as:

- `mrdoob/three.js` -> `implemented_live_permissive`
- `pmndrs/react-three-fiber` -> `implemented_live_permissive`
- `pmndrs/xr` -> `implemented_live_permissive`

All three are now `landed_permissive_preserve`.

Current portfolio effect:

- curated HyperTwist shallow-eval set: `71`
- currently verified live in checked Unreal surfaces: `14`
- permissive live lanes: `13`
- restrictive live clean-room lanes: `1`
- active non-live implementation-board rows: `45`

## Donor source surfaces read

The source read for this widening remained bounded to browser scene substrate, React-side renderer lifecycle, XR session and input state, spatial UI support, post-effect boundaries, and motion/state helper seams:

- [src/renderers/webxr/WebXRManager.js](C:/Workspaces/HyperTwist/mirrors/permissive/mrdoob/three.js/src/renderers/webxr/WebXRManager.js:1)
- [packages/fiber/src/core/renderer.tsx](C:/Workspaces/HyperTwist/mirrors/permissive/pmndrs/react-three-fiber/packages/fiber/src/core/renderer.tsx:1)
- [packages/react/xr/src/xr.tsx](C:/Workspaces/HyperTwist/mirrors/permissive/pmndrs/xr/packages/react/xr/src/xr.tsx:1)
- [packages/xr/src/store.ts](C:/Workspaces/HyperTwist/mirrors/permissive/pmndrs/xr/packages/xr/src/store.ts:1)
- [packages/uikit/src/panel/index.ts](C:/Workspaces/HyperTwist/mirrors/permissive/pmndrs/uikit/packages/uikit/src/panel/index.ts:1)
- [src/core/EffectComposer.js](C:/Workspaces/HyperTwist/mirrors/permissive/pmndrs/postprocessing/src/core/EffectComposer.js:1)
- [src/EffectComposer.tsx](C:/Workspaces/HyperTwist/mirrors/permissive/pmndrs/react-postprocessing/src/EffectComposer.tsx:1)
- [src/web/View.tsx](C:/Workspaces/HyperTwist/mirrors/permissive/pmndrs/drei/src/web/View.tsx:1)
- [src/web/Html.tsx](C:/Workspaces/HyperTwist/mirrors/permissive/pmndrs/drei/src/web/Html.tsx:1)
- [src/webxr/XRControllerModelFactory.ts](C:/Workspaces/HyperTwist/mirrors/permissive/pmndrs/three-stdlib/src/webxr/XRControllerModelFactory.ts:1)
- [packages/maath/src/easing.ts](C:/Workspaces/HyperTwist/mirrors/permissive/pmndrs/maath/packages/maath/src/easing.ts:1)
- [src/vanilla.ts](C:/Workspaces/HyperTwist/mirrors/permissive/pmndrs/zustand/src/vanilla.ts:1)
- [packages/leva/src/useControls.ts](C:/Workspaces/HyperTwist/mirrors/permissive/pmndrs/leva/packages/leva/src/useControls.ts:1)
- [packages/react/src/useGesture.ts](C:/Workspaces/HyperTwist/mirrors/permissive/pmndrs/use-gesture/packages/react/src/useGesture.ts:1)
- [packages/core/src/hooks/useSpring.ts](C:/Workspaces/HyperTwist/mirrors/permissive/pmndrs/react-spring/packages/core/src/hooks/useSpring.ts:1)

## First-party landing surfaces

The landed first-party Unreal surfaces are:

- [HyperTwistTrainingSpatialLibrary.h](C:/HyperTwist/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingSpatialLibrary.h:1)
- [HyperTwistTrainingSpatialLibrary.cpp](C:/HyperTwist/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingSpatialLibrary.cpp:1)
- [HyperTwistTrainingRuntimeLibrary.h](C:/HyperTwist/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h:1)
- [HyperTwistTrainingRuntimeLibrary.cpp](C:/HyperTwist/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.cpp:1)
- [hypertwist-reference-incorporation-targets.json](C:/HyperTwist/UnrealHyperTwist/Content/HyperTwistTraining/MaterializedCatalog/hypertwist-reference-incorporation-targets.json:1)
- [hypertwist-catalog-materialization-summary.json](C:/HyperTwist/UnrealHyperTwist/Content/HyperTwistTraining/MaterializedCatalog/hypertwist-catalog-materialization-summary.json:1)
- [browser-spatial-support-reference-pages.jsonl](C:/HyperTwist/UnrealHyperTwist/Content/HyperTwistTraining/MaterializedCatalog/raw-extracts/browser-spatial-support-reference-pages.jsonl:1)

## Landed implementation scope

What landed:

- a first-party compiled browser spatial reference bundle with explicit package ownership records for browser scene substrate, React-side renderer, XR session stack, spatial UI support, effect boundaries, and state/motion support
- a first-party scene contract for browser-side scene graph, camera, render-loop, and controller-space lifecycle boundaries
- a first-party XR session contract for immersive session modes, controller/hand/gaze input surfaces, pointer routing, and session visibility boundaries
- a first-party spatial UI contract for world-anchored panel families, state-bearing browser-side controls, and explicit non-ownership exclusions
- a first-party post-effect boundary for bounded render-pass and emphasis ownership beneath the browser support plane
- a first-party state/motion contract for store, gesture, control-panel, and spring-motion support beneath the browser spatial owner trio
- first-party runtime-library accessors and TSV checklist export for the new browser spatial bundle
- bundled first-party reference targets and raw source-reference capture for browser scene, renderer, XR session, UI, effects, helpers, and state/motion reference families

What that means in practice:

- `mrdoob/three.js` now owns the landed permissive browser `3D` substrate preserve lane in HyperTwist
- `pmndrs/react-three-fiber` now owns the landed permissive React-side browser renderer and event-bridge preserve lane in HyperTwist
- `pmndrs/xr` now owns the landed permissive browser XR session and immersive interaction preserve lane in HyperTwist
- the landed surface is a first-party Unreal spatial contract and runtime API, not a vague future donor note
- `pmndrs/uikit`, `pmndrs/postprocessing`, `pmndrs/react-postprocessing`, `pmndrs/drei`, `pmndrs/three-stdlib`, `pmndrs/maath`, `pmndrs/zustand`, `pmndrs/leva`, `pmndrs/use-gesture`, `pmndrs/react-spring`, and `@react-spring/*` remain retained subordinate support rows beneath the landed owner trio and are not separately live

## Preserved landed value

The donor value that was actually promoted is:

- explicit browser-side scene, renderer, camera, render-target, and controller-space substrate boundaries
- explicit React-side canvas-root, frameloop invalidation, store, raycaster, and event-bridge behavior
- explicit XR session, visibility, controller/hand/gaze/screen input, pointer routing, and immersive interaction contracts
- explicit subordinate spatial UI, effect-composer, helper, state, gesture, and spring-motion support seams beneath the landed owner trio
- explicit first-party exclusion boundaries so browser-side spatial support does not silently become gameplay, simulation, or general runtime ownership

## Excluded or non-promotion boundary

Do not promote this packet into:

- a replacement for the Unreal-first runtime stance
- gameplay, puzzle-state, recognition, or training-platform ownership
- a claim that every helper package in the browser spatial stack is now separately live
- donor demo-shell, editor-shell, or browser-first app-shell ownership

Rationale:

- this packet was retained and widened because the owner trio is the strongest bounded browser spatial stack in the set
- its highest value is scene substrate, React-side rendering, XR session behavior, and explicit support boundaries, not a broad browser product shell
- the helper packages remain useful precisely because they stay subordinate to the landed owners instead of being flattened into separate live-lane claims

## Acceptance markers satisfied

The `2R-B` acceptance markers for this lane are now satisfied in first-party Unreal surfaces:

- a first-party browser scene contract exists for scene graph, camera, renderer, WebXR manager, and controller-space lifecycle seams
- a first-party browser XR session contract exists for immersive mode, session state, visibility, input routing, and interaction boundaries
- a first-party browser spatial UI contract exists for panel families, world-anchored control surfaces, and state-bearing browser-side UI seams
- a first-party browser post-effect boundary exists for bounded effect-composer, pass-ordering, and emphasis ownership
- a first-party browser state/motion contract exists for store, gesture, parameter-panel, and spring-motion support beneath the landed owner trio

## Validation

Validation completed for this packet:

- `git diff --check` passed apart from CRLF conversion warnings
- JSON validation passed for the updated materialized-catalog files and workspace manifest
- Unreal build succeeded with:
  - `C:\Program Files\Epic Games\UE_5.7\Engine\Build\BatchFiles\Build.bat UnrealHyperTwistEditor Win64 Development C:\HyperTwist\UnrealHyperTwist\UnrealHyperTwist.uproject -WaitMutex -NoHotReloadFromIDE`

Build result:

- `Succeeded` on `2026-05-13`

## Next move

The next bounded move is `Phase 4R-A`:

- widen `cubing/cubing.js` through the retained `MPL`-aware adapter or dependency lane rather than reopening broad permissive browser comparison work
- keep the optional `Phase 3R-G` `pissang/claygl` and `pissang/clay-viewer` comparison lane deferred unless the landed primary browser spatial stack exposes a real gap that requires it
