From e7fe34d8652c12e43a663280ef4470fcda63e4ec Mon Sep 17 00:00:00 2001 From: SAPHID Date: Mon, 26 Oct 2026 02:26:52 +0000 Subject: [PATCH] Add detached Steam library context for Framey panels --- .../framey-library-context-2026-10-26.json | 326 ++++++++++++++++++ .../framey-library-context-2026-10-26.md | 72 ++++ docs/framey-compatibility.md | 14 +- scripts/framey-audit-browser.py | 20 +- scripts/framey-compatibility-doc.py | 5 + tests/page/framey_actions.mjs | 27 +- tests/test_framey_panel.py | 57 ++- ui/framey-compatibility.json | 56 ++- ui/framey-host.js | 38 +- ui/framey_panel.py | 28 +- ui/headset.html | 2 +- 11 files changed, 606 insertions(+), 39 deletions(-) create mode 100644 docs/evidence/framey-library-context-2026-10-26.json create mode 100644 docs/evidence/framey-library-context-2026-10-26.md diff --git a/docs/evidence/framey-library-context-2026-10-26.json b/docs/evidence/framey-library-context-2026-10-26.json new file mode 100644 index 0000000..58e8cdb --- /dev/null +++ b/docs/evidence/framey-library-context-2026-10-26.json @@ -0,0 +1,326 @@ +{ + "timeUtc": "2026-10-26T02:23:08.939647+00:00", + "theme": "Detached read-only Steam library and current-user context", + "baselineMain": "3921e59", + "hostFileSha256": "3f70e9769c6c95d39cfa329ccf3f822df85d411e9295bdf888508b4738679e9d", + "realFrame": { + "platform": "Frame OS 0.5.6 ARM64", + "path": "SSH via lxso2; Steam SharedJSContext CDP", + "lock": "/tmp/frame-test.lock atomic mkdir; matching owner released in finally after every probe", + "apps": 1106, + "games": 895, + "compactBytesWithoutUser": 88451, + "invalidRows": 0, + "missingGameOverviews": 0, + "currentUser": "17-digit string verified; value withheld", + "mutations": "none; no wake, service, setting, screenshot or library changes; no device artifacts created", + "limits": "read-only CEF projection, not an official backend or worn-VR test" + }, + "browser": { + "mode": "opaque iframe Chromium; detached real Frame snapshot replay; all backend/network actions denied", + "attempted": 116, + "initializerReady": 101, + "failed": 15, + "initializerGains": [ + 46, + 53, + 66 + ], + "regressions": [], + "focused": [ + { + "id": 37, + "name": "Discord Status", + "ready": true, + "error": null, + "logs": [], + "methods": [], + "library": "snapshot replay" + }, + { + "id": 46, + "name": "Steamback", + "ready": true, + "error": null, + "logs": [ + { + "kind": "error", + "message": "TypeError: saveInfos.map is not a function" + } + ], + "methods": [ + "set_account_id", + "get_saveinfos" + ], + "library": "snapshot replay" + }, + { + "id": 53, + "name": "Shotty", + "ready": true, + "error": null, + "logs": [], + "methods": [ + "set_id_map_fronend" + ], + "library": "snapshot replay" + }, + { + "id": 66, + "name": "PlayTime", + "ready": true, + "error": null, + "logs": [ + { + "kind": "error", + "message": "%c PlayTime %c ERROR background: #16a085; color: black; background: #FF000040; Impossible to get \"RunningApps\" observe. Events will not be attached." + }, + { + "kind": "error", + "message": "%c PlayTime %c ERROR background: #16a085; color: black; background: #FF000040; Unable to get settings, saving defaults Error: Not found" + }, + { + "kind": "error", + "message": "%c PlayTime %c ERROR background: #16a085; color: black; background: #FF000040; Failed to set current user: Error: Read-only compatibility audit: backend method blocked" + }, + { + "kind": "error", + "message": "%c PlayTime %c ERROR background: #16a085; color: black; background: #FF000040; Error: Read-only compatibility audit: backend method blocked" + } + ], + "methods": [ + "set_current_user", + "fetch_playtime_information", + "statistics_for_last_two_weeks", + "daily_statistics_for_period" + ], + "library": "snapshot replay" + }, + { + "id": 93, + "name": "Deck Settings", + "ready": true, + "error": null, + "logs": [ + { + "kind": "error", + "message": "[decky-game-settings:AuthorFooter] Error fetching avatar image: Error: Decky proxy fetch is unavailable in Framey" + }, + { + "kind": "error", + "message": "[decky-game-settings:GameSelectView] Error fetching installed games: Error: Read-only compatibility audit: live Steam API blocked" + } + ], + "methods": [], + "library": "snapshot replay" + }, + { + "id": 132, + "name": "SuggestMe", + "ready": true, + "error": null, + "logs": [ + { + "kind": "error", + "message": "[SuggestMe] Failed to load config: Error: Read-only compatibility audit: backend method blocked" + }, + { + "kind": "error", + "message": "[SuggestMe] Failed to load library status: Error: Read-only compatibility audit: backend method blocked" + }, + { + "kind": "error", + "message": "[SuggestMe] Failed to load play next list: Error: Read-only compatibility audit: backend method blocked" + }, + { + "kind": "error", + "message": "[SuggestMe] Failed to load excluded games: Error: Read-only compatibility audit: backend method blocked" + }, + { + "kind": "error", + "message": "[SuggestMe] Failed to load filter presets: Error: Read-only compatibility audit: backend method blocked" + }, + { + "kind": "error", + "message": "[SuggestMe] Failed to load history: Error: Read-only compatibility audit: backend method blocked" + }, + { + "kind": "error", + "message": "[SuggestMe] Failed to load non-steam info: Error: Read-only compatibility audit: backend method blocked" + }, + { + "kind": "error", + "message": "[SuggestMe] Failed to load collections: Error: Read-only compatibility audit: backend method blocked" + } + ], + "methods": [ + "log_message", + "get_config", + "get_library_status", + "get_play_next_list", + "get_excluded_games", + "get_filter_presets", + "get_suggestion_history", + "get_non_steam_games", + "get_collections", + "get_available_genres", + "get_available_tags", + "get_available_community_tags" + ], + "library": "snapshot replay" + }, + { + "id": 134, + "name": "Deck Progress Tracker", + "ready": true, + "error": null, + "logs": [], + "methods": [ + "get_settings", + "get_tag_statistics" + ], + "library": "snapshot replay" + }, + { + "id": 135, + "name": "Deck Shelves", + "ready": false, + "error": "Failed to resolve module specifier \"./chunks/pluginApi-B8sV7970.js\". Invalid relative url or base scheme isn't hierarchical.", + "logs": [], + "methods": [], + "library": "snapshot replay" + } + ] + }, + "fakeFrame": { + "attempted": 116, + "installedRemoved": 60, + "expectedBlockers": 56, + "backendExecution": "stubbed", + "cleanup": "private Compose containers/network/volumes removed" + }, + "localBackends": { + "timeUtc": "2026-10-26T02:18:51.848256+00:00", + "verification": "local Chromium + actual Decky 3.3.0 amd64, detached real Frame SSH snapshot; no worn VR", + "calls": [ + { + "id": 46, + "method": "set_account_id", + "resultType": "dict", + "resultCount": 2 + }, + { + "id": 46, + "method": "get_saveinfos", + "resultType": "dict", + "resultCount": 2 + }, + { + "id": 66, + "method": "set_current_user", + "resultType": "NoneType" + }, + { + "id": 66, + "method": "statistics_for_last_two_weeks", + "resultType": "list", + "resultCount": 0 + }, + { + "id": 66, + "method": "fetch_playtime_information", + "resultType": "list", + "resultCount": 0 + }, + { + "id": 66, + "method": "daily_statistics_for_period", + "resultType": "dict", + "resultCount": 3 + }, + { + "id": 66, + "method": "fetch_playtime_information", + "resultType": "list", + "resultCount": 0 + }, + { + "id": 66, + "method": "statistics_for_last_two_weeks", + "resultType": "list", + "resultCount": 0 + } + ], + "runtime": { + "tag": "v3.3.0", + "name": "PluginLoader", + "digest": "sha256:e80d03e641d1766a33a817cb27ab8d2e0a4633685e5d27e4de948a6687526181" + }, + "legacyReadback": { + "plugin": 46, + "method": "get_saveinfos", + "replyType": 1, + "success": true, + "saveInfoCount": 0 + } + }, + "uiChecks": { + "Steamback": "Supported games panel, actual private backend set_account_id and get_saveinfos returned successfully; empty isolated Steam save data", + "PlayTime": "Statistics panel (empty database) and routed General settings/tabs rendered; actual private backend selected user and returned statistics", + "Deck Settings": "Installed game picker rendered real Frame install-folder/name snapshot; search modal rendered", + "Shotty": "Initializer repaired; actual Decky 3.3.0 backend fails importing unused click.get_app_dir: ModuleNotFoundError; no screenshot methods invoked" + }, + "notVerified": [ + "Real ARM64 official backends in this theme", + "Worn VR/controllers/keyboard", + "Live MobX or running-game observations", + "Steamback backups/restores and automatic notifications", + "PlayTime automatic recording, existing databases or account switches while panel remains open", + "Deck Settings remote reports/proxy fetch and settings changes", + "Shotty screenshot aggregation/rescue" + ], + "cleanup": { + "localContainer": "stopped/removed; docker ps -a matching name empty", + "headsetLockReleased": true, + "httpHelpers": "three task-local HTTP servers stopped" + }, + "plugins": [ + { + "id": 37, + "name": "Discord Status", + "version": "1.5.0", + "sha256": "00a45dd919abb6e050685e1e408ce8023b9c4a09d6e91ba528d50aed2a63bf45" + }, + { + "id": 46, + "name": "Steamback", + "version": "1.0.0-1", + "sha256": "ed5f2fbb47cdfc3aa9a4349a139ab20c29976117a3be0de7e8a588bb265ee7f3" + }, + { + "id": 53, + "name": "Shotty", + "version": "0.1.0", + "sha256": "ab7f6618b264a0cb766525e788cef6c3e1478c0fef98a701225e5e8af441e2fe" + }, + { + "id": 66, + "name": "PlayTime", + "version": "3.2.5", + "sha256": "10fc3beea48991c77cb02867e919b618d4cd6d5e9c6a6d0ccd5266c13214039f" + }, + { + "id": 93, + "name": "Deck Settings", + "version": "1.2.6", + "sha256": "23c2a933a6883e2622f0184c33a76ce4a4e88c0a7dcd730f9bab71b8c3702132" + } + ], + "validation": { + "serverTests": 1617, + "serverSkips": 16, + "siteTests": 18, + "fakeFramePanel": "2 targeted panel/store flows passed; private Compose resources removed", + "focusedFrameyTests": 40 + } +} diff --git a/docs/evidence/framey-library-context-2026-10-26.md b/docs/evidence/framey-library-context-2026-10-26.md new file mode 100644 index 0000000..e7be762 --- /dev/null +++ b/docs/evidence/framey-library-context-2026-10-26.md @@ -0,0 +1,72 @@ +# Framey detached Steam library context — 2026-10-26 + +Framey now reads a bounded library snapshot before importing official frontends +that reference `appStore`, `collectionStore` or `m_CurrentUser`. It supplies app +IDs/names/types/game IDs, sorting/playtime scalars, the actual all-games +collection and the current public Steam ID. It does not copy credentials, +balances, account names, filesystem paths or executable Steam objects. + +The projection is a fixed, parameterless `GetLibrarySnapshot` read through the +existing installed-store-plugin boundary. The parent checks the iframe source, +session, method and empty argument list. The host validates rows before exposing +detached Maps and lookup methods. Plugin patches remain local to that iframe. +Missing or invalid data leaves the globals unavailable and logs a clear warning; +there is no invented account or empty-library fallback. Reopening the panel +refreshes the snapshot. Live MobX observations, account-switch notifications and +running-game events are outside this change. + +Library-sized backend arguments now have a 256 KiB UTF-8 JSON budget. The old +8 KiB ceiling rejected normal app-name maps. Payloads travel as quoted literals +on SSH stdin, avoiding operating-system limits on a single command argument. +Store receipt ownership, method validation and legacy keyword envelopes still +apply. The library read has a separate 2 MiB / 10,000-app limit; other Steam +reads retain their 256 KiB response limit. + +## Observations + +| Plugin | Verified behavior | Remaining limit | +| --- | --- | --- | +| Steamback 1.0.0-1 | Panel opens; account setup and empty save-list reads succeed through actual Decky 3.3.0 amd64 | Private container had no Steam saves. ARM64 backend, backup/restore and automatic hooks unverified. Partial. | +| PlayTime 3.2.5 | Actual backend selects the user, returns empty statistics; statistics panel and routed settings/tabs render | No sessions were created. ARM64 backend, existing databases, live observations and automatic recording unverified. Partial. | +| Deck Settings 1.2.6 | Installed game picker renders the real Frame folder/name snapshot; search modal opens | Remote reports/proxy fetch, settings changes and ARM64 backend unverified. Partial. | +| Shotty 0.1.0 | Library-based initializer now completes | Exact backend fails importing `click.get_app_dir`: `ModuleNotFoundError: No module named 'click'`. Archive does not bundle it. Broken. | +| Discord Status 1.5.0 | Detached overview lookups available | Live running-app observations and artwork helpers remain absent; Discord activity unverified. Broken. | + +Exact plugin versions/digests, runtime digest, scoped calls and counts are in the +[redacted observations](framey-library-context-2026-10-26.json). The canonical +table/store labels use the same digest-scoped JSON. None of these plugins is +promoted to **works** by this pass. + +## Verification boundaries + +- **Real Frame SSH:** atomic `/tmp/frame-test.lock` acquisition for every probe, + matching-owner release in `finally`. Frame OS 0.5.6 ARM64 Steam CEF returned + 1,106 apps and 895 game IDs; no missing collection members or invalid rows. + The compact library-only response was 88,451 bytes. Current-user field shape + was separately inspected. Values remain private; only aggregate counts are + published. No wake, power/service changes or device artifacts were needed. +- **Local Chromium:** production `headset.html`, current host, opaque iframe and + unmodified digest-checked official frontends. Library/user and install-folder + data were detached snapshots read from the Frame, replayed locally. This is + not a deployed headset HTTP or worn-VR test. +- **Actual local backends:** published Decky 3.3.0 amd64 executable, private + unprivileged container, network disabled, capabilities dropped, no devices, + host home, saves or Steam files mounted. Only account setup within private + plugin data and read methods were allowed. Backup, restore, aggregation, + screenshot rescue and game actions were denied. Shotty's import failure was + observed from the runtime log before invoking screenshot methods. +- **Catalog regression:** 116 exact frontends attempted, 101 initializer-ready + and 15 failed, compared with 98 ready before this theme. Steamback, Shotty and + PlayTime gained initializer readiness; no previous ready state regressed. + Backend/network calls stayed denied in this sweep. Readiness alone does not + establish useful operation. +- **Fake Frame:** 116 archive/transport cases; 60 install/remove cycles and 56 + expected blockers. Official backend execution was stubbed. Its private + Compose containers, network and volumes were removed. + +The browser audit accepts `--library-snapshot /private/library.json` to reproduce +the detached replay. This flag does not convert the audit into live Steam or +backend evidence. Never commit personal library snapshots or account values. + +No worn-VR, physical controller, keyboard, automatic recording or backup claim +is made. Further device backend checks still require the shared hardware lock. diff --git a/docs/framey-compatibility.md b/docs/framey-compatibility.md index 2314341..411005e 100644 --- a/docs/framey-compatibility.md +++ b/docs/framey-compatibility.md @@ -4,7 +4,7 @@ Snapshot: 2026-10-25T23:19:48.854504+00:00; 116 current visible official plugins This table and both store views use [`ui/framey-compatibility.json`](../ui/framey-compatibility.json). Results apply only to the exact store ID, version and SHA-256. A changed digest/version is **unverified**. Regenerate this document with `python3 scripts/framey-compatibility-doc.py`; use `--check` in review. -**Works: 1 · Partial: 45 · Broken: 59 · N/A: 11.** +**Works: 1 · Partial: 48 · Broken: 56 · N/A: 11.** - **Works** requires verified useful plugin behavior with its real backend. Read the reason for the verified scope and remaining limits; it does not imply worn-VR verification. - **Partial** means only a subset or a local fixture scope was verified, often just frontend/settings initialization. The remaining backend/device functionality is unverified; read the reason for the exact scope. @@ -27,7 +27,7 @@ Open the browser audit URL in local Chromium, run `runAudit()` and inspect/downl The current published digests are pinned in the JSON; if the store changed, retain/download those exact archives for reproduction. Audit downloads permit larger ZIPs for inspection; production installer limits remain 50 MiB ZIP / 150 MiB unpacked / 30 MiB per member. -After the VR job released the shared lock, this audit acquired it and used a private temporary Decky 3.3.0 ARM64 user service. Read-only ProtonDB `get_setting` and Steam Status `get_settings` calls succeeded through the live Steam CEF websocket. The service and private base were removed and the lock released; normal managed services stayed inactive, battery was 100 → 99, and no power setting was changed. [Redacted results](evidence/framey-official-backend-2026-10-25.json) record exactly what ran. A [2026-10-26 follow-up](evidence/framey-events-backend-2026-10-26.json) verified default Notebook drawing/save/reopen across a real backend restart and Simple Timer start/cancel, countdown/completion events, a visible toast and persisted recents/subtle mode. Only private test settings were written. Simple Timer remains partial because its own expired-timer startup raises a missing `timer_task` error; sound/suspend are unsupported. A [local audio follow-up](evidence/framey-audio-backends-2026-10-26.md) exercised Volume Mixer, Volume Boost and Mixer through real Decky 3.3.0 amd64 backends on private silent virtual audio targets. Sliders, numeric volume entry, independent server readbacks and Mixer filter persistence across a runtime restart passed. These three stay partial: real ARM64 Frame audio dependencies/session mapping remain unverified because the shared headset lock was occupied. Other official backends remain unexecuted. The separate VR job proves Frame Control/sample compositor rendering, not any official plugin. No worn-VR official-plugin result is claimed. A [local UI follow-up](evidence/framey-ui-fallbacks-2026-10-26.json) rendered Pause Games and Tailscale Control settings with all backend/network actions denied; it does not verify process pausing or Tailscale changes. A [read-only Steam bridge follow-up](evidence/framey-steam-reads-2026-10-26.json) verified actual Frame country, install folders and system information, plus IsThereAnyDeal's country dropdown in local Chromium. The installed-plugin status was fixture-shaped in that relay; plugin backends stayed denied and the deployed headset HTTP endpoint remains unverified. Earlier focused checks cover [ProtonDB](evidence/framey-browser-2026-10-25.md), [Steam Status/cache](evidence/framey-cache-browser-2026-10-25.md), [Storage Cleaner](evidence/framey-api-v1-browser-2026-10-25.md), and [legacy MusicControl](evidence/framey-legacy-2026-10-25.md). +After the VR job released the shared lock, this audit acquired it and used a private temporary Decky 3.3.0 ARM64 user service. Read-only ProtonDB `get_setting` and Steam Status `get_settings` calls succeeded through the live Steam CEF websocket. The service and private base were removed and the lock released; normal managed services stayed inactive, battery was 100 → 99, and no power setting was changed. [Redacted results](evidence/framey-official-backend-2026-10-25.json) record exactly what ran. A [2026-10-26 follow-up](evidence/framey-events-backend-2026-10-26.json) verified default Notebook drawing/save/reopen across a real backend restart and Simple Timer start/cancel, countdown/completion events, a visible toast and persisted recents/subtle mode. Only private test settings were written. Simple Timer remains partial because its own expired-timer startup raises a missing `timer_task` error; sound/suspend are unsupported. A [local audio follow-up](evidence/framey-audio-backends-2026-10-26.md) exercised Volume Mixer, Volume Boost and Mixer through real Decky 3.3.0 amd64 backends on private silent virtual audio targets. Sliders, numeric volume entry, independent server readbacks and Mixer filter persistence across a runtime restart passed. These three stay partial: real ARM64 Frame audio dependencies/session mapping remain unverified because the shared headset lock was occupied. A [library context follow-up](evidence/framey-library-context-2026-10-26.md) read 1,106 app overviews, 895 game IDs and the current public Steam ID from real Frame CEF under the shared lock. Local Chromium replayed this detached snapshot to render Deck Settings game selection, Steamback's empty save panel and PlayTime statistics/settings. Steamback and PlayTime used actual Decky 3.3.0 amd64 backends in an isolated container; their ARM64 backends and automatic game hooks remain unverified. Shotty's frontend now starts, but its published backend fails on missing `click`; it stays broken. Other official backends remain unexecuted. The separate VR job proves Frame Control/sample compositor rendering, not any official plugin. No worn-VR official-plugin result is claimed. A [local UI follow-up](evidence/framey-ui-fallbacks-2026-10-26.json) rendered Pause Games and Tailscale Control settings with all backend/network actions denied; it does not verify process pausing or Tailscale changes. A [read-only Steam bridge follow-up](evidence/framey-steam-reads-2026-10-26.json) verified actual Frame country, install folders and system information, plus IsThereAnyDeal's country dropdown in local Chromium. The installed-plugin status was fixture-shaped in that relay; plugin backends stayed denied and the deployed headset HTTP endpoint remains unverified. Earlier focused checks cover [ProtonDB](evidence/framey-browser-2026-10-25.md), [Steam Status/cache](evidence/framey-cache-browser-2026-10-25.md), [Storage Cleaner](evidence/framey-api-v1-browser-2026-10-25.md), and [legacy MusicControl](evidence/framey-legacy-2026-10-25.md). ## Every current plugin @@ -56,17 +56,17 @@ The API column shows manifest / actual bundled frontend API. Many manifests say | 32: AutoFlatpaks 1.6.8 | legacy / legacy | broken | This plugin needs root and is not supported by the Frame user service. | static archive, local browser, fake-Frame | | 35: MoonDeck 1.13.0 | 1 / 2 | broken | Plugin contains a non-ARM64 Linux binary: moondeck/python/externals/yarl/_quoting_c.cpython-313-x86_64-linux-gnu.so. Frontend initializes; native CPython wheels and executables in the published archive are x86_64. | static archive, local browser, fake-Frame | | 36: SteamGridDB 1.8.1 | 1 / 2 | broken | Frontend audit failed: DFL.createModuleMapping is not a function. | static archive, local browser, fake-Frame | -| 37: Discord Status 1.5.0 | 1 / 2 | broken | RunningApps and appStore are absent; Discord activity integration fails after initialization. | static archive, local browser, fake-Frame | +| 37: Discord Status 1.5.0 | 1 / 2 | broken | Detached app overviews are now available, but RunningApps/lifetime observations and Steam artwork helpers still lack a live mapping. Discord activity integration remains unavailable/unverified. | static archive, local browser, fake-Frame, real Frame SSH | | 38: Volume Mixer 1.2.1-1 | legacy / legacy | partial | Local Chromium discovers and changes a private silent stream through the actual Decky 3.3.0 Linux backend, with independent Pulse readback. Frame ARM64 libraries/audio session and Bluetooth playback controls remain unverified. | static archive, local browser, fake-Frame, isolated Linux backend | | 40: Controller Tools 2.0.2 | 1 / 2 | broken | Plugin contains a non-ARM64 Linux binary: ControllerTools/bin/backend. Frontend audit failed: Audit blocks WebSocket. | static archive, local browser, fake-Frame | | 43: Tailscale Control 0.1.3 | legacy / legacy | partial | Settings render locally after the SuspensefulImage fallback. Tailscale daemon/state, connection and exit-node changes unverified; bundled localhost QR asset remains unavailable. No network settings were changed. | static archive, local browser, fake-Frame | | 44: DeckMTP 1.0.5 | legacy / legacy | broken | Plugin contains a non-ARM64 Linux binary: DeckMTP/bin/umtprd. | static archive, local browser, fake-Frame | -| 46: Steamback 1.0.0-1 | legacy / legacy | broken | Frontend audit failed: Cannot read properties of undefined (reading 'm_CurrentUser'). Steam account/app context is unavailable. | static archive, local browser, fake-Frame | +| 46: Steamback 1.0.0-1 | legacy / legacy | partial | Panel opens using the real Frame current-user/library snapshot. Account setup and empty save-list reads pass through actual Decky 3.3.0 amd64 in isolation. ARM64 backend, supported-save discovery, automatic backups and restore remain unverified; no backup/restore ran. | static archive, local browser, fake-Frame, real Frame SSH | | 48: Quick Launch 1.2.1 | legacy / legacy | broken | This plugin needs root and is not supported by the Frame user service. | static archive, local browser, fake-Frame | | 49: Decky Cloud Save 1.4.2 | legacy / legacy | broken | Unsafe plugin archive member. | static archive, local browser, fake-Frame | | 50: Storage Cleaner 1.4.0 | 1 / 2 | partial | Empty-data panel rendered; cleanup was deliberately not run because it can remove local data. | static archive, local browser, fake-Frame | | 52: Game Theme Music 1.7.1-1 | 1 / 2 | broken | Frontend audit failed: Cannot read properties of null (reading 'type'). | static archive, local browser, fake-Frame | -| 53: Shotty 0.1.0 | legacy / legacy | broken | Frontend audit failed: Cannot read properties of undefined (reading 'allApps'). | static archive, local browser, fake-Frame | +| 53: Shotty 0.1.0 | legacy / legacy | broken | Library snapshot fixes the frontend allApps crash. Actual published Decky 3.3.0 amd64 backend fails importing click.get_app_dir (ModuleNotFoundError); the archive does not bundle click. Screenshot aggregation/rescue was not run. | static archive, local browser, fake-Frame, real Frame SSH | | 56: MangoPeel 0.0.7 | 1 / 2 | partial | Initializer succeeds; gamescope/MangoHud actions and backend are unverified. | static archive, local browser, fake-Frame | | 58: Volume Boost 0.0.7 | legacy / legacy | partial | Local Chromium sync/separate sliders, numeric volume entry and cache reopen pass through the actual Decky 3.3.0 backend on a private virtual stereo sink. Frame pactl/default sink, boost above 100% and physical audio remain unverified. | static archive, local browser, fake-Frame, isolated Linux backend | | 59: Web Browser 1.4.3 | legacy / legacy | broken | Frontend audit failed: deckyFrontendLib.getReactRoot is not a function. | static archive, local browser, fake-Frame | @@ -76,7 +76,7 @@ The API column shows manifest / actual bundled frontend API. Many manifests say | 63: Free Loader 1.6.0 | 1 / 2 | broken | Unsafe plugin archive member. | static archive, local browser, fake-Frame | | 64: Syncthing 0.2.7 | legacy / legacy | broken | Plugin contains a non-ARM64 Linux binary: decky-syncthing/bin/decky-syncthing-watchdog. | static archive, local browser, fake-Frame | | 65: Decky Terminal 0.5.3 | 1 / 2 | partial | Local routes initialize after parameter-route support; no shell commands were run. | static archive, local browser, fake-Frame | -| 66: PlayTime 3.2.5 | 1 / 2 | broken | Private SteamClient JSON cache now works; initialization still fails on missing Steam appStore.m_mapApps. Live app data and MobX game observations are unavailable; backend actions were denied. | static archive, local browser, fake-Frame | +| 66: PlayTime 3.2.5 | 1 / 2 | partial | Statistics and routed settings render with a detached real Frame library/user snapshot and actual Decky 3.3.0 amd64 backend in isolation. User selection and empty statistics reads pass. ARM64 backend, live MobX/running-game observations and automatic recording remain unverified/unsupported. | static archive, local browser, fake-Frame, real Frame SSH | | 67: Battery Tracker 0.2.0 | legacy / legacy | broken | This plugin needs root and is not supported by the Frame user service. | static archive, local browser, fake-Frame | | 68: Wine Cellar 0.2.1 | 1 / 2 | broken | Plugin contains a non-ARM64 Linux binary: decky-wine-cellar/bin/backend. Frontend audit failed: Audit blocks WebSocket. | static archive, local browser, fake-Frame | | 70: MicroSDeck 0.11.2 | legacy / 2 | broken | Plugin contains a non-ARM64 Linux binary: MicroSDeck/bin/backend. | static archive, local browser, fake-Frame | @@ -99,7 +99,7 @@ The API column shows manifest / actual bundled frontend API. Many manifests say | 90: Picture in Picture 1.0.0 | 1 / 2 | partial | Initializer succeeds; global picture-in-picture injection cannot escape the isolated panel. | static archive, local browser, fake-Frame | | 91: PlayCount 1.7 | 1 / 2 | partial | Initializer succeeds; Steam game-page play-count patch has no supported VR target. | static archive, local browser, fake-Frame | | 92: Crosshair 1.1.0 | 1 / 2 | partial | Initializer succeeds; global crosshair injection has no supported compositor target. | static archive, local browser, fake-Frame | -| 93: Deck Settings 1.2.6 | 1 / 2 | broken | Real Steam install folders are now available; game selection still fails on missing collectionStore.allGamesCollection. Steam library context, proxy fetch and backend actions remain unsupported/unverified. | static archive, local browser, fake-Frame | +| 93: Deck Settings 1.2.6 | 1 / 2 | partial | Game picker renders with detached real Frame library/install-folder reads; search modal opens in local Chromium. Snapshot refreshes on panel reopen. Remote reports/proxy fetch, settings changes and ARM64 backend remain unverified. | static archive, local browser, fake-Frame, real Frame SSH | | 94: Decky DoT DNS 0.0.2 | 1 / 2 | broken | This plugin needs root and is not supported by the Frame user service. | static archive, local browser, fake-Frame | | 95: Decky-SpoofDPI 0.12.0 | 1 / 2 | broken | Plugin contains a non-ARM64 Linux binary: decky-spoof-dpi/bin/spoofdpi. | static archive, local browser, fake-Frame | | 96: Simple Timer 1.0.0 | 1 / 2 | partial | Live start/cancel, countdown events, completion toast, persisted recents/subtle mode verified in Chromium with real ARM64 Decky. Upstream expired-timer restart raises missing timer_task. Audio/suspend unsupported; alerts require an open panel; worn VR unverified. | static archive, local browser, fake-Frame, real Frame SSH | diff --git a/scripts/framey-audit-browser.py b/scripts/framey-audit-browser.py index c4b4750..7c85504 100644 --- a/scripts/framey-audit-browser.py +++ b/scripts/framey-audit-browser.py @@ -36,7 +36,7 @@ Ready means initializer completion, not useful plugin behavior. No plugin backen