Skip to content

v1.4.0

Latest

Choose a tag to compare

@github-actions github-actions released this 02 Sep 01:13
· 2 commits to master since this release
7eb74cb

Polaris v1.4.0

  • Detached Steam launches no longer start a fresh Steam client during teardown. Polaris forwards shutdown directly through Steam's no-bootstrap remote client, so a live desktop or stale private singleton still receives the request while a vanished listener cannot trigger a replacement; incomplete generation or singleton cleanup retains retry authority.
  • Distro-package Gamescope sessions now return to an empty compositor baseline when the Nix-only idle and private-portal services are absent. Failed prior-session recovery remains fenced instead of deleting ownership state and launching a replacement generation.
  • Linux Host Virtual Display now stays bound to the exact output and private compositor generation created for that launch. The bundled legacy Desktop entry is migrated to an explicit mirror semantic, so paired virtual-display preferences cannot turn Desktop mirroring into a private output. If exact ownership, capture provenance, or teardown cannot be verified, Polaris fails closed and retains recovery state; KScreen restores and reads back the exact pre-launch topology.
  • Heroic library import now launches native and Flatpak GOG/Epic titles with Heroic's current gog/legendary runner protocol. Polaris rebuilds the command from validated scanner metadata and narrowly upgrades exact commands generated by older Polaris versions while preserving each app's UUID, artwork, profiles, and unrelated settings.

Polaris v1.4.0 is the matched host release for Nova v1.4.0. Doctor explains measured stream problems in player-facing language and offers a fix only when deterministic evidence supports a reversible same-stream change. Frame-pacing diagnosis remains observational, launch resolution is deterministic, and neither session history nor AI output can silently change a launch. Polaris does not inject MangoHud, DXVK, or VKD3D frame limiting into the game process.

Existing v1.3.13 configuration remains valid. The legacy apply_recovery_profile_next_launch action is disabled. Old queued recovery records are deprecated and non-applicable; they remain visible only so their paired owner can cancel them. Steam Input profile mutation remains unavailable, and Doctor reports read-only evidence and manual guidance.

Fedora 44

wget --output-document=./Polaris-fedora44-x86_64.rpm https://github.com/papi-ux/polaris/releases/download/v1.4.0/Polaris-fedora44-x86_64.rpm &&
sudo dnf install "./Polaris-fedora44-x86_64.rpm" &&
sudo -H polaris --setup-host &&
systemctl --user restart polaris

Arch Linux / CachyOS

wget --output-document=./Polaris-arch-x86_64.pkg.tar.zst https://github.com/papi-ux/polaris/releases/download/v1.4.0/Polaris-arch-x86_64.pkg.tar.zst &&
sudo pacman -U ./Polaris-arch-x86_64.pkg.tar.zst &&
sudo -H polaris --setup-host &&
systemctl --user restart polaris

Ubuntu 24.04

wget --output-document=./Polaris-ubuntu24.04-x86_64.deb https://github.com/papi-ux/polaris/releases/download/v1.4.0/Polaris-ubuntu24.04-x86_64.deb &&
sudo apt install ./Polaris-ubuntu24.04-x86_64.deb &&
sudo -H polaris --setup-host &&
systemctl --user restart polaris

SteamOS 3.8

Open a terminal in Desktop Mode and run this exact version-pinned command. It initializes the package keyring when needed and restores the read-only root before starting Polaris.

wget --output-document=./Polaris-steamos3.8-x86_64.pkg.tar.zst https://github.com/papi-ux/polaris/releases/download/v1.4.0/Polaris-steamos3.8-x86_64.pkg.tar.zst &&
(
set -e
trap 'sudo steamos-readonly enable' EXIT
sudo steamos-readonly disable || exit $?
sudo pacman-key --init || exit $?
sudo pacman-key --populate || exit $?
sudo pacman -Sy || exit $?
sudo pacman -U ./Polaris-steamos3.8-x86_64.pkg.tar.zst || exit $?
sudo -H polaris --setup-host || exit $?
sudo steamos-readonly enable || exit $?
trap - EXIT
) &&
systemctl --user enable --now polaris

