github Nonary/vibeshine 2.0.2-daily.d20261020.4
Nightly 2.0.2-daily.d20261020.4

pre-release2 hours ago

This is a nightly release of Vibeshine and contains several bug fixes and may contain new features. Check the commit log for more information.

Windows installer · Linux (Arch x86_64)

Nightly Windows installers are unsigned and include self-signed gamepad components. They may cause false-positive antivirus alerts.

Commit log

Source: 322d96789594

Since the preceding successfully published nightly 2.0.2-daily.d20261018.1: compare exact sources.

f6621d6ea575

fix(nvhttp): keep bitrate cleanup off accept loop

97835dbfb14f

fix(display): honor session virtual preparation precedence

Resolve client generic preparation above dedicated or generic application
settings. Let a higher-tier explicit virtual selection lift inherited
VerifyOnly only while preparing an intended or actual virtual target.
Keep physical fallback and explicit same/higher-tier VerifyOnly intact,
and carry the ephemeral policy through Windows snapshots and Linux apply.

Validation: 76 source-based RTSP/WebRTC and Windows/Linux preparation cases
pass (40 failed on unchanged source); 1,156 physical-output fallback cases,
virtual-refresh checks, and five request-policy tests pass. Reviewed with
four independent Luna High confirm/deny pairs per selected claim and
same-agent rebuttals. Windows build and live topology remain unverified.

Refs Nonary/Vibepollo#599
Codex-Model: gpt-6.1-sol
Codex-Reasoning-Effort: xhigh

d55d41459f16

fix(focus): wait for eligible game windows before timing out

Slow launches could spend the focus timeout before a game window existed.
Give managed focus bounded discovery and per-window allowances across Steam,
Lutris, and both Playnite game paths. Preserve confirmation limits, lifecycle
cancellation, and Lossless Scaling refocus behavior.
Adapted from Nonary/Vibepollo#573 (026775b930ceb481db984dbb3f2e1439ef2610b8).

