HardBullet's loading frames submit only a cube layer, which the Frame's runtime doesn't composite, so the loading
screen stayed black. Adapter setting cube_quads (default on) draws a cube-only frame's six faces as quad layers
around the viewer; frames with a projection layer are unchanged. Adapter rebuilt on current main.
Also: the foveation test expected a numeric FOVE_LEVEL to pass through (Valve's layer ignores numbers since #394),
a long description line and an import order in adapter_dialog.py failed lint.
FrameBridge (all new behaviour per game, off by default; hooks installed only when on):
- equirect_emul (GLES only): 360° equirect/equirect2 layers, which the Frame runtime
lacks, are drawn into one adapter projection layer by a worker thread with a shared
EGL context. Each 360° image becomes a cube map only when it changes; the view is
drawn early (from the app's xrLocateViews) with the frame's exact views. Write-once
360° picture swapchains are served by the adapter (frees runtime swapchain slots).
Learned: the Frame draws quad layers above all projection layers, and doesn't
reproject a projection layer from its own pose.
- session_fixes: layer_debug diagnostics, stable_local, focus_hold, aim correction,
refresh_rate.
- Agent v26: link_media (files sent to shared folders also appear in a player's own
folder), app media folder detection, launcher creates Android/data/<pkg>/{files,cache}.
App: "Add videos" for players, Update all, Rescan folders (only new games), Install
anyway for "Can't run" games, launch-test toggle, triage `unless`, generic source hints.
Catalog: 4XVR, NEX Player, Deadpool VR (working, owner-confirmed).