---
phase: 10-feasibility-spike
plan: 02
subsystem: testing
tags: [openvr, ipd, steamvr, feasibility, spike]

# Dependency graph
requires:
  - phase: 10-feasibility-spike
    plan: 01
    provides: ipd_test, eyetohead_check, slider_test pipe commands
---

# Plan 10-02 Summary: Live Feasibility Testing

## What was built
Executed all three feasibility spike tests against a running SteamVR 2.15.6 instance with Beyond 2 HMD connected. Documented structured findings in 10-FINDINGS.md with evidence from CLI output and vrserver.txt log analysis.

## Key findings
- **FEAS-01 (PARTIAL PASS):** SetFloatProperty works at API level (err=0, readback confirmed, VREvent fires, GUI notification appears). BUT rendering eye separation does NOT change — SetDisplayEyeToHead matrices from lighthouse/ET driver override property-based IPD.
- **FEAS-02 (LIKELY BLOCKS):** No SetDisplayEyeToHead in logs, but Beyond 2 lighthouse config has non-trivial eye_to_head rotation matrices. Visual evidence confirms rendering is locked to init-time matrices. BeyondEyetracking shim hooks IVRServerDriverHost_006 and may also call SetDisplayEyeToHead.
- **FEAS-03 (FAIL):** Properties accepted (err=0) but SteamVR slider UI does NOT appear in dashboard.
- **Decision: PARTIAL GO** — Phase 11 must use SetDisplayEyeToHead instead of property-only. Phase 12 slider descoped/revised. Phase 13 persistence still viable.

## Key files

### Created
- `.planning/phases/10-feasibility-spike/10-FINDINGS.md` — Structured findings with evidence and go/no-go decision

## Self-Check: PASSED

- [x] FEAS-01 result documented with PASS/FAIL and evidence
- [x] FEAS-02 result documented with BLOCKS/DOES NOT BLOCK and evidence
- [x] FEAS-03 result documented with property write results
- [x] Go/no-go decision recorded with rationale
- [x] Impact on Phases 11-13 documented
- [x] Boundary tests executed (48mm, 75mm accepted; 47mm, 76mm rejected)
- [x] VREvent_IpdChanged logging confirmed

## Deviations
- Driver DLL had to be manually copied from build output to SteamVR's registered driver path before spike commands were recognized. The build output directory is not the same as the registered driver directory.
- SteamVR required manual shutdown (taskkill insufficient due to process protection) before DLL could be replaced.
