mirror of
https://github.com/Droid-Deck/DroidDeck.git
synced 2026-11-11 02:51:10 +00:00
7.8 KiB
7.8 KiB
SteamDeck — Progress Log
Running engineering log for the SteamDeck app (com.steamdeck.launcher). Newest state first, then
the timeline, then lessons and backlog. Companion to the README (what the app does) and to
docs/releases/ (what each version said) — this is how it got here and where it stands.
Current state (2026-09-22)
- Latest release: 0.1.4 — private: https://github.com/The412Banner/SteamDeck/releases/tag/0.1.4
· public: https://github.com/The412Banner/winlator-contents/releases/tag/SteamDeck-0.1.4
main@8e58e8e, CI run 35682844106, versionCode 5, APK sha2564b53ce6a…(20,957,823 B). - Runtime:
linuxfs-r9on winlator-contents (790 MB), the only runtime release left; desktop packages fromsteamdeck-desktop-r1. The app rewrites its own scripts (bannerlator-*), the driver,bannerlator-netmanagerand the DirectAudio pieces into the installed runtime at every launch, so a fix in those reaches an installed runtime without a re-download. - Shipped feature set: the native ARM64 Steam client under gamescope on the in-app Wayland compositor; a LXQt-on-labwc desktop with Firefox and a shelf of emulators; Proton tools (GE / CachyOS) as downloads; graphics drivers importable per mode; DirectAudio + microphone; client/game core masks + four session switches; NetworkManager stand-in (Max's); overlay restored; ROMs folder + Storage bound into the session's home; Bannerlator's File Manager; a cog per launch mode (resolution, shape, HDR10, drivers, touch, OSC/audio, renderer); per-session log folders that survive a crash; leftover-process sweep; frame generation (Win-FG, LSFG).
- Verification level: every release is CI-green and staged to the maintainer's device. Proven on hardware (Pocket FIT / Fold): sign-in, store, install + launch (FlatOut 144 Hz), frame generation, controllers + OSC, sound, desktop + Firefox, folding mid-session, driver import, the log folder, the ANR fix, the network page. Not yet proven: everything 0.1.4 added (ROMs folder inside an emulator, File Manager, resolution cap, HDR10, crash sweep, orphan sweep, the drawer's Steam menu), DirectAudio voice, the core masks' effect, offline start, the soft keyboard, any emulator with a game, Adreno 710.
- Open field reports (Thor Pro, 8 Gen 2): trackpad-mode tap does not click (code sends the
click; cause not found by reading); crash after 1–2 min in Ballionaire / Geometry Wars (no log
survived — 0.1.4's sweep will leave
crash.log); a Fold's 10–20 fps client menus (Chromium → ANGLE → Zink on an experimental A8xx Turnip); Fold crash loop (xalia ENOSYS storm — switches shipped, untested); FlatOut shrinking after Resume (gamescope forcing the swapchain extent).
Release pipeline (how every version is cut)
- Work on
main, pushed →Build APKrunsassembleRelease(AOSP test key, v1+v2+v3 re-signed by CI with zipalign + apksigner) → artifactsteamdeck-apk. Dev builds keep the last release's versionCode/versionName; a release bumps both inapp/build.gradlein its own commit. - Verify:
gh run view <id> --json conclusion(never trust a run listing's first row — aworkflow_dispatchrun gets cancelled by concurrency in favour of the push-triggered one), download the artifact, sha256 it. - Stage:
cpto/sdcard/Download/SteamDeck-rN.apk(dev) orSteamDeck-X.Y.Z.apk(release). Neverpm install— the maintainer installs. - Private release
X.Y.Ztargeting the full 40-char sha (a short sha is refused), notes from the draft in the session scratchpad,--latest. Public releaseSteamDeck-X.Y.Zon winlator-contents with the README-style notes; one public release per version. - README ledger, this log, memory.
Timeline
- 2026-09-19 — 0.1 groundwork. Lifted out of Bannerlator's gamescope runtime on the user's
ask: one screen, one button. r2 reached Big Picture sign-in on the Pocket FIT. Package renamed to
com.steamdeck.launcher(r4), foreground service, test key, on-screen controls. - 2026-09-20 — 0.1. The Linux Steam client and a desktop; runtime r6→r9 in a day (Proton self-selection, proot shipped, refresh rate, video, first run reaches a game). Public explainer page for non-Linux users.
- 2026-09-21 — 0.1.1. Catch-up with Bannerlator: driver selection (two lists, per mode), overlay restored + GameHub force-stop, DirectAudio + microphone, core masks, four session switches as toggles, per-session log folders with credentials scrubbed, Adreno 710 path via Banners-Turnip r3.
- 2026-09-22 — 0.1.2. The teardown ANR (log collection on the main thread) fixed; two compositor log lines (frame-size change, window rename); README ledger.
- 2026-09-22 — 0.1.3. Max's NetworkManager stand-in ported (the client's network page); shim audit vs WinNative = zero functional drift.
- 2026-09-22 — 0.1.4. ROMs folder + Storage in the session's home; Bannerlator's File Manager
ported whole; a cog per mode (railed settings window) with resolution cap, shape, HDR10 gated on
the panel, drivers, touch, OSC/audio/renderer; two-column main menu; crash-safe log folders +
Session logs toggle; OrphanReaper; drawer Steam menu. Public releases reorganised: one per
version, old
Steamdeckrelease and runtimes r1–r8 deleted.
Architecture (where things live)
MainActivity/ui/MainScreen.kt— the main screen;ui/ModeSettingsDialog.ktthe cogs;ui/*Dialog.ktthe rest.SessionActivity— the Surface, input (touch, touchpad, pads, keyboard), the drawer, the HDR decision, the compositor start (wayland/CompositorHost,wayland/WaylandCompositor).session/SessionService— proot + gamescope/labwc + PulseAudio + DirectAudio relay + network link; binds (/root/Storage,/root/ROMs); env for the guest; teardown;OrphanReaper;SessionArtifacts+CrashHandler+SessionPathsfor the log folders;SessionPrefs.files/— Bannerlator's File Manager (FileManagerScreen.ktand its helpers), the picker activity andInAppFilePickerintent API.gpu/— Turnip (bionic, for the compositor) and Linux Turnip (glibc, for the runtime) managers.tools/linuxfs/overlay/usr/local/bin/bannerlator-*— the guest scripts, staged into the runtime bySessionFilesat every launch (CI packages onlybannerlator-*names).app/src/main/cpp/waylandcomp/— the compositor (shared lineage with Bannerlator).
Lessons learned (don't repeat these)
- Nothing in teardown may do bulk filesystem work on the main thread (0.1.1's ANR).
- A CI closure check on a multi-line variable must flatten it first (
libaaudio.sorefusal). - A runtime script must be named
bannerlator-*or CI never packages it. gh release create --targetneeds the full sha.- A proot bind is invisible to a program's "Computer" list; put what users need under home.
- The compositor decides its driver and its HDR gate once per app process — anything that changes them applies after the app is fully closed, and the UI must say so.
- Bannerlator's File Manager ports mechanically (
port_fm.pyanchors) once the container hooks are cut; do not hand-edit 2,500 lines. - Deleting a release asset on GitHub can drop a sibling asset — re-list and restore.
Backlog / next
- Device-prove 0.1.4 on the FIT (list above).
- Thor Pro: trackpad tap; the 1–2 min in-game crash once a
crash.logarrives. - Xfce as a second desktop shell (Max's branch runs XFCE 4.20 on labwc) — a catalog package + a shell choice in the Desktop cog; comfort, not performance.
- Quick Access Menu for non-Deck pads — no confirmed chord; needs research, not a guess.
- FlatOut shrink: try
vk_wsi_force_swapchain_to_current_extent=falseviasteamdeck-env. - Max's stricter
winnative-directaudioguards;winnative-epic-launch(a feature). - Rename before anything truly public: "SteamDeck" is Valve's mark.