The first-time key authorisation piped the public key into ssh, so with
stdin occupied Windows OpenSSH could not read the password. The key now
goes in the command line, password auth is forced for that call, and a
key already in authorized_keys is not appended again.
README: describe the password prompt (nothing shows while typing).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Every prompt used to start PowerShell and load System.Speech (~1.5 s idle, longer with VRChat and
SteamVR running), so prompts lagged their beeps, overlapped and were hard to hear. Start the engine once
during the lead-in and hand each prompt to it (7-10 ms); a new prompt cancels one still speaking.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A deadband of 0.5 (rejected by the module) made analyze divide by zero. Check deadband and
assistClosed with the module's limits up front, speak a clear error and change nothing.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- ModuleConfig.Validate: maxFloor + minRange <= 1, minCeil > 0; LidCal clamp bound can no longer exceed 1
- ReloadConfig: record the timestamp only after a successful load so a temporarily locked file is retried
- tune.py analyze: map with lid.deadband / wink.assistClosed from the installed config; STEAMFRAME_CONFIG override
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- tune.py: reject reversed/flat per-eye ranges and keep the previous config; recommend wink assist;
readiness check before recording; skip malformed trace lines
- module: invalid steamframe-config.json is not applied (last good config kept, configError reported);
neutral eyes when no source is fresh; trace written with invariant culture
- setup: sandbox mode leaves real SteamVR settings and firewall alone; block rules handled separately;
headset target only counts connected adapters
- headset-setup.sh: build a pinned, reviewed frameeyeosc revision and move existing checkouts to it
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
VRCFaceTracking's Module Registry page crashes the app (WinUI 0xc000027b) when an
installed module's module.json has no DownloadUrl/ModulePageUrl. Reproduced with UI
Automation and confirmed by removing/restoring only those two fields.
- common.ps1: Write-ModuleJson writes every field, no BOM
- setup.ps1: repairs an incomplete or outdated module.json on existing installs
- version 0.2.1; README troubleshooting row; CLAUDE.md pitfall
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- module: works if only one of UDP 9015/9020 can be opened; logs state changes only (capped);
trace is opt-in; writes a status file; reports when another module owns eye tracking
- scripts/setup.ps1: idempotent installer with dry run, uninstall and optional headset setup
- scripts/doctor.ps1: health check with a spoken summary
- Start Here.cmd menu; tune.py calibrate (spoken, one step); package.ps1 release zip
- README: quick start and troubleshooting first
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- blink.saturatedRaw: a closed lid with the other pinned at its ceiling is a blink, however long
- wink.assist: show the other eye open when it stays above its floor while one eye is closed
- tune.py analyze understands the ceiling signature and caps holdMs
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>