mirror of
https://github.com/saphid/frame-control.git
synced 2026-10-26 11:01:47 +01:00
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ff3b0dd6f9 |
No files matched your search
@@ -128,6 +128,7 @@ Choose the operating system and processor of the computer you will use.
|
||||
| | Download | Needs |
|
||||
|---|---|---|
|
||||
| **macOS** (Apple Silicon) | [Frame-Control-mac-arm64.dmg](https://github.com/saphid/frame-control/releases/latest/download/Frame-Control-mac-arm64.dmg) | Nothing extra |
|
||||
| **macOS** (Intel, v0.4.39+) | [Frame-Control-mac-x64.dmg](https://github.com/saphid/frame-control/releases/latest/download/Frame-Control-mac-x64.dmg) | Nothing extra |
|
||||
| **Windows** 10 / 11 (x64) | [Frame-Control-Setup-x64.exe](https://github.com/saphid/frame-control/releases/latest/download/Frame-Control-Setup-x64.exe) · [portable .zip](https://github.com/saphid/frame-control/releases/latest/download/Frame-Control-win-x64.zip) | OpenSSH Client (normally installed) |
|
||||
| **Linux** (x64) | [AppImage](https://github.com/saphid/frame-control/releases/latest/download/Frame-Control-linux-x86_64.AppImage) · [.deb](https://github.com/saphid/frame-control/releases/latest/download/Frame-Control-linux-amd64.deb) | `ssh` (most desktops have it) |
|
||||
| **Linux** (arm64) | [AppImage](https://github.com/saphid/frame-control/releases/latest/download/Frame-Control-linux-arm64.AppImage) · [.deb](https://github.com/saphid/frame-control/releases/latest/download/Frame-Control-linux-arm64.deb) | `ssh`, and `adb` for Android apps (`sudo apt install adb`) |
|
||||
@@ -150,8 +151,8 @@ The [source](https://github.com/saphid/frame-control) and [release build workflo
|
||||
|
||||
日本語: [5 ステップの接続ガイド](docs/connection-faq.md#日本語-5-ステップで接続)を参照してください。v0.4.26 以降は公式リリースの SHA256SUMS とファイルの SHA-256 値を照合してください。Windows は未署名、macOS は開発者 ID による署名・公証がありません。
|
||||
|
||||
**Which build?** On a Mac, check Apple menu → About This Mac: the download is
|
||||
for Apple Silicon (M-series); no Intel Mac build is published. On Windows,
|
||||
**Which build?** On a Mac, check Apple menu → About This Mac: use `mac-arm64`
|
||||
for Apple Silicon (M-series), or `mac-x64` for Intel (available from v0.4.39). On Windows,
|
||||
check Settings → System → About → System type: the release is x64, not a native
|
||||
Windows ARM build. On Linux, `uname -m` reports `x86_64` (x64) or `aarch64`
|
||||
(arm64). Use `.deb` on Debian/Ubuntu, or AppImage on other distributions.
|
||||
@@ -178,20 +179,25 @@ notarization. The DMG is unsigned. First verify the download against the
|
||||
`SHA256SUMS` from the same release, then open the DMG and drag **Frame Control**
|
||||
to **Applications**.
|
||||
|
||||
Check your processor before opening: v0.4.36 and earlier publish only
|
||||
Check your processor before opening: v0.4.38 and earlier publish only
|
||||
`mac-arm64` for Apple Silicon. On an Intel Mac, this build cannot run;
|
||||
removing quarantine or installing Rosetta does not make an ARM app run on Intel.
|
||||
On a real Intel MacBook Air with macOS 15.7.7, opening v0.4.35 and v0.4.36
|
||||
reported: **“The application cannot be opened because it has an incorrect
|
||||
executable format.”** This is an architecture failure, not an observed
|
||||
Gatekeeper warning. See the [real-Mac test record](docs/evidence/mac-desktop-2026-10-26.md).
|
||||
Gatekeeper warning. The official **v0.4.39 Intel DMG** was then verified,
|
||||
installed and launched on that Air. Both CLI and T3 browser downloads lacked
|
||||
quarantine metadata; no Gatekeeper dialog appeared, while `spctl` rejected the
|
||||
ad hoc signed app. This does not verify Safari/Chrome warnings or Open Anyway.
|
||||
See the [released Intel test](docs/evidence/mac-v0439-2026-10-26.md) and
|
||||
[earlier architecture failure](docs/evidence/mac-desktop-2026-10-26.md).
|
||||
|
||||
On a compatible Mac, if macOS blocks an unverified developer, try opening the
|
||||
app once, then go to **System Settings → Privacy & Security → Open Anyway**
|
||||
and confirm **Open**. Only do this for a download you verified and trust.
|
||||
[Apple's opening instructions](https://support.apple.com/102445) describe the
|
||||
current security controls. The exact warning and this override flow have not
|
||||
yet been verified here on Apple Silicon.
|
||||
yet been verified here on either Mac architecture.
|
||||
|
||||
If a trusted, verified copy still reports “damaged” and offers no Open Anyway
|
||||
option, the Terminal fallback removes only this app's download quarantine
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
# What we have tested
|
||||
|
||||
Release baseline: Frame Control **v0.4.39**, 26 October 2026. Rows also identify verified post-release main changes explicitly. “Real Frame + physical PC” means an actual headset and a non-virtual computer. “VM only” means a Windows virtual machine, sometimes connected to the real Frame. A CI test or a simulated device is **not** a physical hardware test. The date/version column is the last relevant check, not a promise that every new release was retested on that platform. See each link for the exact procedure and limits.
|
||||
Current for Frame Control **v0.4.39**, 26 October 2026. “Real Frame + physical PC” means an actual headset and a non-virtual computer. “VM only” means a Windows virtual machine, sometimes connected to the real Frame. A CI test or a simulated device is **not** a physical hardware test. The date/version column is the last relevant check, not a promise that every new release was retested on that platform. See each link for the exact procedure and limits.
|
||||
|
||||
| Feature | Real Frame + physical PC tested | VM only | Untested or limited | Last check and proof |
|
||||
|---|---|---|---|---|
|
||||
| Mac desktop release — tested on a real Mac | Physical MacBook Air (MacBookAir9,1), Intel Core i3, macOS 15.7.7 (24G720): v0.4.35/v0.4.36 DMGs verified and installed; both fail to launch because they are ARM64-only. Separate Intel candidate launched: UI, native preference read/write (restored), bundled Python logs, latest-version check and offline OBS Start/Stop checked; released UI browsed 116 Decky store entries | No | Candidate results are not released-build acceptance. Native Open at Login state, Gatekeeper override, real OBS/Frame stream, native settings across restart, headset transfer and wearer interaction remain unverified | 26 Oct, v0.4.35/v0.4.36 and Intel candidate `6ea9eb2`: [real-Mac evidence](evidence/mac-desktop-2026-10-26.md) |
|
||||
| Mac desktop release — tested on a real Mac | Physical MacBook Air (MacBookAir9,1), Intel Core i3, macOS 15.7.7 (24G720): official v0.4.39 x64 DMG verified, installed and launched. Native UI, preference persistence across restart (original file restored), bundled Python logs, update check, offline OBS Start/Stop and 116-entry Decky store checked. A 40-byte relay upload/readback/delete passed under coordinator/headset locks | No | No quarantined Safari/Chrome download or Gatekeeper override test; native Open at Login/menu automation unavailable. Direct frame.local had no route and the app refused a stale SSH identity. Relay transfer is not native Mac transfer acceptance. Real OBS/Framey VR unverified. Quit exposed a server cleanup race; fix #284 has physical-Mac regression coverage, not a released fix | 26 Oct, official v0.4.39 tag `fd0b0a9`: [Intel release evidence](evidence/mac-v0439-2026-10-26.md); [earlier ARM64 failure](evidence/mac-desktop-2026-10-26.md) |
|
||||
| Core title smoke test | Linux lxso2 installed and removed reserved native/Proton titles on the real Frame; all 13 steps passed. ARM64 and Windows titles launched | No | The x86_64 title could not launch because Steam Linux Runtime 4.0 was not installed. The headset was unworn; visible rendering and controller input were not checked. Other feature paths retain their separate limits below | 26 Oct, v0.4.38 exact tag `d87b863`, Frame OS 0.5.6 build `20261022.6153909`: [latest release smoke](evidence/v0438-release-smoke-2026-10-26.md); [earlier detailed results](evidence/round2-smoke-2026-10-25.json) |
|
||||
| Windows desktop in the headset | No physical Windows PC test | Windows 11 VM sent a whole desktop to a real Frame; this used an intermediate fix, not the final native DLL | Physical GPU, capture and controller input; individual windows unavailable in bundled DXGI build | 24 Oct, v0.4.10 installer + candidate fix: [VM log](evidence/windows-vm-2026-10-24.md), [PC guide](pc-in-headset.md) |
|
||||
| Linux desktop in the headset | No | No | Native Linux PC capture is disabled; lxso2 lacked a desktop portal and PipeWire session. The separate Steam `-pipewire` helper is not Frame Control's PC capture | 24 Oct, v0.4.17: [host audit](evidence/linux-pc-host-lxso2-2026-10-24.md), [Steam helper PR #163](https://github.com/saphid/frame-control/pull/163) |
|
||||
| Mac desktop in the headset | A physical Mac sent its screen/window to a real Frame | No | Current v0.4.26 Mac installer and worn-headset controller input have not been repeated | 28 Sep, pre-v0.4 / Frame OS 0.4.1: [Mac guide and measurement](streaming.md#b-show-the-macs-desktop-inside-the-frame) |
|
||||
| OBS headset source on Linux | Real Frame to OBS 30.0.2 on a Linux host: 187.367 s, 720p30 H.264/AAC stereo, 5,621 frames, no encoder skips; room passthrough appeared in the recording | No | Synthetic tone was measured, not real game audio or audible listening. Default audio led by about 0.43 s in this setup; a measured +480 ms OBS offset removed residual skew at test resolution. Source-image latency was 1.431 s in one trial; other hosts and long sessions are unverified | 25 Oct, v0.4.30 package plus PR #219 runtime: [validation](evidence/obs-validation-2026-10-25.md) |
|
||||
| OBS headset source on Windows | No physical Windows PC test | Windows 11 VM helper fixture passed, but a native bridge to the real Frame sent no packets | In-app OBS controls remain hidden; native Windows OBS and firewall path are unverified | 25 Oct, PR #219: [validation](evidence/obs-validation-2026-10-25.md), [OBS guide](obs-headset-source.md) |
|
||||
| OBS headset source on macOS | No | No | Helper and OBS Media Source not tested on a Mac with a Frame | 25 Oct, v0.4.22: [OBS PR #174](https://github.com/saphid/frame-control/pull/174), [OBS guide](obs-headset-source.md) |
|
||||
| OBS headset source on macOS | Physical Intel Air: official v0.4.39 native Start/Stop returned to idle offline | No | Real headset stream, OBS receiver and audio/video remain unverified; the app rejected its stale SSH identity | 26 Oct, v0.4.39: [Mac evidence](evidence/mac-v0439-2026-10-26.md), [OBS guide](obs-headset-source.md) |
|
||||
| OBS headset source on a SteamOS / Steam Machine PC | No SteamOS PC or Flatpak OBS runtime test | No SteamOS host VM test | v0.4.27 AppImage launched on Ubuntu x86_64 under Xvfb; the helper sent H.264/AAC from a real Frame to a local UDP receiver. SteamOS read-only root, desktop UI and Flatpak OBS remain unverified | 25 Oct, v0.4.27: [host test](evidence/obs-steamos-host-2026-10-25.md), [OBS guide](obs-headset-source.md#steamos--steam-machine-pc-host) |
|
||||
| Wired connection doctor | No physical PC/Frame cable test of the doctor | No | Synthetic route/SSH tests; a separate Mac USB-C address observation does not test the doctor or game stream | 25 Oct, v0.4.23: [PR #178](https://github.com/saphid/frame-control/pull/178), [wired guide](wired-connection.md) |
|
||||
| Windows Wireless Adapter doctor | No physical Steam Wireless Adapter/dropout test | Windows 11 VM ran read-only checks without the adapter or WLAN | Adapter identification, dropouts and recovery on hardware | 24–25 Oct, v0.4.20–0.4.25: [VM log](evidence/windows-wireless-2026-10-24.md), [doctor guide](windows-wireless-doctor.md), [comparison PR #184](https://github.com/saphid/frame-control/pull/184) |
|
||||
@@ -24,7 +24,7 @@ Release baseline: Frame Control **v0.4.39**, 26 October 2026. Rows also identify
|
||||
| Open at login | No Frame needed; Linux autostart file toggled on a physical Linux host with an isolated config directory | No | A full login session and physical Windows/macOS host login have not been checked; OS API calls were unit tested | 25 Oct, v0.4.26: [PR #189](https://github.com/saphid/frame-control/pull/189) |
|
||||
| Local Frame Control extensions | Example panel displayed live Frame status in a browser preview; the real Frame served a read-only example in the experimental headset panel | No | No wearer-visible extension view; third-party extensions and physical Windows/macOS extension folders untested | 25 Oct, v0.4.29: [PR #194](https://github.com/saphid/frame-control/pull/194), [PR #201](https://github.com/saphid/frame-control/pull/201), [extension guide](extensions.md) |
|
||||
| Experimental Frame Control SteamVR panel | Frame OS 0.5.6 registered and served the opt-in overlay. A later unattended check safely woke SteamVR and found the panel in stereo compositor and mirror captures; it removed its temporary service and restored power settings | No | No person wore the headset for that check. Physical controller input, scrolling, VR keyboard, comfort and legibility remain unverified. The large status view has browser and packaging checks, not a wearer review | 26 Oct, v0.4.29–0.4.39: [panel PR #201](https://github.com/saphid/frame-control/pull/201), [unattended evidence](evidence/framey-vr-2026-10-25/README.md), [new standby-gated exercise](evidence/framey-vr-standby-gate-2026-10-26.md), [worn checklist](framey-vr-check.md) |
|
||||
| Experimental Decky Loader manager | Frame OS 0.5.6 ARM64 user-service install/status/update/remove and managed ProtonDB install/update/remove passed earlier. A private Decky 3.3.0 service returned read-only ProtonDB and Steam Status setting RPCs; a later locked check verified the official Notebook default drawing/save/reopen flow and Simple Timer backend events in local Chromium | No | The loader remains opt-in. Installs/updates reject an archive whose Decky name collides with another installed plugin before download and under the headset transaction lock; this safety path has host/fake Frame tests, not a new real-headset collision test. Post-release main after PR #282 classifies the 116 exact-version plugins as 1 works (Notebook default flow only), 48 partial, 56 broken and 11 not applicable; v0.4.39 shipped the earlier 1/45/59/11 catalog. Steamback, PlayTime and Deck Settings became partial after detached read-only library/user snapshots and isolated amd64 backend checks; their official ARM64 backends, automatic behavior and VR panels remain unverified. A read-only Steam bridge returned the Frame country, install folders and system information; IsThereAnyDeal selected that country in local Chromium, but its deployed HTTP endpoint and deal lookup remain unverified. An isolated ARM64 LocalSend core answered its info endpoint, but the official x86-only plugin archive and file transfers remain blocked. Three official audio plugins had local real-backend controls and independent virtual-audio readbacks, but their ARM64 Frame audio sessions and physical output remain unverified. Most official backends and VR controls remain unverified. Physical controller use and wearer-visible official panels remain unverified | 26 Oct, v0.4.31–0.4.39: [managed store PR #208](https://github.com/saphid/frame-control/pull/208), [name-collision PR #269](https://github.com/saphid/frame-control/pull/269), [catalog PR #266](https://github.com/saphid/frame-control/pull/266), [backend event evidence](evidence/framey-events-backend-2026-10-26.json), [Steam read PR #274](https://github.com/saphid/frame-control/pull/274), [LocalSend evidence PR #275](https://github.com/saphid/frame-control/pull/275), [local audio evidence](evidence/framey-audio-backends-2026-10-26.md), [post-release library evidence](evidence/framey-library-context-2026-10-26.md), [compatibility table](framey-compatibility.md) |
|
||||
| Experimental Framey VR plugin panels and store | Unattended Frame OS 0.5.6 runs showed the Framey sample panel in stereo compositor and mirror captures. The latest standby-gated exercise restored the original power settings and released its shared lock. Synthetic OpenVR clicks changed a live sample setting, read its Decky backend file and confirmed it after a fresh iframe reopen | No | This was the repository sample, not an official store plugin. Physical controllers, native scrolling, VR keyboard, wearer comfort and legibility remain unverified. CSS Loader and SteamGridDB exact archives passed fake Frame install/remove and panel packing; this does not establish theme or artwork controls in VR. Panel-local backend events and React toasts have local/real-backend checks, but no wearer review. Pause Games and Tailscale Control settings render in local Chromium; their live actions are unverified. The 116-plugin catalog had 60 fake installs/removals and 56 expected blocks; post-release PR #282 recorded 101 local Chromium initializers ready and 15 failed, up from 98/18 in v0.4.39. Notebook is marked works only for its default drawing/save/reopen flow | 26 Oct, v0.4.38–0.4.39: [latest unworn sample evidence](evidence/framey-vr-standby-gate-2026-10-26.md), [backend event PR #270](https://github.com/saphid/frame-control/pull/270), [settings/cache PR #271](https://github.com/saphid/frame-control/pull/271), [post-release sample exercise](evidence/v0439-release-2026-10-26.md#post-release-framey-library-change-282), [worn checklist](framey-vr-check.md) |
|
||||
| Experimental Decky Loader manager | Frame OS 0.5.6 ARM64 user-service install/status/update/remove and managed ProtonDB install/update/remove passed earlier. A private Decky 3.3.0 service returned read-only ProtonDB and Steam Status setting RPCs; a later locked check verified the official Notebook default drawing/save/reopen flow and Simple Timer backend events in local Chromium | No | The loader remains opt-in. Installs/updates reject an archive whose Decky name collides with another installed plugin before download and under the headset transaction lock; this safety path has host/fake Frame tests, not a new real-headset collision test. The exact-version official catalog covers 116 plugins: 1 works (Notebook default flow only), 45 partial, 59 broken and 11 not applicable. A read-only Steam bridge returned the Frame country, install folders and system information; IsThereAnyDeal selected that country in local Chromium, but its deployed HTTP endpoint and deal lookup remain unverified. An isolated ARM64 LocalSend core answered its info endpoint, but the official x86-only plugin archive and file transfers remain blocked. Three official audio plugins had local real-backend controls and independent virtual-audio readbacks, but their ARM64 Frame audio sessions and physical output remain unverified. Most official backends and VR controls remain unverified. Physical controller use and wearer-visible official panels remain unverified | 26 Oct, v0.4.31–0.4.39: [managed store PR #208](https://github.com/saphid/frame-control/pull/208), [name-collision PR #269](https://github.com/saphid/frame-control/pull/269), [catalog PR #266](https://github.com/saphid/frame-control/pull/266), [backend event evidence](evidence/framey-events-backend-2026-10-26.json), [Steam read PR #274](https://github.com/saphid/frame-control/pull/274), [LocalSend evidence PR #275](https://github.com/saphid/frame-control/pull/275), [local audio evidence](evidence/framey-audio-backends-2026-10-26.md), [compatibility table](framey-compatibility.md) |
|
||||
| Experimental Framey VR plugin panels and store | Unattended Frame OS 0.5.6 runs showed the Framey sample panel in stereo compositor and mirror captures. The latest standby-gated exercise restored the original power settings and released its shared lock. Synthetic OpenVR clicks changed a live sample setting, read its Decky backend file and confirmed it after a fresh iframe reopen | No | This was the repository sample, not an official store plugin. Physical controllers, native scrolling, VR keyboard, wearer comfort and legibility remain unverified. CSS Loader and SteamGridDB exact archives passed fake Frame install/remove and panel packing; this does not establish theme or artwork controls in VR. Panel-local backend events and React toasts have local/real-backend checks, but no wearer review. Pause Games and Tailscale Control settings render in local Chromium; their live actions are unverified. The 116-plugin catalog had 60 fake installs/removals and 56 expected blocks; 98 local Chromium initializers were ready and 18 failed. Notebook is marked works only for its default drawing/save/reopen flow | 26 Oct, v0.4.38–0.4.39: [latest unworn sample evidence](evidence/framey-vr-standby-gate-2026-10-26.md), [backend event PR #270](https://github.com/saphid/frame-control/pull/270), [settings/cache PR #271](https://github.com/saphid/frame-control/pull/271), [worn checklist](framey-vr-check.md) |
|
||||
|
||||
Release notes must preserve these limits until a newer recorded check changes them. When a feature is retested, add its date, exact app/Frame version, host type and proof here. The older [v0.3.1 matrix](support-matrix.html) is a historical snapshot and does not describe current coverage.
|
||||
@@ -5,6 +5,10 @@ Host: **MacBook Air (MacBookAir9,1), Intel Core i3 1.1 GHz, macOS 15.7.7
|
||||
server with display/automation restrictions. No Apple Silicon runtime result
|
||||
is inferred from this test.
|
||||
|
||||
**Follow-up:** the official v0.4.39 Intel installer later launched on this Air.
|
||||
See the [released-build test](mac-v0439-2026-10-26.md); the results below remain
|
||||
the earlier ARM64 failure and separate candidate test.
|
||||
|
||||
## Released installers: verified, installed, cannot run on Intel
|
||||
|
||||
GitHub's latest release was v0.4.35 at the start; v0.4.36 became latest during
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
# Official Intel Mac release test, 26 October 2026
|
||||
|
||||
Physical **MacBookAir9,1, Intel Core i3 1.1 GHz, macOS 15.7.7 (24G720)**.
|
||||
The earlier ARM64 failure led to [#262](https://github.com/saphid/frame-control/pull/262),
|
||||
now merged. This test uses the published **v0.4.39**, tag `fd0b0a9`, rather
|
||||
than the locally built candidate. [Earlier results](mac-desktop-2026-10-26.md)
|
||||
remain a separate historical record.
|
||||
|
||||
## Download, installation and Gatekeeper observations
|
||||
|
||||
Downloaded `Frame-Control-mac-x64.dmg` and its same-release `SHA256SUMS`
|
||||
with `gh release download`. `shasum -a 256 -c SHA256SUMS --ignore-missing`
|
||||
passed for the downloaded asset:
|
||||
|
||||
```text
|
||||
f47b5a188b5090f97a72467394d4fa65ccc73fe3169a6276e2a32cab5c8019d8 Frame-Control-mac-x64.dmg
|
||||
```
|
||||
|
||||
Also clicked that asset in T3's Chromium browser. Its 169,230,398-byte download
|
||||
had the same hash. **Neither download had `com.apple.quarantine`.** T3's
|
||||
browser is not evidence of Safari/Chrome download metadata.
|
||||
|
||||
Mounted the verified CLI DMG read-only, preserved the task's earlier ARM64
|
||||
installation, and copied `Frame Control.app` into `/Applications` with `ditto`
|
||||
(the command-line equivalent of dragging it there). The executable is x86_64;
|
||||
`codesign -dv` reports ad hoc signing. `open "/Applications/Frame Control.app"`
|
||||
returned success and the app started its bundled Python server.
|
||||
|
||||
**No Gatekeeper warning dialog was observed.** `spctl --assess --type execute
|
||||
-vv "/Applications/Frame Control.app"` returned exit 3 and exactly:
|
||||
|
||||
```text
|
||||
/Applications/Frame Control.app: rejected
|
||||
```
|
||||
|
||||
Opening this unquarantined copy needed no override. This does not establish
|
||||
the warning or opening steps for a quarantined browser download. The README
|
||||
keeps Apple's Open Anyway guidance, explicitly unverified here. No quarantine
|
||||
attribute was removed and no global security setting was changed. System
|
||||
Events inspection timed out; an AppleEvent quit request returned “User
|
||||
cancelled” (-128). Native console/menu automation remains unavailable.
|
||||
|
||||
## Official native app results
|
||||
|
||||
After the normal launch, a second run disabled telemetry, used a task-local
|
||||
server data directory and enabled a temporary loopback renderer debug port.
|
||||
The app bundle was not patched. The following checks used its real renderer
|
||||
and `window.frameApp` IPC bridge; they are not physical mouse/menu tests.
|
||||
|
||||
| Check | Result and limit |
|
||||
|---|---|
|
||||
| UI | Apps, Games, Tools, Settings, Privacy & updates, Capture and Decky views rendered with the expected headings. The activity log showed the stale SSH identity warning. [Native Apps screenshot](mac-v0439-native-2026-10-26.png) |
|
||||
| Settings | Initial native preferences were `{}`. `mvSeparate="0"` saved and read back, including after a real app restart. The original preferences file was restored byte-for-byte in `finally` (or removed if originally absent) |
|
||||
| Open at Login | Still opt-in in source; no login item was enabled. Actual menu checkbox and OS login behavior remain unverified because native automation was unavailable |
|
||||
| Logs | `~/Library/Logs/Frame Control/server.log` recorded startup with the installed app's `Contents/Resources/python/bin/python3` and `ui/server.py`. Show Server Log menu interaction remains unverified |
|
||||
| Update check | Native check returned current/latest `0.4.39`, status `none`, error `null`. No update installed |
|
||||
| OBS | Native Start on port 15123 returned `starting`; Stop returned `stopping`, then `idle`. This was offline: no OBS receiver or real headset audio/video |
|
||||
| Decky store | Native Load store returned 116 entries; 40 initial rows rendered. Search found ProtonDB Badges 1.3.4 and its compatibility text. Install remained disabled; no plugin/loader installed |
|
||||
| Framey preview | No standalone local Framey preview control found. No VR runtime result claimed |
|
||||
|
||||
Closing the app through `window.close()` stopped its processes and closed
|
||||
the debug port. **The final shutdown log exposed a bug:** stdin EOF and the
|
||||
app's SIGTERM can overlap, raising `KeyboardInterrupt` while cleanup is
|
||||
installing its ignore handler. Cleanup can then stop before releasing staging
|
||||
or SSH resources. [#284](https://github.com/saphid/frame-control/pull/284)
|
||||
changes SIGTERM to request HTTP shutdown without raising into cleanup.
|
||||
|
||||
The regression test injects SIGTERM at that exact cleanup boundary. On this
|
||||
physical Mac with the official app's bundled Python 3.12, it failed before
|
||||
the fix with exit -2 and the observed traceback. After the fix, all **45
|
||||
server integration tests** passed, including owned staging-file cleanup.
|
||||
This validates source from the fix PR, not a fixed published app.
|
||||
|
||||
## Headset relay and small transfer
|
||||
|
||||
`frame.local` resolved but TCP 22 returned **No route to host**. The native
|
||||
app refused a stale SSH identity; no pin was replaced. The trusted lxso2
|
||||
coordinator relay could reach the Frame. Both shared locks were absent.
|
||||
|
||||
The relay test atomically created `/tmp/frame-test.lock` on the coordinator
|
||||
and the headset, each with this job's owner marker. It then:
|
||||
|
||||
- Read battery **99%, Not charging** before and after; storage total
|
||||
**996,984,774,656 bytes**, free **769,077,035,008 bytes**.
|
||||
- Listed **7** Steam screenshot JPEGs matching
|
||||
`userdata/*/760/remote/*/screenshots/*.jpg`; no image was copied. This narrower
|
||||
layout-specific count differs from the earlier broad JPEG search.
|
||||
- Sent a **40-byte** test payload from this Mac through lxso2, created one
|
||||
reserved file in the Frame user's home using exclusive creation, and read
|
||||
it back. SHA-256 matched
|
||||
`457485db13f80d819d5301d337502c3df050c6b3eb6202be7aac85d2af8e0b92`.
|
||||
- Deleted that exact test file and released only the matching owned locks.
|
||||
A separate SSH read verified the file and both locks were absent.
|
||||
|
||||
This proves a bounded relay transfer, not native Mac app file transfer or
|
||||
direct `frame.local` connectivity. No existing headset file, app, service,
|
||||
power setting or SteamVR state was changed. The headset was not wiped or
|
||||
rebooted. Real OBS and wearer/controller interaction remain unverified.
|
||||
|
||||
The DMG was ejected; the native app, debug port and task browser tab were
|
||||
closed; the desk hold was released. The official app remains installed for
|
||||
reproduction. No social post was made; PR #113 was left alone.
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 529 KiB |
@@ -1,212 +0,0 @@
|
||||
{
|
||||
"tag": "v0.4.39",
|
||||
"tagCommit": "fd0b0a946f11d92fd1cc480cd9d1a83be795bf71",
|
||||
"releaseUrl": "https://github.com/saphid/frame-control/releases/tag/v0.4.39",
|
||||
"releaseId": 423799494,
|
||||
"releaseWorkflow": {
|
||||
"runId": 40258561639,
|
||||
"conclusion": "success",
|
||||
"jobsPassed": 6
|
||||
},
|
||||
"publishedLatest": true,
|
||||
"assets": [
|
||||
{
|
||||
"name": "Frame-Control-linux-amd64.deb",
|
||||
"size": 131444552,
|
||||
"digest": "sha256:9ca74551fe47ea244f500e1b4119c02307d185d1acea6287a02a5f6c055c674e"
|
||||
},
|
||||
{
|
||||
"name": "Frame-Control-linux-arm64.AppImage",
|
||||
"size": 156170292,
|
||||
"digest": "sha256:66bd8f644f6a0b06f1e46ff635c5b50e53d3f2a9c6736f12b737ee0ad1667335"
|
||||
},
|
||||
{
|
||||
"name": "Frame-Control-linux-arm64.deb",
|
||||
"size": 118529048,
|
||||
"digest": "sha256:f6b476a2f3163028d0862a13d0c8890760bdc8fe52c1006f106d9e540de32a6a"
|
||||
},
|
||||
{
|
||||
"name": "Frame-Control-linux-x86_64.AppImage",
|
||||
"size": 164587947,
|
||||
"digest": "sha256:240023c89bea049f0864da75f83ec235c138375c4fd1c4612953a4c5863610ca"
|
||||
},
|
||||
{
|
||||
"name": "Frame-Control-mac-arm64.dmg",
|
||||
"size": 162169626,
|
||||
"digest": "sha256:c0243317555975b1a5588640ec6fe71db5014788858ff00dd45914b77c1fe99a"
|
||||
},
|
||||
{
|
||||
"name": "Frame-Control-mac-arm64.zip",
|
||||
"size": 162054585,
|
||||
"digest": "sha256:08191f80d6c78ac8576e2e2fe7937f5c1689ebed780528e63b6fb41b3c90d823"
|
||||
},
|
||||
{
|
||||
"name": "Frame-Control-mac-x64.dmg",
|
||||
"size": 169230398,
|
||||
"digest": "sha256:f47b5a188b5090f97a72467394d4fa65ccc73fe3169a6276e2a32cab5c8019d8"
|
||||
},
|
||||
{
|
||||
"name": "Frame-Control-mac-x64.zip",
|
||||
"size": 169141014,
|
||||
"digest": "sha256:bafc1aec0c11c1fae097dbe1e4b585ebc13a0f8eaf1b249717c14d78811e08d7"
|
||||
},
|
||||
{
|
||||
"name": "Frame-Control-Setup-x64.exe",
|
||||
"size": 136500288,
|
||||
"digest": "sha256:44a9f4c072b8c10ec81b060484764af10607763c69d55ecdad6bd0b103b7207e"
|
||||
},
|
||||
{
|
||||
"name": "Frame-Control-win-x64.zip",
|
||||
"size": 183446427,
|
||||
"digest": "sha256:14f3dae327f054431ecb7ed204144dc529e04a03b35b646925bd9812dc54c504"
|
||||
}
|
||||
],
|
||||
"sha256sumsDigest": "sha256:59cff0ab59e2a681656c0b15b3445ca0baa0546d03196f8c4ae58eae8785db25",
|
||||
"updateJsonDigest": "sha256:afef87fa3869be3acf06dfaa4831a97b29ce9c5d275940a2202bc958c62f4d67",
|
||||
"publisherDryRun": {
|
||||
"passed": true,
|
||||
"installerDigests": 10,
|
||||
"digestAndChecksumChecks": 11,
|
||||
"completeNotesCharacters": 3837
|
||||
},
|
||||
"downloadedAppImage": {
|
||||
"name": "Frame-Control-linux-x86_64.AppImage",
|
||||
"sha256": "240023c89bea049f0864da75f83ec235c138375c4fd1c4612953a4c5863610ca",
|
||||
"isolatedXvfbHttpStatus": 200,
|
||||
"serverStopped": true,
|
||||
"serverHeaderPrefix": "FrameControl/1"
|
||||
},
|
||||
"downloadedIntelMacZip": {
|
||||
"name": "Frame-Control-mac-x64.zip",
|
||||
"sha256": "bafc1aec0c11c1fae097dbe1e4b585ebc13a0f8eaf1b249717c14d78811e08d7",
|
||||
"machOCpu": "x86_64",
|
||||
"inspected": [
|
||||
"app executable",
|
||||
"bundled Python 3.12",
|
||||
"Electron helper"
|
||||
],
|
||||
"physicalRuntime": "unverified"
|
||||
},
|
||||
"realFrameSmoke": {
|
||||
"sourceTag": "v0.4.39",
|
||||
"started": "2026-10-26T02:20:45Z",
|
||||
"buildId": "20261022.6153909",
|
||||
"preflight": {
|
||||
"activity": 3,
|
||||
"proximity": [
|
||||
6.3125
|
||||
],
|
||||
"battery": [
|
||||
100
|
||||
]
|
||||
},
|
||||
"passed": 13,
|
||||
"failed": 0,
|
||||
"steps": [
|
||||
{
|
||||
"name": "cleanup: leftovers from earlier runs",
|
||||
"passed": true,
|
||||
"seconds": 8.2
|
||||
},
|
||||
{
|
||||
"name": "devkit service: properties.json",
|
||||
"passed": true,
|
||||
"seconds": 0.0
|
||||
},
|
||||
{
|
||||
"name": "status",
|
||||
"passed": true,
|
||||
"seconds": 0.6
|
||||
},
|
||||
{
|
||||
"name": "arm64: install",
|
||||
"passed": true,
|
||||
"seconds": 8.0
|
||||
},
|
||||
{
|
||||
"name": "arm64: launch",
|
||||
"passed": true,
|
||||
"seconds": 3.5
|
||||
},
|
||||
{
|
||||
"name": "arm64: remove",
|
||||
"passed": true,
|
||||
"seconds": 6.8
|
||||
},
|
||||
{
|
||||
"name": "x86_64: install",
|
||||
"passed": true,
|
||||
"seconds": 7.9
|
||||
},
|
||||
{
|
||||
"name": "x86_64: launch",
|
||||
"passed": true,
|
||||
"seconds": 3.5
|
||||
},
|
||||
{
|
||||
"name": "x86_64: remove",
|
||||
"passed": true,
|
||||
"seconds": 6.6
|
||||
},
|
||||
{
|
||||
"name": "exe: install",
|
||||
"passed": true,
|
||||
"seconds": 8.0
|
||||
},
|
||||
{
|
||||
"name": "exe: launch",
|
||||
"passed": true,
|
||||
"seconds": 3.4
|
||||
},
|
||||
{
|
||||
"name": "exe: remove",
|
||||
"passed": true,
|
||||
"seconds": 6.5
|
||||
},
|
||||
{
|
||||
"name": "cleanup: everything this run installed",
|
||||
"passed": true,
|
||||
"seconds": 8.1
|
||||
}
|
||||
],
|
||||
"ownedLockReleased": true
|
||||
},
|
||||
"postReleasePr282": {
|
||||
"headCommit": "ce6e8f807f44b614e5bbd5c5a5a6a2093236d917",
|
||||
"mergedCommit": "67b9151513bc9fb550f5dfb2d2eec925df390ab3",
|
||||
"exactHeadCiPassed": 11,
|
||||
"unwornVrExercise": {
|
||||
"passed": true,
|
||||
"beforeActivity": 3,
|
||||
"beforeBattery": [
|
||||
99
|
||||
],
|
||||
"afterBattery": [
|
||||
99
|
||||
],
|
||||
"overlayVisible": true,
|
||||
"compositorChanged": true,
|
||||
"stereoCaptureSha256": "c7edc11877aca35dd3aebe480feee93253d04825fe9bd75d02136bb7e3510b97",
|
||||
"mirrorCaptureSha256": "8e5932fb0046b218a1781a6b06cfaa6e3c13dc7874799e287066ed6e43640cd4",
|
||||
"syntheticPointerInputPassed": true,
|
||||
"liveSettingReopened": true,
|
||||
"nativeScrollMoved": false,
|
||||
"powerRecoveryRemoved": true,
|
||||
"ownedLockReleased": true,
|
||||
"cleanupErrors": [],
|
||||
"physicalControllerVerified": false,
|
||||
"wornVisualVerified": false,
|
||||
"officialPluginsInVrVerified": false
|
||||
},
|
||||
"realFrameSmoke": {
|
||||
"passed": 13,
|
||||
"failed": 0,
|
||||
"beforeActivity": 3,
|
||||
"battery": [
|
||||
99
|
||||
],
|
||||
"buildId": "20261022.6153909",
|
||||
"ownedLockReleased": true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
# v0.4.39 release gate, 26 October 2026
|
||||
|
||||
The [published release](https://github.com/saphid/frame-control/releases/tag/v0.4.39) is GitHub's latest release. Its tag resolves to main commit `fd0b0a946f11d92fd1cc480cd9d1a83be795bf71`, after PRs #280 and #281 merged. The [tagged workflow](https://github.com/saphid/frame-control/actions/runs/40258561639) passed all six jobs: draft, Apple Silicon Mac, Intel Mac, Windows, Linux and checksums. The release has ten installers, `SHA256SUMS` and `update.json`. [Sanitized numeric results](v0439-release-2026-10-26.json) contain the exact asset sizes and GitHub digests.
|
||||
|
||||
| Gate | Result |
|
||||
|---|---|
|
||||
| `scripts/publish-release.sh --dry-run v0.4.39` from the exact tag | Passed: all ten installer digests, regenerated `SHA256SUMS` digest, complete update notes and ten-asset `update.json` |
|
||||
| Downloaded Linux x86_64 AppImage | SHA-256 matched `240023c89bea049f0864da75f83ec235c138375c4fd1c4612953a4c5863610ca`; the tagged isolated Xvfb check received HTTP 200 with a `FrameControl/1` server header prefix and confirmed the server stopped |
|
||||
| Downloaded Intel Mac ZIP | SHA-256 matched `bafc1aec0c11c1fae097dbe1e4b585ebc13a0f8eaf1b249717c14d78811e08d7`; ZIP inspection found x86_64 Mach-O app executable, bundled Python 3.12 and Electron helper |
|
||||
| Exact tagged `scripts/frame-smoke.sh` on the real Frame | **13/13** steps passed on SteamOS build `20261022.6153909`; locked preflight found SteamVR activity 3, proximity raw 6.3125 and battery 100%. Reserved test titles were removed and the script released its owner-token lock. |
|
||||
| Published release readback | GitHub reports `draft=false`, `prerelease=false`, latest tag `v0.4.39`; downloaded `update.json` lists ten unique assets, the stable release URL and complete safety notes |
|
||||
|
||||
The first local AppImage launch attempt stopped before app startup because the execution sandbox denied Electron's sandbox host (`Operation not permitted`). Repeating the same tagged check with host permissions passed. The bundled release CI also ran its own AppImage launch check.
|
||||
|
||||
The unworn VR runner's candidate evidence is [documented separately](framey-vr-standby-gate-2026-10-26.md). Its successful stereo and `/dev/video99` panel captures and synthetic OpenVR input are not a worn or physical-controller test. Two other attempts found an intermittently hidden overlay and failed safely. No person wore the headset for this release check. Physical controller input, optical comfort, VR keyboard, native scroll and official-plugin wearer-visible behavior remain unverified.
|
||||
|
||||
The physical Intel MacBook Air ran an earlier candidate, but was unreachable for this exact tagged installer. The architecture and hash checks above do not prove physical Mac runtime. Physical Windows PC and macOS OBS/headset capture also remain unverified. No private room pixels or raw Steam log lines are included here.
|
||||
|
||||
## Post-release Framey library change (#282)
|
||||
|
||||
After v0.4.39 publication, [PR #282](https://github.com/saphid/frame-control/pull/282) merged at `67b9151513bc9fb550f5dfb2d2eec925df390ab3`. All eleven exact-head checks passed on `ce6e8f807f44b614e5bbd5c5a5a6a2093236d917`. This commit is **not** in v0.4.39. The [library-context evidence](framey-library-context-2026-10-26.md) covers its three newly partial official plugins and separate backend limits.
|
||||
|
||||
The exact #282 source ran `scripts/framey-vr-check.py --exercise` under the shared lock from standby (activity 3, battery 99%). The sample panel became visible; stereo compositor pixels changed and `/dev/video99` mirror bytes were captured. Trusted synthetic OpenVR pointer input reached the repository sample's live Decky setting and the saved value survived reopening. Native scroll did not move. The runner removed its recovery timer, restored original power values, reported no cleanup errors and released its owner-token lock. Private images and room pixels remain outside this repository. The source came from an exact commit archive, so the runner's `sourceCommit` field was empty; the archive object ID was verified before extraction.
|
||||
|
||||
Once the Frame returned to standby, the exact #282 source passed `scripts/frame-smoke.sh` **13/13** on the real SteamOS build `20261022.6153909`, with battery 99% at preflight. Test titles were removed and the lock was released. These checks cover the Framey sample and generic Frame smoke, not Steamback, PlayTime or Deck Settings in VR. No wearer or physical controller was involved; those limits remain open.
|
||||
Reference in new issue
Block a user