# NEXT11 / Nex Athlete OS — Handover after V6.28 LOCKED

## Current effective checkpoint

**V6.28 — LOCKED CONSOLIDATED FULLROOT**

This is the new full-root presentation baseline. It replaces the need to reconstruct the long V6.14 -> V6.27B delta chain for normal work.

**Rule from here:** normal fixes are **delta-only from V6.28**. Create another fullroot only at a deliberate larger consolidation milestone.

## Why V6.28 is a fullroot milestone

The presentation/environment architecture has materially changed since V6.14:

- sport-driven premium environments
- physical 3D floor textures with real optical travel/parallax
- corrected floor UV direction so Nex reads as travelling forward
- true GPU floor/backdrop crossfade
- premium low-alpha seam haze
- Nex-owned premium procedural runway
- front-three-quarter runtime camera
- asymmetric left-world art direction for General / Hockey / Downhill

This is therefore a clean point to consolidate.

## HARD LOCK — do not disturb

Do not change these during environment/presentation work unless the user explicitly starts a separate motion task:

- canonical motion
- IK / solver
- resolved animation/model assets
- canonical travel timing
- normal media routing

Frozen Player Guard command:

```bash
python3 tools/nex_dynamic_warmup/check_frozen_player.py
```

Checkpoint result:

`PASS | core=22 | profiles_locked=18 | motion/model=66`

## Current environment architecture

Authority is deliberately separated:

- **Sport profile = source environment/world + physical floor**
- **Theme/accent = runtime color treatment of that sport world**
- **Nex = independent**
- **Runway = Nex-owned procedural guidance layer**

Do not return to theme-owned scene switching. A Purple Hockey mode must remain the Hockey world with Purple color treatment, not a different scene.

### General

Backdrop:
`assets/nex/environment/general-athlete-environment-v627e-left-world.webp`

Floor:
`assets/nex/environment/general-athlete-floor-texture-v625.webp`

### Hockey

Backdrop:
`assets/nex/environment/ice-hockey-environment-v627c-left-world.webp`

Floor:
`assets/nex/environment/ice-hockey-floor-texture-v627c.webp`

### Downhill

Backdrop:
`assets/nex/environment/downhill-night-environment-v627e-left-world.webp`

Floor:
`assets/nex/environment/downhill-night-floor-texture-v627b.webp`

### Football

Still fallback / **not art-locked**. Do not pretend it has a dedicated football world. This is the main missing sport environment.

## Locked art direction

The approved compositional grammar is:

> **Left side builds the physical environment; center/right opens into depth and gives Nex breathing room.**

Avoid:

- mirror-symmetric portals
- equal architectural weight on both sides
- busy detail directly behind Nex
- baked runway lines in the backdrop image
- image-owned runway perspective

The environment can be sport-specific and atmospheric, but it must still read as one coherent NEXT premium product family.

## Physical floor / travel

The floor is now a real 3D presentation plane rather than a static part of the backdrop.

Current architecture:

- visible floor window: ~14 m
- floor mesh follows the workout window around Nex
- texture UV counter-offset uses the **negative travel sign**
- result: texture remains world-anchored while Nex + camera travel
- this creates real optical flow/parallax and prevents the old “Nex looks stationary/backing up” problem

Do not flip the UV sign back.

## Floor -> backdrop crossfade

The hard seam was fixed at the GPU level.

Important technical detail:

Three.js `alphaMap` reads grayscale/green-channel intensity. The old RGBA-alpha-only gradient did not produce the intended fade. V6.28 uses a real grayscale RGB ramp.

Current behavior:

- long backdrop-side floor fade (~6 m)
- local portal-horizon softening
- `NEX_WORLD_FLOOR_SEAM_FOG_V2` as low-alpha dark-blue atmospheric haze
- haze is there to integrate layers, not create a bright white boundary

## Premium runway

The runway belongs to **Nex**, not the backdrop image.

Current runway:

- `NEX_PREMIUM_RUNWAY_V1`
- ~10 m local/recycled runway around Nex
- floor/slab opacity = 0
- vertical posts = 0
- thin edge cores + subtle glow
- sparse longitudinal cadence elements
- minimal center pulses
- subtle sport-specific flat motifs
- follows Nex travel axis

Do not reintroduce vertical ruler posts or a wide opaque floor slab.

## Camera

Current product camera is a clear front-three-quarter runtime camera, not the old nearly frontal view.

Current equation:

- `cameraSide = max(1.80, h * 1.08)`
- `cameraFront = max(4.05, h * 2.45)`
- `cameraY = headY + 0.23`

The camera rotates with exercise presentation heading and continues tracking travel.

Do not replace this with a one-frame init-only camera placement. Any camera change must be verified through a real pass loop.

## QA state at checkpoint

Included lightweight QA:

- `qa/v628/V6_28_MULTI_SPORT_REAL_PLAYER_QA.jpg` — General / Hockey / Downhill real-player comparison
- `qa/v628/V6_28_DOWNHILL_REAL_PLAYER_QA.mp4` — real WebGL Downhill motion QA
- `qa/v628/V6_28_FLOOR_BACKDROP_CROSSFADE_QA.jpg` — crossfade/floor integration reference

QA method remains:

- actual `preview.html` Dynamic Warmup player
- Chromium + Xvfb + ANGLE/SwiftShader
- AI-generated imagery may be used as source art when explicitly requested, but **never as Nex QA**

## Source/reference images

Keep the source/reference folder. It contains the environment references used to derive the current sport worlds:

`assets/nex/environment/source/`

Important examples include:

- `general-athlete-portal-runway-ref-01.png`
- `general-athlete-portal-mountains-ref-02.png`
- `ice-hockey-arena-ref-01.png`
- `downhill-night-portal-mountain-ref-01.png`
- `general-athlete-floor-texture-source.png`

Do not silently delete them.

## Main remaining work

1. **Football world** — create/choose a dedicated football environment + moving floor using the same left-world/open-right grammar.
2. Continue visual refinement only via deltas from V6.28.
3. For any backdrop/floor/runway change, show real player QA before calling it approved.
4. Preserve the current separation of authorities: sport world, theme accent, Nex runway, frozen motion.

## Recommended first instruction for the next chat

> Continue from V6.28 locked consolidated fullroot. Treat V6.28 as the only baseline. Do not reconstruct earlier deltas. Do not touch motion/IK/resolved/travel timing/media. Preserve sport-owned physical worlds/floors, theme-owned accent treatment, Nex-owned premium runway, front-three-quarter runtime camera, true grayscale floor/backdrop crossfade and left-world/open-right composition. Next major missing environment is Football. Run Frozen Player Guard and real `preview.html` Chromium QA for every presentation change. Package normal work as delta-only from V6.28.
