# START HERE — V384E129 Generic Chromium/OpenGL Visual QA Harness

Status: tooling-only patch on top of V384E128. Pose/runtime/grip logic is unchanged.

## Purpose

V384E129 generalizes the previously V384E128/Figure-four-specific Chromium/OpenGL QA scripts into a config-driven harness.

Use this for future actual Nex visual QA instead of creating exercise-specific Chromium scripts.

## Main commands

Example, V384E128 Figure four fixture:

```bash
node tools/nexprod/run_chromium_opengl_visual_qa.mjs \
  --config config/visual_qa/v384e128_figure_four_cases.json \
  --tag V384E128_FIGURE4 \
  --cases right_peak,left_peak \
  --views front,rear,left_side,right_side,rear_three_quarter
```

Single-view debug:

```bash
node tools/nexprod/run_chromium_opengl_visual_qa_oneview.mjs \
  --config config/visual_qa/v384e128_figure_four_cases.json \
  --tag V384E128_FIGURE4 \
  --case right_peak \
  --view front
```

## Files added

- `tools/nexprod/run_chromium_opengl_visual_qa.mjs`
- `tools/nexprod/run_chromium_opengl_visual_qa_oneview.mjs`
- `tools/nexprod/build_visual_qa_contact_sheet.py`
- `config/visual_qa/v384e128_figure_four_cases.json`
- `docs/runbooks/NEXT11_Chromium_Xvfb_SwiftShader_local_QA_runbook.txt`

## Policy

The generic runner can temporarily add `URLAllowlist: ["127.0.0.1"]` to the Chromium managed policy and restores the original file afterward.

Do not modify Nex pose/runtime logic to solve browser policy failures.