Bazzite users should follow the exact-output rpm-ostree flow in the Bazzite guide. SteamOS 3.8 users should follow the SteamOS guide, including its keyring bootstrap and read-only-root restoration. SteamOS remains experimental Desktop Mode support rather than certified Game Mode support.

Changes

Frame pacing and Doctor actions

  • Shows Watch/frame-pacing evidence under the compatibility reason code frame_pacing, without a contradictory Stable state. Clean confirmed media-loss and RTT evidence cannot become network or bitrate blame, and static or duplicate-only content is not by itself a pacing fault.
  • Accepts HUD-independent cumulative media frame counters only from the authenticated active owner and exact stream generation. Polaris derives confirmed loss from current counter deltas, retains host-observed RTT as separate evidence, and resets the baseline after a telemetry gap instead of making accumulated old loss look current.
  • Pacing offers Recheck or manual guidance; it cannot queue a launch mutation. Legacy recovery apply/verify requests return unsupported_deprecated, while cancellation remains available for an existing queued record.
  • Keeps Auto Fix only for evidence-supported same-stream bitrate reduction or restoration when exactly one stream owns the live controller. Linux FFmpeg/NVENC changes are acknowledged only after the reconfigured path successfully encodes another frame. Polaris requires host-received observations across the full verification window, conditionally owns the controller revision so a newer user/client choice wins, and automatically restores the prior target when coverage or verification fails.
  • Treats Auto Safe as the deterministic live controller when it is enabled: Doctor explains the measured network problem and offers a read-only Recheck while Auto Safe is already correcting or recovering bitrate. Doctor never races Auto Safe with a second competing mutation; turning Auto Safe off leaves the existing reversible Auto Fix path available.
  • Holds an exact rollback target steady until the encoder acknowledges it, then resumes the pre-action adaptive policy. A verified action includes terminal explanatory copy so Nova cannot display Verified beside an old in-progress measurement sentence.
  • PipeWire DMA-BUF negotiation also requires a matching encoder importer in the running build. CUDA-disabled NVIDIA packages use SHM/CPU frames rather than accepting an unusable GPU-only first frame.
  • Binds every live Doctor request, response, receipt, and paired bitrate/adaptive control to the exact app-session token and stream generation. Idempotency results remain available for that full generation, and a newer reconnect, explicit bitrate choice, or adaptive-policy change cannot inherit or replay an older Doctor mutation.
  • Returns the same typed success, conflict, and rollback-unconfirmed Doctor contract to Nova and the Polaris web UI, so a failed safety check cannot be displayed as a successful fix.
  • Separates Doctor v2 raw stage evidence, observations, hypotheses, missing measurements, and capability labels behind disabled-by-default shadow flags. Trial records expire after 24 hours and every trial is one-shot; shadow actions are never exposed.

Deterministic launch presets

  • Resolves auto, quality, high_fps, and stability in a fixed order: app/display semantics, explicit launch locks, paired-client settings, the selected versioned preset, then capability validation.
  • Returns resolved_profile.fields provenance for every launch value, including its source, reason code, lock state, and normalization state. Display width, height, and FPS have separate provenance so high_fps can truthfully preserve paired dimensions while locking only cadence.
  • Uses the persisted host bitrate maximum during resolution; a running session's live target cannot become the next launch's capability ceiling. The trusted launch envelope also carries an exact resolved HDR value so /optimize and final launch use the same precedence.
  • Advertises resolved_profile_provenance_v1 plus expected_topology_assertion_v1 so Nova v1.4.0 can reject an older Polaris launch resolver that would ignore the exact topology assertion instead of failing open to legacy history, AI policy, or a changed host default.
  • Keeps topology outside Doctor, history, AI, and preset fields. Only explicit app/client display semantics can select it.
  • Binds each resolved profile to the canonical app UUID or ID plus the exact topology request, including a distinct host-default state and the final mirror/private Steam choice. /resume repeats the same app, topology, output-refresh, bitrate, and HDR validation as a fresh launch before admitting the stream.
  • Preserves user-authored game configuration but does not synthesize MangoHud, DXVK_FRAME_RATE, or VKD3D_FRAME_RATE for a Proton/game process.

