8ccd7689f7
Add configurable Xbox motion and action bindings, frame-aware six-axis MAVLink controls, sensor logging, camera viewing and recording, and a faster startup path. Synchronize both app copies and document companion hardware setup and verification limits.
45 lines
3.4 KiB
Markdown
45 lines
3.4 KiB
Markdown
# V2 verification — 22 October 2026
|
||
|
||
## Passing checks
|
||
|
||
- 41 Python tests: vehicle-state confirmation, control leases/watchdogs, six-axis packet values, unsupported firmware/frame gating, endpoint handling, telemetry conversion/staleness, persisted names/profiles, recording chunks, and relay acknowledgement.
|
||
- `node tests/controller_v2.cjs`: synthetic Xbox triggers, B/A direction, opposing input cancellation, six axes, custom buttons, limits, invalid/missing inputs, migration, and actions.
|
||
- `node tests/controller_input.cjs`: existing stick conditioning and console parser checks.
|
||
- Python compilation, JavaScript syntax checks, and `git diff --check`.
|
||
|
||
No tests opened a real COM port or armed a physical vehicle.
|
||
|
||
## Rendered browser checks
|
||
|
||
Used the supported local in-app browser with the real app assets in Demo Mode:
|
||
|
||
- Mapping dialog: three-axis and six-axis presets, saving, reopening after a full page reload, and retained LB/RB roll bindings.
|
||
- Vehicle settings: saved BlueROV1 six-thruster preview, independent accessory relay selectors, and consistent FC/demo status.
|
||
- Drive: all six command controls at 1024×768, 960×580 (the native window minimum), and 700×572; no overlap with the output toolbar.
|
||
- Active-output list: six rows for the six-thruster preview, with scrolling and reversal buttons. General frames disable the SimpleROV-3-specific independent-scale mode.
|
||
- Engagement: held F2 in Demo Mode, inspected rendered **engaging**, then **disengaging** and their settled states. Both words are spelled correctly, centered, and have no trailing dots.
|
||
- Dashboard: camera-off state, active simulated inspection view, missing/offline readings, explicit Demo labeling, sensor values and video controls at desktop and compact sizes.
|
||
- Recording: started/stopped a canvas preview recording; the browser produced a 1,386,065-byte WebM file.
|
||
- Accessories: demo lights toggle, camera power toggle, and viewing stops after demo power-off.
|
||
|
||
Reduced-motion CSS is included. The connected browser offers viewport testing but no media-preference emulation, so a rendered reduced-motion override was not verified.
|
||
|
||
## Existing harness limitation
|
||
|
||
The older `tests/control_ui.test.cjs` fake-DOM harness is not passing. It reports 23 failures on the saved pre-V2 checkpoint and 21 on V2. Most fail before app initialization because the harness lacks `ResizeObserver`; it also has obsolete markup/animation assertions and omits browser dependencies. It is not counted as a passing check. Actual browser checks above establish the rendered behavior of this implementation.
|
||
|
||
## Startup measurement
|
||
|
||
Three fresh-process worker-module imports on this laptop:
|
||
|
||
| Build | Samples | Median |
|
||
| --- | --- | --- |
|
||
| Pre-V2 checkpoint | 781.8 / 616.3 / 655.3 ms | 655.3 ms |
|
||
| V2 | 402.8 / 362.4 / 399.1 ms | 399.1 ms |
|
||
|
||
This measures the module import, not total app startup. The launcher also avoids pip on subsequent launches when requirements have not changed, and starts the web interface directly.
|
||
|
||
## Physical verification still required
|
||
|
||
Real Xbox hardware, live six-axis FC motor allocation, live sensor calibration, WHEP video from a Raspberry Pi, native WebView full-video recording, physical relay outputs, and tether/underwater behavior were not verified. The browser recording and native chunk-writing path were checked separately. BlueOS native camera discovery/signaling is not integrated; this release uses an explicit WHEP, HTTP video, or MJPEG URL.
|