# NEXT Athlete OS v96 RC96 QA Report

## Scope
RC96 builds on RC95 and focuses only on the video-backup workaround for iPad/projector use. Pass layout rebuild is intentionally paused.

## Implemented
- Real server-side video backup API: `video_backup_api.php`.
- New centralized service: `assets/js/services/server-video-backup-service.js`.
- Per-exercise server backup catalog persisted in `video-backups/index.json`.
- Uploaded files stored under `video-backups/files/<exerciseKey>/`.
- Server backup priority before YouTube/OTA in `video-service.js`.
- IndexedDB backup retained only as device-local fallback.
- Upload feedback on exercise page:
  - file selection state
  - selected filename and size
  - upload progress percentage
  - success message with cross-device note
  - cancelled state
  - error state
- Server backup delete action.

## Checks
- JavaScript syntax check across `assets/js/**/*.js`: OK
- PHP lint: `ota_youtube_proxy.php`: OK
- PHP lint: `video_backup_api.php`: OK
- Static RC96 grep checks: OK
- RC96 server-backup priority smoke test: OK
- PHP built-in server API smoke: list + upload tiny mp4 fixture: OK
- Fallback-rendered QA screenshots: mobile, iPad, desktop: OK
- ZIP integrity: OK

## Notes
- Server uploads are governed by the web host PHP limits (`upload_max_filesize` and `post_max_size`). The app has its own 750 MB guard, but the host may be lower.
- The app does not download YouTube content. RC96 expects a legal local video file selected from iPad/Filer/phone/desktop and uploads that file to the server.
- The new writable folder `video-backups/` is created automatically by PHP if server permissions allow it.
