# V97 RC17 · Pose Motion Runtime Polish QA

## Intent

RC17 continues from RC16 and makes the pose-motion fallback usable across the pass player rather than only a small prototype set.

## What changed

- Cleaned active pose sprites from the RC16 flag state.
  - Backed up originals in `incoming/pose-cleanup/rc17-original-active-sprites/`.
  - Wrote cleaned review copies in `incoming/pose-cleanup/rc17-cleaned-candidates/`.
  - Re-extracted `burpee` and `lateral-line-hops` from their light-background source figures because the keyed sprites had avoidable artifact/hole issues.
- Updated `assets/data/image-admin/pose-sprite-library.json` to `v97-rc17-pose-runtime-polish`.
  - 74 pose sprites audited.
  - 74 pose sprites now have cleanup status `ok`.
  - 0 cleanup flags remain in the active library metadata.
- Updated `assets/data/image-admin/exercise-pose-sequences.json` to `v97-rc17-pose-runtime-polish`.
  - 22 runtime-linked prototype sequences are now available.
  - These cover every exercise currently present in Stage 2 data that has an available pose-sprite family, plus the existing `burpee` prototype.
- Improved runtime feel without changing the sensitive video lifecycle.
  - `NEXTPoseMotionService` now exports `v97-rc17-pose-motion-runtime-polish`.
  - Per-sequence `loopMs` now drives CSS-only stepped highlight timing.
  - Runtime images use eager async decoding and per-pose animation delay variables.
  - Added a lightweight stage playhead.
  - Added reduced-motion handling.
  - Added mobile readability tweaks for radius, guide opacity and fallback badge size.

## Runtime priority preserved

1. Server/local/YouTube/OTA video when available and allowed.
2. Pose-sequence fallback if `Motion fallback` is enabled and a sequence exists.
3. Layered exercise figure/default figure fallback.
4. Generic fallback art.

No rewrite of pass timers, wake lock, video preload, source priority or completion state was done.

## Runtime-linked sequences

`bear-crawl`, `broad-jump`, `buddy-hamstring-curls`, `burpee`, `carioca-shuffle`, `chin-up`, `db-farmer-carry`, `goblet-squat`, `kneeling-soccer-toss`, `lateral-line-hops`, `lateral-pogo-jumps`, `lateral-power-shuffle`, `linear-pogos`, `med-ball-slam`, `plank`, `plank-walkouts`, `pull-up`, `push-up`, `seated-box-jump`, `side-plank-hip-lift`, `single-arm-row`, `sit-up`.

## QA run

```bash
node tests/rc16_pose_motion_runtime_smoke.js
node tests/rc17_pose_motion_runtime_polish_smoke.js
python3 tests/rc16_pose_motion_runtime_real_dom_qa.py
python3 tests/rc17_pose_motion_runtime_polish_real_dom_qa.py
find assets/js -name '*.js' -print0 | xargs -0 -n1 node --check
php -l api/image-admin/health.php
php -l api/image-admin/status.php
php -l api/image-admin/templates.php
php -l api/image-admin/upload-draft.php
python3 tools/audit-pose-sprites.py
unzip -t next_v97_rc17_pose_motion_runtime_polish.zip
```

## Real-DOM screenshot QA

The RC17 real-DOM QA renders actual `preview.html`, CSS and JS through Playwright with mocked backend JSON endpoints. It enables the pass screen and the motion fallback surface, renders `Lateral Line Hops`, inlines local images and screenshots:

- `qa_screenshots/rc17_pose_motion_runtime_polish_mobile_390x844.png`
- `qa_screenshots/rc17_pose_motion_runtime_polish_ipad_820x1180.png`
- `qa_screenshots/rc17_pose_motion_runtime_polish_desktop_1440x1024.png`

The QA verifies:

- pose service is ready and reports RC17 version
- media fallback is `pose-motion`
- exercise key is `lateral-line-hops`
- runtime pose visual exists
- runtime playhead exists
- CSS animation is active
- per-pose delay variables exist
- four runtime pose images render
- five slot guides render
- raster `*-real.webp` background is used
- no local images are broken

## Caveat

No deployed host or real iPhone Safari was tested here. Verification is local real-DOM QA with inlined app assets and mocked backend responses.
