- Files: line-style icons for the drive, PC VR and Linux sections (test_ui_consistency).
- test_pc_target: Quest games now also gain device.headset_model from its migration; PC VR games never do.
- test_surface_projection: frame.adapter is revision 2 since the dormant foveation diagnostic (#365).
- reflowed long lines (texts unchanged; generated launcher/PowerShell/README texts byte-identical)
- CONTRIBUTING, SECURITY, CODE_OF_CONDUCT, THIRD_PARTY_NOTICES; pyproject metadata (SPDX licence, authors, urls,
classifiers, keywords)
- maintainer-only notes moved to a git-ignored CLAUDE.local.md; CLAUDE.md facts updated
- README: what kinds of apps run and how; INSTALL: PC VR and Files wording, new labels
- APK analysis classifies apps (vr_kind: quest, openxr, pico_sdk, wave, android_xr, none) and flags split APKs
- ordinary Android apps (no VR): installed unchanged, or with only the launcher fix and no overport/adapter (a
signing key is created when overport never made one); Pico/Wave SDK and Android XR apps marked unsupported; x86/
32-bit-only APKs unsupported
- platform labels by what a game was made for (Quest / Android / Android VR / PC VR, Oculus only when LibOVR);
neutral folder pickers, help texts and Steam tags (PC shortcut tag FramePort PC VR; the old Rift via Revive tag
still matched for cleanup)
- PC VR games without Oculus code look up Steam art first
- "Share working config…" (game menu, `frameport share-recipe`): saves the recipe as known-good and opens a
prefilled working-config issue form; labelling it `catalog-accepted` runs catalog-from-issue.yml, which
validates the YAML (scripts/catalog_from_issue.py) and opens a PR adding catalog/games/<pkg>.yaml
- "Collect logs" / "Report a problem…" (game menu, Settings, failure pop-up, `frameport diag collect|report`):
redacted diagnostics zip (app + job logs, library entry, recipe, launch logs + re-triage, APK/ELF/PE listings
instead of game files, Frame launcher/settings/Lepton/logcat/XRService logs via agent v21 `collect_diag`) and
a prefilled bug-report issue to attach it to; `frameport diag inspect <zip>` re-triages a bundle offline
- diag/redact.py scrubs IPs, MACs, host/user names, home dirs, Steam ids, data and dump folders
- App log (<data>/logs/app.log) and saved GUI job logs (<data>/logs/jobs/)
- catalog.entry_from_library shared by "Save as known-good" and sharing; docs/DIAGNOSTICS.md
On the Frame, place Revive's runtime where an Oculus game's SDK looks for it, so
the game can load a VR runtime — the filesystem equivalent of Revive's LoadLibrary
redirect, without the inline hooking that fails under Proton-arm64 (ARM64EC).
- agent v18 set_libovr_redirect: symlinks LibOVRRT{64,32}_1.dll in the exe dir to
Revive's LibReviveXR runtime (kept in revive/ so its deps still resolve); only
ever creates/removes its own symlink, never a real game-shipped DLL.
- patch pcvr.libovr_redirect (requires pcvr.revive, on by default for Oculus Rift
games, ignored on PC); installer + deployment.json wiring; migration
rift_libovr_redirect for existing entries.
This is pure runtime substitution. It does NOT touch the game's Oculus runtime
signature check: a build that verifies LibOVRRT's signature still rejects Revive's
unsigned runtime (-3021). It only helps builds that don't verify it, and gets the
rest from "can't load runtime" (-3001) to the (intact) signature check.
135 tests pass. Not yet demonstrated on-device (Frame was off).
Make PC VR games actually reach VR, and stop mis-claiming Frame support:
- PC: auto-start SteamVR on Play/launch (winhost.start_steamvr) — Oculus games
ran as a flat window because SteamVR wasn't up; Revive has no runtime to bind
to without it. Default PC installs to Revive's OpenVR (SteamVR) backend
(pcvr.revive_openvr on) instead of the OpenXR backend that was crashing; the
Frame launcher still uses /openxr. Play toast warns if SteamVR can't come up.
- Routing: detect OpenVR (openvr_api imports/DLLs, not the universal-in-Unreal
IVRSystem/VR_InitInternal strings). frame_native = (openxr or openvr) and not
libovr; any LibOVR game is Oculus -> needs Revive -> PC only. The game page
says per-game where it runs; installing an Oculus game on the Frame warns
first. Rick and Morty runs on the Frame via its catalog recipe. Migration
rift_frame_native re-analyzes + re-derives existing entries.
Note: Oculus/LibOVR games can't run on the Frame — Revive's hooks don't work
under Proton-arm64 (ARM64EC), and FramePort does not defeat the Oculus runtime
Authenticode signature check. Those games are PC-only (SteamVR + Revive).
Bump to 0.2.0. 133 tests pass.
Adds Oculus Rift (PC VR) games alongside Quest:
- analysis/rift.py (own PE reader: imports incl. delay-imports, GUI-subsystem
filter, exe ranking, icons), sources/rift_dump.py (recursive scan, one game
per folder, collections), catalog rift fields + Rick and Morty recipe.
- patches/pcvr.py (category "pcvr", shown as patches): Revive (LibOVR->OpenXR,
default on for Oculus games), revive_openvr, no_crash_reporter (Unreal),
oculus_unreal (OculusHMDConnected helper), xr_timefix (Frame OpenXR layer),
proton_*. tools/revive.py (find/install Revive, never replaces the user's).
- targets/pc_revive.py (run on this Windows/WSL PC via Revive + local Steam;
core/winhost.py helpers) and frame_lepton Proton path; agent handles Proton
install, prepare/finalize_pcvr, launch, list_files (AGENT_VERSION 17).
- native/oculushmd (fp_oculushmd.exe) and native/xrlayer (Frame OpenXR 1.1->1.0
+ timespec-time layer); prebuilt artifacts + SHA256SUMS.
Runtime findings (Frame, SteamOS 0.4.2 / Proton 11 arm64): the SteamVR runtime
only accepts OpenXR 1.0, so Proton's vrhelper (1.1) needs the compat layer;
Oculus/LibOVR games need a VR runtime (Revive on PC with SteamVR, or SteamVR-
native builds run directly). Platform-SDK / signature-checked repacks can't run
on the Frame; those are flagged, never bypassed.
GUI overhaul (ui/): streaming persistent Library with tags/filters/sort, a
background job queue + activity panel, per-game page, Frame tab with installed
list + file browser, Settings (incl. agent version), Play + launch-test actions,
resumable/interruptible installs with up-front interventions, dark theme, help
hints, uninstaller (uninstall.py). Faster uploads via a direct link (USB /
Frame hotspot) when reachable. Artwork/details from OculusDB + Steam + ovrp,
composed Steam art sets and tags, thumbnails served by URL.
Docs (PLAYBOOK/FRAME_RUNTIME/ARCHITECTURE/INSTALL/CLAUDE.md), triage signatures,
and unit tests throughout (130 pass).