Explanation-only AI

  • AI or Codex CLI may translate a structured evidence bundle into explanatory text, but its typed output cannot define actions, settings, confidence overrides, or launch policy.
  • Subscription deterministic-fallback remains informational and quiet; deterministic code exclusively owns launch fields and Doctor actions.

Scope and safety

  • Keeps the bundled and narrowly matched legacy Desktop app on the desktop-mirror path even when paired-device or optimizer settings prefer a virtual display; user-created apps named Desktop are not rewritten.
  • Keeps wlroots socket, adapter, capture-policy, and reinitialization decisions bound to the immutable launch generation, and refuses to enumerate the host compositor when a private compositor generation is unavailable.
  • Removes durable virtual-display recovery state only after backend teardown is verified. Failed Hyprland, EVDI, or KScreen teardown remains retryable, while KScreen snapshots, restores, and reads back the exact managed-output and primary-output state.
  • Steam Input remains manual and read-only. Apply, Undo, restart, and Resume Stream do not alter Steam VDF bytes, mode, or ownership.
  • Non-cage detached Steam cleanup replaces the legacy steam -shutdown undo with Steam's direct no-bootstrap forwarder. Singleton handoff is still shut down, a listener-exit race cannot boot a replacement client, and incomplete generation, delivery, or FIFO release remains retryable.
  • Nested Gamescope launches Steam beneath a session-owned primary-child keeper. Teardown pauses and revalidates the exact compositor before exact-session Steam exits, waits for the runnable keeper to publish the matching terminal marker, and then commits the complete private-group fence without resuming Gamescope. This avoids both the affected 3.16 X11 I/O abort and Vulkan destructor paths. Separately grouped and leaderless private-session members are drained by exact PID while the keeper retains cleanup authority, and its parent-death signal prevents a compositor crash from orphaning the Steam workload.
  • Existing v1.3.13 settings remain compatible, while historical safe FPS limits are non-applicable to new launches.
  • Uses player-first Settings navigation and launch-mode descriptions: display, privacy, and performance impact lead each choice, while backend details remain available separately. Headless Dongle remains host-wide and planned modes remain visibly non-selectable.
  • Serializes the paused-session timeout with fresh launch and resume admission. A successfully queued reconnect cancels the timeout before admission is released, while an expired timeout rechecks the same lifecycle transaction before teardown, so it cannot terminate a game that Nova just resumed or start media after the app was stopped.
  • Heroic imports expose and persist the exact app, store, runner, and installation identity; the authenticated import route ignores a browser-supplied command, rejects mismatched metadata, and recognizes both current and exact legacy Polaris command forms for deduplication.
  • Built-in utility entries such as Virtual Display use their shipped host artwork and do not automatically search game providers. A stale automatic match from an older build is removed once the bundled poster is available, while a manual Artwork Studio selection remains untouched.
  • Heroic physical acceptance remains a release gate: one affected native or Flatpak GOG/Epic title must be scanned, imported, launched, streamed, and torn down on the approved host/account without duplicate apps or orphaned launcher processes.
  • Release validation remains gated on exact-SHA CI, independent review, signed package checks, and physical host plus Retroid Pocket 6 acceptance with Nova v1.4.0.
  • CodeQL analysis remains unavailable when GitHub code scanning is disabled. A successful explicit skip path is not an analysis result.

Official assets

  • Polaris-arch-x86_64.pkg.tar.zst
  • Polaris-fedora44-x86_64.rpm
  • Polaris-steamos3.8-x86_64.pkg.tar.zst
  • Polaris-ubuntu24.04-x86_64.deb