Co-authored-by: Jonathan Malmaud <malmaud@gmail.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Generated with [Codex](https://openai.com/codex/)
Model: GPT 6.1-Sol X-High

e261a059974b

feat(display): report explicit client virtual-display disables

Keep physical streaming successful when an explicit client disable overrides
an otherwise virtual host or app mode. Return an optional recognized warning
code after admission, without changing display policy or authorization.
Ignore inheritance, existing-output joins and unrelated display failures.

Generated with [Codex](https://openai.com/codex/)
Model: GPT 6.1-Sol X-High

75d127ec0232

fix(display): capture warning intent with session display snapshots

Keep warning attribution tied to the app and client settings that prepared
the session. Store ephemeral intent during assembly and reuse it after
admission, so concurrent settings edits cannot fabricate or erase a warning.
Preserve all display, authorization and successful-stream behavior.

Generated with [Codex](https://openai.com/codex/)
Model: GPT 6.1-Sol X-High

10d2a13add01

fix(ui): explain disabled tray in the Linux machine service

The machine service overrides the saved tray preference, so both Web UIs
could show an enabled control that cannot take effect. Report the launch
policy and show an explained, disabled control without rewriting the saved
preference. Standalone desktop launches keep their existing behavior.

Partial correction for Nonary/Vibepollo#578; a service tray companion is
still absent and the issue remains open pending reporter confirmation.

Generated with [Codex](https://openai.com/codex/)
Model: GPT 6.1-Sol X-High

09ba40ef5185

fix(installer): Recover retained virtual display devices

Equal/newer stored packages could skip setup without a usable display device.
Repair missing/failed Sunshine nodes from a validated retained INF meeting the numeric floor; preserve healthy/disabled devices and defer unknown/reboot states.
Never force the bundled older package, delete packages or add trust. Windows ranks activation; lower-version postchecks report failure without rollback.
Reuse service/broker stop and nested restoration attempts. Standalone processes may need manual relaunch; PnP scanning is global.
The original installer freeze remains unresolved. Native Windows/service/device/streaming behavior and 36 PowerShell fixtures remain unverified.

Generated with [Codex](https://openai.com/codex/)
Model: GPT 6.1-Sol X-High

69e163f33179

fix(linux): build the portal probe without SUNSHINE_BUILD_DRM

The portal capture probe passes sources[source::KMS], but the KMS
enumerator only exists when SUNSHINE_BUILD_DRM is defined. Builds with
-DSUNSHINE_ENABLE_DRM=OFF and the portal enabled (for example the SteamOS
user bundle) fail with:

  misc.cpp:1683: error: 'KMS' is not a member of 'platf::source'

Pass false when KMS support is not compiled in, since KMS capture can
never be available then.

Port the unchanged guard from Nonary/Vibepollo PR #640.
UltraCode72 Luna/High source review passed; C++ and runtime unverified.

Generated with [Codex](https://openai.com/codex/)

Model: GPT 6.1-Sol X-High
Original-Commit: 271997c32eadf9c3aa6b3bf4570bee4af66cfeaf
PR-Origin: https://github.com/Nonary/Vibepollo/pull/640
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

5cc4562ce339

fix(linux): use AMD-compatible native buffer row pitches

Native RGB backing rows must satisfy AMD linear DMA-BUF import alignment.
Consume libvirtualdisplay 3f9c1c2a5eff85ca2a6218674523ccaadf917d01,
which pads backing pitch without changing logical display dimensions and
retains overflow checks and kernel-era PRIME callbacks. The exact dependency
contract suite passes; installed-driver and AMD runtime remain unverified.

Co-authored-by: Codex <noreply@openai.com>

582a769df4a5

test(linux): consume the production allocator test seam

Keep the AMD pitch fix tied to the implementation exercised by component tests.
Advance libvirtualdisplay to cd7f0eede104d8ed35b4ec0f1f581fbe261eeecd,
which shares the allocator with Kbuild and proves the historical pitch mismatch.
Installed-driver and AMD runtime qualification remain unverified.

Co-authored-by: Codex <noreply@openai.com>

e12c29d32d2f

test(linux): run native allocator checks in host CTest

Nested dependency builds do not include its standalone tests, leaving the
allocator regression outside the host suite. Register the production component
runner with the configured dependency source or the vendored standalone path.

Co-authored-by: Codex <noreply@openai.com>

931db73a6645

feat(pairing): prepare explicit offline recovery candidates

Duplicate pairing records can block startup, while guessing a survivor risks
reviving disabled access. Inspect copied state and require explicit choices
bound to both snapshot hashes before writing a private recovery candidate.
Preserve original bytes and authority; installation remains an administrator
action and normal startup validation stays strict. Windows runtime is unverified.

Co-authored-by: Codex <noreply@openai.com>

28568166cb05

fix(process): defer catalog refresh across teardown

Catalog refresh could wait on teardown gates or replace active preparation
storage and its undo environment. Retry contended admission without retaining
gates, then read the latest catalog and hand off its environment after teardown.
Direct component tests cover the lock cycle and active-state preservation.

Original-Commit: 56c5de32a3bf05833a50d3e0dba2861ebbc840d2
Co-authored-by: Codex <noreply@openai.com>

577ba9ed1e3c

fix(pairing): retain verified identity for live connections

Endpoint cache eviction could forget a live client and lose queued request
identity. Bind verified certificate identity to its transport connection,
resolve current enabled pairing records under the client lock, and revoke
cached authority when a client is disabled or unpaired. Direct component
coverage exercises real TLS keepalive, eviction, and queued requests.

Use the reviewed maintained Simple-Web-Server copy with its upstream history
and MIT notice preserved.

Co-authored-by: Codex <noreply@openai.com>

00ef429ff186

fix(stream): keep stopped packet queues alive through teardown

The mail registry uses weak references, so late workers could get new
running queues after stop released its only owner. Retain both stopped
queues through every worker join and reset retained objects for the next
broadcast. Idle bitrate and IDR controls use existing-only references.

Retain PR309's original commit and bitrate dispatch contribution. Shared
single-flight admission moves lifecycle waits to the blocking worker and
rejects competing mutations without queuing stale requests.

PR-Origin: https://github.com/Nonary/vibeshine/pull/309
Original-Commit: f6621d6ea575d3255e9cede42a8554fa5ad85bb5
Co-authored-by: strifeforlyfe <hbashton13@gmail.com>
Co-authored-by: Codex <noreply@openai.com>

c91bfa83780c

fix(audio): retain pre-display defaults through capture teardown

Display changes could remove monitor endpoints before defaults were captured.
Take a best-effort snapshot after effective configuration is installed and
retain its ownership through normal RTSP/WebRTC rollback and capture joins.

Keep optional acquisition failures from aborting preparation, including first
and repeated fallback attempts. Production component tests cover sequencing,
role choices and ownership failure paths.

Co-authored-by: Codex <noreply@openai.com>

d084267cca9b

fix(web): preview the configured Moonlight cover

Saved-app previews could show UUID-named or web-only alternate artwork that
Moonlight could not read from the configured path. Resolve the parsed app
by UUID and use its PNG validator and bounded reader for the preview.

Explain unavailable configured covers, possible default artwork, and PNG
conversion and size requirements without changing saves or asset caching.

Co-authored-by: Codex <noreply@openai.com>

62ce2ec44d88

fix(logs): bound support export reads across log sources

Growing or oversized logs could make support export read beyond its
64 MiB allowance. Share that input budget across sources and read each
opened file only to its initial end, preserving sanitized complete tails.
Include truncation or omission notices for selected logs outside the
remaining budget; leave source files and retention policies untouched.

Co-authored-by: Codex <noreply@openai.com>

def48bbddbc0

fix(linux): explain PyroWave modifier import rejections

Generic modifier errors hid which capture layout and initialized GPU
could not interoperate. Add bounded device, format, modifier and plane
details to existing prevalidation failures, separating the configured
node path from the selected GPU's DRM render identity.
Keep import acceptance, feature-bit treatment and fallback unchanged.

Co-authored-by: Codex <noreply@openai.com>

422d48f20e15

fix(nvenc): distinguish completion wait failures from timeouts

The boolean wait result labeled every unsuccessful encode wait a timeout.
Preserve the raw wait status and capture the Win32 error on WAIT_FAILED
before diagnostics, so logs distinguish failure, timeout and other results.
Keep the 100 ms timeout and existing encode recovery behavior unchanged.

Co-authored-by: Codex <noreply@openai.com>

2ccd1ce50d7b

docs(display): clarify manual settings and session precedence

Manual display help implied a host value always won. Explain fresh-session
client, application and global precedence, plus settings retained by shared
sessions. Describe client display-mode and scaling priority and per-value
remapping exceptions consistently across the app and global editors.
Verify all three English UI bindings without changing host settings.

Co-authored-by: Codex <noreply@openai.com>

dee595d06302

fix(web): align cover revisions with the runtime catalog

Saved app paths could be stamped while cover requests used an older
runtime catalog, leaving stale artwork under a new URL. Version the parsed
path and file stamp, reject mismatched requested revisions and avoid new
preview caches. Keep deferred publication and Moonlight fallback, and
accept opaque versions in both web app models.

Co-authored-by: Codex <noreply@openai.com>

ff06efcc7266

fix(logs): validate duplicate paths before skipping their reads

A ZIP name collected from a different source could make a missing
Playnite path look present and suppress fallback discovery. Check the
requested regular-file path and open it before duplicate-name success,
while skipping the duplicate body read and preserving budgets and counters.

Co-authored-by: Codex <noreply@openai.com>

8695843fa8a5

fix(web): diagnose HTTPS listener errors without request data

Connection failures before an HTTP response lacked useful configuration
listener diagnostics. Add fixed, rate-limited warnings for TLS, protocol
and request-handler errors while preserving responses and access policy.
Keep normal disconnects quiet and prevent logging failures from escaping.
This adds observability; the reported LAN incident cause is unproven.

Co-authored-by: Codex <noreply@openai.com>

3353ee33b34c

fix(input): diagnose unnegotiated waveform feedback

PCM feedback could reach the sender without session negotiation and be
discarded without explaining why. Warn once per session at that discard
while preserving negotiated packets and other gamepad feedback paths.
The reported macOS ordinary-rumble cause remains unproven.

Co-authored-by: Codex <noreply@openai.com>

f8e122bf5201

test: replace source-text guards with behavior checks

Source-text checks could pass despite runtime regressions. Execute production
recovery, pairing, display and controller decisions with fixed outcomes,
and mount or drive actual frontend components instead of scanning Vue.
Extract the unchanged session classifier for deterministic behavior tests.
Retain deployment contracts and explicitly weak native integration guards.

Co-authored-by: Codex <noreply@openai.com>

6a198eddf143

fix(installer): Validate display INF identities across locales

Turkish and Azerbaijani casing can reject the bundled ClassGUID key
before package validation. Match Windows package identifiers with
invariant case folding while retaining every identity and trust gate.

Addresses Nonary/Vibepollo#639.

Co-authored-by: Codex <noreply@openai.com>

e4b47b1ae621

fix(web): Keep device save actions visible in long editors

The existing submit controls sit below long device settings forms.
Keep Save and Cancel visible while editing and cover both desktop and
phone layouts without changing explicit save or payload behavior.

Addresses Nonary/Vibepollo#651; native persistence still needs validation.

Co-authored-by: Codex <noreply@openai.com>

2cb38123db6c

fix(build): Include Winsock before NVENC Windows headers

The Windows nightly fails when NVENC or logging imports Windows.h
before winsock2.h. Load the D3D11 platform header first so its Winsock
include precedes those transitive Windows headers.

Co-authored-by: Codex <noreply@openai.com>

2c90b7ef9a08

fix(tests): Run release checks with their actual dependencies

Nightly checks used an unset Python interpreter and assumed Boost was
installed system-wide. Pass configured dependencies, execute the staged
upgrade guard in removal fixtures, and drop an unused Playnite default.

Co-authored-by: Codex <noreply@openai.com>

b7b25aa9f321

fix(linux): Map machine-host touch through the session broker

The isolated machine host intentionally lacks WAYLAND_DISPLAY, so the
local session guard skipped automatic touch mapping before the existing
broker path. Admit that path while preserving standalone session guards.

Addresses Nonary/Vibepollo#515; compositor validation remains pending.

Co-authored-by: Codex <noreply@openai.com>

b26d93343741

fix(display): Restore the physical desktop while games stay paused

A retained normal-game display blocked configured disconnect restoration.
Allow physical REVERT after capture owners drain while retaining the
reservation for Resume and protecting Remote Monitor and removal guards.

Dispatch is covered locally; physical Windows restore remains unverified.

Co-authored-by: Codex <noreply@openai.com>

99f96b390968

fix(lutris): Launch synced games through the fixed session operation

Auto-synced Lutris entries used generic shell authorization and failed
with an empty command manifest. Generate and recognize the reserved
numeric-ID operation, preserving HDR launch behavior and custom approval.

Addresses Nonary/Vibeshine#322. Re-sync managed entries after upgrading.

Co-authored-by: Codex <noreply@openai.com>

dd8a64d93a17

fix(audio): Diagnose muted capture sinks without changing volume

Silent monitor capture offered no explanation when the selected sink
was muted or at zero volume. Warn from a read-only startup snapshot,
using a shared best-effort query deadline so diagnostics yield to capture.

Addresses Nonary/Vibeshine#323. User mute and volume remain unchanged.

Co-authored-by: Codex <noreply@openai.com>

7edf25f4c161

fix(tests): Resolve modular Boost headers for display checks

Fetched Boost keeps algorithm headers outside Boost::headers, leaving
nightly display precedence checks unable to compile. Pass the algorithm
target's transitive include paths while preserving every regression case.

Co-authored-by: Codex <noreply@openai.com>

ede772556d4e

fix(tests): Pass Boost headers to wake recovery backend checks

The nightly's nested backend removal checks compiled without the modular
Boost include paths already supplied to their fixture. Forward those paths
to both backend compiles so the full recovery regression runs in packaging.

Co-authored-by: Codex <noreply@openai.com>

9dbf5607a97f

fix(state): Flush Windows files before atomic replacement

Require full writes and a checked OS-buffer flush on the temporary
handle before replacing state/config files. Keep prior targets when
write, flush or close fails; existing corrupt snapshots still need recovery.

Related: Nonary/Vibepollo#643

Co-authored-by: Codex <noreply@openai.com>

322d96789594

fix(tests): Link Windows socket extensions in network checks

The live HTTPS listener test calls AcceptEx and GetAcceptExSockaddrs,
which MinGW resolves from mswsock rather than ws2_32. Include that import
library in the shared Windows socket dependencies so network checks link.

Co-authored-by: Codex <noreply@openai.com>

Don't miss a new vibeshine release

NewReleases is sending notifications on new releases.