# Handover · V388 video-timed High Knee Tuck

## Result

`high-knee-tuck` now uses packaged local video and a resolved Nex animation on the normal Dynamic Warm Up route.

- exercise: `high-knee-tuck`
- profile: `warmup_high_knee_tuck_ik_v1`
- source clip: `assets/media/exercises/high-knee-tuck/source/NEXT11_dynamic_warmup_ijj7TD0DA6Q_high-knee-tuck.mov`
- local playback: `assets/media/exercises/high-knee-tuck/high-knee-tuck.mp4`
- resolved asset: `assets/nexprod/resolved/high-knee-tuck-v388-video-timed.resolved.json`
- player: `assets/nexprod/nexprod01-resolved-player-v388.html`
- production mode: `resolvedPlayback`
- live solver calls: `0`

## Source and timing

The user-provided H.264/AAC clip is preserved byte-for-byte as the source authority.

- SHA-256: `c59e3dfe7e63d3729b2aea492fd857a2259082591649661b69e02eb6460e5042`
- source duration: `4.421680 s`
- observed tuck approach: approximately `1.800–2.650 s`
- stable peak/hold: approximately `2.650–3.020 s`
- release: approximately `3.020–3.550 s`

The clip visibly contains one complete tuck. The resolved loop keeps that timing for the first side and uses an anatomical mirror for the second side. The resulting complete alternating loop is `8.843360 s`.

## Motion authority

The existing Nex one-writer IK path supplies the body geometry. At each peak, the existing generic grip capability receives two explicit source-contact intents so both hands wrap the lifted upper shin below the knee. No new exercise-specific solver was added.

The final 720-frame resolved asset bakes the full alternating motion. The app only interpolates those baked transforms. Hands begin from the actual FBX rest quaternion; approach, hold and release use continuous shortest-arc quaternion interpolation.

## Application mapping

- `assets/js/core/video-registry.js` resolves High Knee Tuck to the packaged MP4 before an external link.
- `assets/media/exercises/high-knee-tuck/video-manifest.json` binds source, playback and animation.
- `assets/js/data/nex-ik-animation-profiles.json` and `.js` route the profile to the V388 player and resolved asset.
- `assets/js/data/nex-exercise-sequences.json` and `.js` mark Dynamic Warm Up step 1 as the V388 resolved candidate.
- Mobile playback remains capped at 24 FPS, animation sampling at 24 FPS and pixel ratio `1.15`.

## Verified QA

Build and integration gates pass:

- 720 resolved frames
- both left and right peak solves: two grips, both PASS
- maximum authored frame step: `7.435376°` (`L_Hand`)
- source hash, local media mapping, JSON/JS parity and resolved service route: PASS
- two-loop 5.6 actual-Nex CPU-skinned render: PASS
- decoded temporal samples: 424
- frame-difference average: `0.913475`

Primary evidence:

- `diagnostics/v388/V388_HIGH_KNEE_TUCK_BUILD_REPORT.json`
- `diagnostics/v388/V388_HIGH_KNEE_TUCK_INTEGRATION_CHECK.json`
- `diagnostics/v388/V388_HIGH_KNEE_TUCK_CPU_SKINNED_MESH_TWO_LOOP_QA.mp4`
- `diagnostics/v388/5_6_local_render/V388_HIGH_KNEE_TUCK_5_6_LOCAL_RENDER_GATE.json`
- four 8 FPS entry/hold/release contact sheets in `diagnostics/v388/5_6_local_render/`

## Approval boundary

V388 is a mechanically and temporally rendered candidate. It is intentionally not marked `visualApproved=true`; final human acceptance of the exercise form remains required. The local 5.6 render is actual Nex FBX/Three.js skinning, but it is not a Chromium/WebGL parity claim.

## Re-run

From package root:

```bash
node tools/nexprod/build_v388_video_timed_high_knee_tuck.mjs .
node tools/nexprod/render_v388_high_knee_cpu_skinned_mesh_temporal_qa.mjs . diagnostics/v388/V388_HIGH_KNEE_TUCK_CPU_SKINNED_MESH_TWO_LOOP_QA.mp4 24 2
node tools/nexprod/check_v388_high_knee_tuck.mjs .
node tools/nexprod/run_v388_high_knee_5_6_local_render_gate.mjs . diagnostics/v388/5_6_local_render
```

Use `--reuse-render` on the last command only when the exact two-loop MP4 is already present in its output directory.
