Conversation
The static server backing the production renderer served `*.html` for every request and ignored the `RSC` / `Next-Router-*` headers that Next.js 16 App Router sends on client-side navigation. Clicking a Navbar.Item triggered the router, which fetched `/<route>?_rsc=...`, got HTML back, failed to parse it as an RSC payload, and silently bailed — the URL never changed and the page never switched. Reproducible on Ubuntu and Bazzite AppImage builds, masked in `next dev` because the dev server handles RSC itself. `next build` with `output: "export"` writes the matching `<route>.txt` RSC payload alongside each `<route>.html`. Detect the RSC headers and serve those payloads with `Content-Type: text/x-component`, leaving the HTML fall-through for plain page loads / hard reloads. Adds a `Vary` header so any future caching layer keys correctly on the FLIGHT headers. Includes the previously uncommitted AppImage runtime hardening that already shipped in the 0.9.1 image: prefer the bundled python-build-standalone interpreter with `LD_LIBRARY_PATH` pinned to its own libpython, set `PYTHONDONTWRITEBYTECODE` on read-only mounts, keep a tail of stderr so a backend crash surfaces in the rejection message, and gate DevTools auto-open on `PROTONSHIFT_DEVTOOLS=1`. Co-authored-by: Cursor <cursoragent@cursor.com>
…t harness App + UI - Bump all version sources to 0.9.5 in lockstep: electron/package.json, electron/renderer/package.json, src/game_setup_hub/__init__.py, assets/io.github.protonshift.metainfo.xml, .github/ISSUE_TEMPLATE/bug_report.yml placeholder. - Wire navbar version readout to app.getVersion() via a new get-app-version IPC handler + electron.getVersion() preload bridge, so future bumps auto-propagate to the brand block (replaces the long-stale hardcoded "v0.1" string). Renderer features - ScopeBuddy: new /scopebuddy page, override editor (scb-kv-editor), per-game override component, detection toasts in gamescope-builder. - Command palette (Ctrl+K) with cross-page navigation events. - Gamepad tester component. - Game detail refactor: KPI strip + tabs + profiles menu split out into dedicated components; glow-card primitive retired. - Renderer-wide HeroUI v3 polish: shared info-hint affordance, surface-elevated/border-border tokens replacing ad-hoc opacity classes. Python backend - New scopebuddy module + /scopebuddy API routes (detection, KV override read/write). - gamescope, protontricks, presets, steam, tool_check, _vendor_compat hardening pulled from internal review. - API state/model split for testability; tests/test_scopebuddy.py + expanded test_gamescope.py. Repo structure - docs/python-review.md -> docs/internal/python-review.md. - scripts/linux-matrix.sh -> scripts/ci/linux-matrix.sh (CI workflow and ROOT-resolution updated to match). - New vm-test/ harness: run-vm.sh (Quickemu launcher), provision/*.sh per-distro, docs/* per-distro runbooks, smoke-checklist.md. run-vm.sh now stages vm-test/docs into the SMB share at /mnt/protonshift-build/_docs/ so guests can `less` the runbooks directly inside the VM. - Stop accidentally gitignoring vm-test/ and tests/ (the dropped-in lines at the end of .gitignore were hiding the entire new harness and the new scopebuddy tests from git). Co-authored-by: Cursor <cursoragent@cursor.com>
The @heroui-pro/react package ships a postinstall hook that fetches the real component dist from the HeroUI Pro registry. Without HEROUI_AUTH_TOKEN it stops at the skeleton package, so tsc + Next can't resolve the module and both CI typechecks and the release build fail on GitHub Actions. Wire the secret into the Install dependencies step in both ci.yml and build-release.yml. The repo secret is set separately via `gh secret set HEROUI_AUTH_TOKEN` (sourced from q-ring). Folded into v0.9.5 release. Co-authored-by: Cursor <cursoragent@cursor.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
v0.9.5 — ScopeBuddy integration, gamepad tester, Ctrl+K command palette, and a new Quickemu-based VM test harness with docs reachable from inside the guest via the SMB share. Plus a long-overdue navbar version that now reads
app.getVersion()so it auto-tracks every future bump.What ships
App + UI
electron/package.json,electron/renderer/package.json,src/game_setup_hub/__init__.py,assets/io.github.protonshift.metainfo.xml,bug_report.ymlplaceholder.app.getVersion()via newget-app-versionIPC handler +electron.getVersion()preload bridge. Replaces the hardcodedv0.1brand string that drifted four releases behind.Renderer features
/scopebuddypage, KV override editor, per-game override component, detection toasts in the Gamescope builder.glow-cardretired.info-hintaffordance,surface-elevated/border-bordertokens replacing ad-hoc opacity classes.Python backend
scopebuddymodule +/scopebuddyAPI routes (detection, KV override read/write).gamescope,protontricks,presets,steam,tool_check,_vendor_compatpulled from the internal review.tests/test_scopebuddy.py(was being accidentally gitignored — see below).Repo structure / docs
docs/python-review.md→docs/internal/python-review.md.scripts/linux-matrix.sh→scripts/ci/linux-matrix.sh(CI workflow andROOT="…/../.."updated to match).vm-test/harness:run-vm.sh(Quickemu launcher),provision/*.shper-distro,docs/*per-distro runbooks,smoke-checklist.md.run-vm.shnow stagesvm-test/docs/into the SMB share at/mnt/protonshift-build/_docs/so guests canlessrunbooks directly inside the VM..gitignorepreviously contained dropped-invm-test/andtests/lines that were hiding the entire VM harness and the new scopebuddy test from git. Removed.Test plan
ruff check src/— cleanpytest -q— 103 passedpnpm run build:electron(tsc) — cleanpnpm --filter protonshift-renderer exec tsc --noEmit— cleanv0.9.5already pushed;gh release create v0.9.5firesbuild-release.ymlwhich builds AppImage/.deb/.rpm/.flatpak and attaches them automatically. Verify artifacts on the published release.vm-test/smoke-checklist.md, confirm the navbar showsv0.9.5 · Linux gaming HUD.Made with Cursor