# Phase 03.1: Remove Virtual Tracker - Context

**Gathered:** 2026-03-22
**Status:** Ready for planning
**Source:** Conversation during Phase 3 spike resolution

<domain>
## Phase Boundary

Remove the GenericTracker virtual device from the driver. Phase 3 proved that the working standby/wake mechanism is `SetBoolProperty(Prop_ContainsProximitySensor_Bool)` on the HMD's property container — not the `/proximity` component on the tracker. The tracker is unnecessary UI noise in SteamVR's device list.

</domain>

<decisions>
## Implementation Decisions

### What to Remove
- `ProximityDevice` class (proximity_device.h, proximity_device.cpp) — no longer needed
- `TrackedDeviceAdded()` call in DeviceProvider::Init() — no tracked device to register
- `m_pDevice` (unique_ptr<ProximityDevice>) from DeviceProvider
- The `/proximity` boolean component and `UpdateBooleanComponent` calls
- Fallback 2 and 3 methods (untested, unnecessary now that fallback 1 works)

### What to Keep / Move
- `DeviceProvider` — still the entry point, still runs `Init()`, `RunFrame()`, `Cleanup()`
- Named pipe server — stays on DeviceProvider (already there)
- HID device open — stays on DeviceProvider (already there)
- Proximity state (bool) — move to DeviceProvider member
- HMD property write (`SetBoolProperty` on HMD container) — move to DeviceProvider, triggered by pipe commands and (future) HID data
- `ShouldBlockStandbyMode()` returning false — stays

### Claude's Discretion
- Whether to keep fallback1 naming or rename to the primary mechanism
- Whether pipe commands change (e.g., `proximity on` now directly calls HMD property write)
- CMakeLists.txt cleanup if source files are removed

</decisions>

<canonical_refs>
## Canonical References

### Phase 3 Spike Results
- `.planning/phases/03-proximity-component-spike/03-02-SUMMARY.md` — Spike results showing fallback 1 is the working mechanism
- `src/driver/device_provider.cpp` — Current TryFallback1() implementation (the code to preserve/promote)
- `src/driver/proximity_device.h` / `proximity_device.cpp` — Code to remove

</canonical_refs>

<specifics>
## Specific Ideas

- The `proximity on/off` pipe commands should directly call the HMD property write (currently they call `m_pDevice->SetProximity()` which updates the tracker's component — wrong path)
- After this phase, the pipe protocol should work the same from the user's perspective, just wired to the correct mechanism

</specifics>

<deferred>
## Deferred Ideas

None — straightforward cleanup

</deferred>

---

*Phase: 03.1-remove-virtual-tracker*
*Context gathered: 2026-03-22 from conversation*
