Repository navigation
Vibepollo 2.17.3 (Nightly)
Pre-release
Pre-release
This is a nightly release of Vibepollo 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: bce817d4e334
Since the preceding successfully published nightly 2.14.11: compare exact sources.
fix(linux): Support SDDM Wayland greeter streaming
SDDM greeters were rejected by Plasma Login Manager-only detection and
readiness checks. Bind supported SDDM KWin peers to their session and
preserve valid streams across transient probes while revoking replacements.
Add SDDM regression coverage and document opt-in greeter configuration.
Fixes #741
Co-authored-by: Codex <noreply@openai.com>
fix(input): Recover first VHF controller after device removal
An idle keyboard/mouse device loss could strand recovery before the
controller worker started, leaving gamepads unavailable until restart.
Retire stale idle connections and retry first-controller creation once,
preserving active controllers and safe keyboard/mouse teardown.
Add production-path regression coverage to CTest and PR validation.
Fixes #736
Co-authored-by: Codex <noreply@openai.com>
i18n(locale): translate frame-gen / virtual-display / Reflex slice for all languages
Backfill the 376-key frame-generation, virtual-display, Reflex/limiter,
and display-device string slice (including the newly extracted
apps.framegen.* keys) into every offered locale that was missing them.
- 19 non-English locales translated to native phrasing, preserving every
{placeholder} and keeping product/technical terms verbatim (Vibeshine,
NVIDIA, Reflex, Smooth Motion, RTSS, DLSS, FSR, LSFG, HDR, WGC, Hz, FPS,
ms, etc.). Verified: 0 placeholder mismatches, 0 dropped brand terms.
- en_GB and en_US filled from en for the same slice so the files are
self-complete.
Existing translations were left untouched; only missing keys were added.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
(cherry picked from commit 31e34dadfd494d84c295d3b9f65bdd886bc8601d)
feat(l10n): gate frontend translations with static audit
Add a strict frontend localization audit so new missing keys, hard-coded UI text, fallback literals, and stale locale JSON drift are caught before the web bundle builds.
Backfill the current missing locale entries in 50-string translation batches and baseline the remaining known debt so CI fails only on new regressions.
Include focused Vitest coverage for the auditor and wire the audit into bundle CI from the web package directory.
Generated with [Codex](https://openai.com/codex/)
Model: GPT 5.5 High
(cherry picked from commit aaa0f3e30ef7bda268fec21e77b11294e2029a1e)
Complete v2 settings and prioritize Linux virtual screens
(cherry picked from commit 017cc6048bb6089111a8dfd6aaca1e65884917bc)
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>
(cherry picked from commit f8e122bf520151a969b688140482c10429949f04)
fix(shutdown): report stalled cleanup phase
The shutdown watchdog can fire while a main-thread cleanup operation is still blocked, leaving the timeout diagnostic without a useful checkpoint.
Record selected waits and cleanup steps in a lock-free phase tracker and append the latest phase to the existing watchdog log. This remains best-effort and does not identify a blocked thread or establish the incident root cause.
Reapplied from private candidate 763d0d5c0c8abb0a51e1abafa2d96f50af2028b9.
Co-authored-by: Codex <noreply@openai.com>
(cherry picked from commit 51d8544bdf9bdab37ebe40b65002493da92b142e)
Add redacted launch and resume traces
Add bounded route-stage and timing diagnostics for launch and resume, and carry request-detail redaction through direct and deferred display request construction.
Reconciles diagnostic intent from unpublished seed 6292eeab30ad90e2b17a08129893cdee1a3f1d53, originally onto published Vibeshine master 5a77c3ed895b9f5c5fc7f1e0c9055d2c2065ae57, then refreshes the same patch onto current published master d499f4b3ba50afca3c39d9de8f8e4a14cf9a0f4b. This is not an exact cherry-pick of the seed.
Co-authored-by: Codex <noreply@openai.com>
(cherry picked from commit bfeeb1e823e985bde7aeb669818a41151d0781fa)
feat(display): add opt-in IddCx frame-push capture
Add a D3D11 four-slot consumer and owner-authenticated target lookup to the Windows capture selector. Require explicit build opt-in and a validated first frame before activation, while retaining WGC fallback for unsupported or unavailable targets.
Refs: #626
Co-authored-by: Codex <noreply@openai.com>
(cherry picked from commit 34d294432c765a07b8f190f251b067585704a73f)
fix(installer): Identify local builds and accept native companions
Distinguish local builds from clean release tags with a commit-based version suffix while retaining existing artifact versions when skipping builds. Include the native tray and package preflight artifacts in installation validation.
Co-authored-by: Codex <noreply@openai.com>
(cherry picked from commit e7cddc5e0b520063a879c7356699f8ac01d09789)
fix(installer): Prevent display inventory timeouts
Exclude inbox drivers from the bounded inventory to avoid exhausting its 15-second deadline during setup.
Attribute warnings to the driver action that produced them and preserve wrapped 64-bit error details so SudoVDA failures no longer blame the selected display driver.
Generated with [Codex](https://openai.com/codex/)
Model: GPT 6.1-Sol High
(cherry picked from commit 6b4e1a3f182ab94f7a222fee4824007789bc8155)
ci(nightly): dispatch Canary workflow from master (#380)
* ci(nightly): align master display release lock handling
* ci(nightly): dispatch Canary workflow from master
* fix(windows): include Winsock before SDK headers
(cherry picked from commit 0b969b2867bf66de61c835cd8f667f8fc65b7e95)
test(macos): Keep FFmpeg dependency checks offline
Seed the content-addressed cache with a synthetic archive and a matching test-only pin so framework checks do not require a Darwin download. Verify that a tampered cache still fails the production checksum check.
Co-authored-by: Codex <noreply@openai.com>
(cherry picked from commit c1fb49871ff9800b8f4e725f601ff7739c77e683)
fix(release): Include the previous stable patch notes
Compose the preceding stable patch line automatically so users can see recent changes without duplicating release-note files.
Co-authored-by: Codex <noreply@openai.com>
(cherry picked from commit 4366299e2d48a51af191cc8cc24aa0abb1648879)
fix(installer): Accept the optional Linux HDR runtime helper
Allow packages with the on-demand HDR downloader while retaining compatibility with older rollback packages. Preserve this checkout installer fix on Canary.
Co-authored-by: Codex <noreply@openai.com>
(cherry picked from commit 944bc2ec045c4f772723dfddb11061e588675190)
fix(playnite): back off and rate-limit pipe reconnects (#689)
* fix(playnite): back off and rate-limit pipe reconnects
When the pre-0.5 script connector (SunshinePlaynite.psm1) is still
installed next to Playnite.DesktopApp.exe, Playnite loads it alongside the
compiled plugin. Both serve the single-instance pipe
Sunshine.PlayniteExtension, so the one that does not own the name gets
ERROR_PIPE_BUSY from NamedPipeServerStream immediately. The accept loop
retried with no delay and logged a WARN every ~1 ms to extensions.log and
sunshine_playnite-*.log, growing them by gigabytes and keeping Defender's
real-time scanner busy.
Plugin:
- Back off after a failed accept attempt: 250 ms doubling to 10 s with
jitter, reset on a successful accept; the wait ends on Stop().
- Log the first failure of a run, then at most one summary per 60 s, and
note recovery once a client is accepted.
- Explain ERROR_PIPE_BUSY: another process owns the pipe, usually a second
copy of the connector.
- At startup, warn about any SunshinePlaynite.psm1 in Playnite's
Extensions folders.
Sunshine (IpcClient, also used by playnite-launcher):
- Replace the fixed 500/300 ms reconnect sleeps with the same backoff; it
resets only after a connection stays up for 5 s, so a connect-and-drop
loop cannot spin either. Sleeps return promptly on stop().
- Rate-limit connect-failure logging the same way, with the Win32 error.
- Add NamedPipeFactory::set_quiet_connect_failures() so per-attempt
"pipe not found/busy" logs drop to debug for callers that report
failures themselves, and last_connect_error() so the real error is
reported instead of a GetLastError() clobbered by logging.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* test(playnite): update pipe fixtures for the reconnect backoff
The identification and virtual-display transport fixtures extract code from
pipes.cpp and playnite_ipc.cpp, so they broke on the new connect_to_plugin
signature and the factory's quiet-failure state. Carry that state into both
fixtures and assert the connect error is reported on failure.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Vibeshine adaptation: preserve the existing ConnectorRetryPolicy server
backoff and logging semantics, private IPC security contracts and their tests.
Port native client backoff and legacy connector warning; extend the native
fixture to check jitter bounds, exponential growth, cap and reset.
(cherry picked from commit b739553a9653fa1b2a288f7e3ab2321ab1a0c3a4)
(cherry picked from commit a52a2052623bed563a3d9a5b27565d6f33349008)
test(ipc): bound pipe authority extraction to its function
Extract only the verified acceptance function so unrelated reconnect-policy methods cannot leak into its standalone security fixture.
Co-authored-by: Codex <noreply@openai.com>
(cherry picked from commit a29804b23b57cde4daf6e0caf46269296180473f)
fix(macos): retain exact launch display refresh policy
Adapt imported display setup to the current millihertz fields and saturating Hertz fallback instead of the removed source normalization helper.
(cherry picked from commit 604f77460b42b53785abb5f31310f007b549183a)
fix(release): validate and order historical nightly revisions
Adapt legacy parser and metadata compatibility portion only, preserve numeric producer/workflows.
Co-authored-by: Codex <noreply@openai.com>
(cherry picked from commit 0a2aad994bbab95e117c8fe100c2c6f328d5817d)
(cherry picked from commit a1317f48c532b51967e0c66df139f09d1ed7bfd6)
fix(macos): load tray fallback from current Shine assets
The active web asset set provides 16px PNG states, not the legacy 45px filenames.
Co-authored-by: Codex <noreply@openai.com>
(cherry picked from commit 8efbe86699e9a0678f07d9ba895c3d2074d29f24)
Document and translate virtual_display_keep_while_paused
The pause hold's setting had no entry in configuration.md or the v2 UI's
base locale, so the config catalog contract test failed, and the v2
settings page didn't offer it. Add the docs entry, the English strings,
and a macOS-only switch next to the other virtual display settings,
appended so the Everyday page's field picks stay the same.
The v2 page also hid the paused virtual display timeout on macOS, which
the pause hold uses as its limit; show it there too and assert that in
the parity test.
(cherry picked from commit 955b265f13907c190ed719dd08b33239635d02d8)
(cherry picked from commit b9d9df309a82c30f44cfb28ed43f925d756b39d1)
fix(macos): retain local shutdown signal captures
Shine owns the shutdown atomic as a local rather than the source static, so native signal callbacks must retain their reference captures.
(cherry picked from commit c1573ec8010bde23b152245de56d4cdff3f8b21f)
lowlatency fallback for AMF (+ VAAPI lowpower fallback) (#419)
* Update amf_d3d11.cpp - AMF lowlatency fallback
Add lowlatency fallback for amf encoder
* Update video.cpp - VAAPI lowpower fallback
implemented the VAAPI lowpower fallback
(cherry picked from commit e1dd3091d4009bffb6715f3b6d260adaaeb87080)
(cherry picked from commit 56e2d94b4dd551ddb811e829215e25fe98f051da)
test(sync): preserve encoder and pacing compatibility contracts
Keep the existing broadcast control adapter and precise adaptive pacing while applying optional explicit ceilings. Exercise atomic admission, fractional timing, bounded AMF retry and device-loss exclusions, hardware-gated temporal AQ and low-MTU packet caps. Preserve the existing C++ default scheduling priorities and document disabled-by-default options. Release the lifecycle gate before a rejected start can destroy its last broadcast reference.
Co-authored-by: Codex <noreply@openai.com>
(cherry picked from commit 3c9ac3b9c35772f6f2747691722e6322e56902aa)
test(linux): cover managed audio capture sink precedence
Exercise production selection for managed and resumed sinks while preserving configured/default fallbacks. Broker metadata adaptation preserves directory-aware command routing and the isolated elevated path; only supported Sunshine metadata and Proton toggles cross the desktop-user boundary.
Co-authored-by: Codex <noreply@openai.com>
(cherry picked from commit 0b28712972e53f9bb9abf378868402a2cc18673a)
fix(ci): restore nightly dependency and regression contracts
(cherry picked from commit 08b4f455306bfd9b7af65889f75884f0740cdc83)
fix(linux): make machine-host shutdown deadline unconditional
Exit the supervised machine host before touching logging on deadline expiry.
Keep phase diagnostics and the debug trap on the ordinary host path.
Exercise blocked logging, signal-driven expiry, ordinary expiry and completion
with the extracted production deadline and real thread compatibility wrapper.
Targeted reverse port; preserve Vibeshine shutdown phase tracking.
(cherry picked from commit 02ea43e9abe5b62014f238d07bafb05c26db4217)
(cherry picked from commit 65ff782d0d29e4f83d14e4dae8d1bff98102f258)
fix(display): fail closed when switching helper engines
Carry the missing timeout and wait-failure returns from the reviewed engine
restart change. Restrict fast-ping reuse and hard restart to a matching engine.
Preserve Vibeshine's private control pipe, expected-process checks and centralized
termination helper. Exercise the production branch with deterministic wait,
connection reset, cancellation and ping outcomes.
Targeted reverse port of the remaining engine-switch guards.
(cherry picked from commit 4944d915f34185b883cfbb263107c65d137ecf8e)
(cherry picked from commit d86f4b171d4de79395c83eb96b1a303a6c9a1ee7)
fix(display): bound capture retries by the stream-start budget
Publish the current stream-start APPLY deadline and cap post-APPLY capture
retry sleeps by its remaining time. Keep full-policy applies and normal
capture retries unchanged, and preserve current recovery-instance tracking.
Exercise the extracted publication, readback and capture retry code with a
controlled clock, including expired budgets and successful capture.
Targeted reverse port; existing helper/IPC startup budgets remain in place.
(cherry picked from commit 88fbd834c5992bcc2325259704e5922e87a4d080)
(cherry picked from commit e2183dc1e6ca039a42e2d287f54a97d17162fc0c)
test(windows): keep restored policy harnesses portable
Carry the quoted-header search path and Windows CRT guard from the source.
The disconnect fixture has already superseded the source's third hunk.
Adapt the restored checks to Apple's compiler: mark an optional permission
constant unused, select Windows production branches after host C++ headers,
and canonicalize temporary fixture roots before exercising the unchanged
Playnite symlink guard. Explicitly select both readiness branches on Windows.
(cherry picked from commit 8468c3da401eed0dc10641446fafe041116a6830)
(cherry picked from commit ae231be947a3e0f9a2f80a5350d97bee97d46e05)
test(ci): refresh Linux production-boundary adapters
(cherry picked from commit baa3b2d064e9e9b34e11e5a85c59559004d54aac)
test: align shutdown and budget fixtures with production
Use forced exit status, bounded elapsed time, vendor entry and absent cleanup
completion as the PyroWave deadline oracle. Exercise normal and probe-return
shutdown with blocked vendor release and a deliberately blocking logger seam;
never require a diagnostic emitted by the unsafe pre-exit logging path.
Guard the capture-budget fixture's Windows macro and compile its production
replay with both default and already-defined platform macros. Load host C++
headers before selecting the Windows branch on non-Windows test hosts.
Preserve the production unconditional shutdown deadline and newer Canary repairs.
(cherry picked from commit 183816054694978310d523d115003d43e957745a)
fix(macos): drop max_ref_frames=1 for h264_videotoolbox and enable PARALLEL_ENCODING (#5200)
(cherry picked from commit 3ee4144a8123da467cc771acc1d449e98668a8e2)
(cherry picked from commit 6c14287d38c679fadc1c61127d814fba5638b198)
fix(linux/freebsd): truncate thread names to 15 characters (#5527)
(cherry picked from commit 9e1f089e1fc7dcbb3dd655e35157e2b633ad402a)
(cherry picked from commit 9bc9ec05e00f15012ec6f8320d472674a9a1e68f)
fix(wayland): use the current wl_output mode (#5150)
Signed-off-by: Zach Denton <z@chdenton.com>
Co-authored-by: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com>
(cherry picked from commit 3dfbfe0906cf5970f84b96a1451451eaa2ab1fab)
(cherry picked from commit e9f6f06e59b8242438ea1b332ecabfee9efb54ab)
fix(linux/publish): release the Avahi client when the poll loop stops (#5545)
(cherry picked from commit e5759171f1db97aa9f39bc2ce77746f0b1d53497)
(cherry picked from commit d2dbde03c2c3a70cd44e28a42a67da5fa287da4c)
feat(session): add SUNSHINE_CLIENT_NAME environment variable (#5465)
(cherry picked from commit f53f0f90c5c30482e5dfa27275a729eaa4287704)
(cherry picked from commit c51500fcb66f2b2fd72f42efcd71bb67ddfe2f73)
fix(nvapi,nvenc): Load ARM64 DLLs on RTX Spark (#5682)
(cherry picked from commit 48fca7ab644b857a409f67d8e43bc74de8705164)
(cherry picked from commit 8871e6023a2f9871d93a56bc296064bde56d353c)
fix(linux): keep optional client-name metadata from blocking app launches
(cherry picked from commit c2b05bae5ad060c9c1679bfcd02d4538b24a462b)
fix(macos): use session roles for launch display preparation
(cherry picked from commit c1005901224f0072a7529be48f75d8e0749d1db1)
docs: align minimum FPS target descriptions with existing behavior
(cherry picked from commit 187bcdb95d2e20aab25569f9422ef22a8f4df5d1)
fix(display): keep exclusive stream layouts through monitor hotplug
Import Claude Code's fix/hotplug-layout-hold work for physical monitors briefly reconnecting during an exclusive virtual-display stream. Restore and persist the stream-only layout for the connected monitor set so Windows does not repeatedly reactivate another monitor.
Preserve user-enabled displays and peer virtual displays, defer to apply and restore operations, and bound repair attempts. Include policy coverage and the production-function regression harness.
(cherry picked from commit 7e38006ebcef4a5917cba7f8d4f575708a2425b3)
fix(input): remove VHF mouse stalls and repair safe batching
Use the ordered VHF driver for the full virtual desktop and remove polling
that could stall or discard input. Correct overflow batching and schedule
Home release without blocking the shared input worker. Require the mapper
package; publishing its signed artifact and verified pins remains necessary.
Co-authored-by: Codex <noreply@openai.com>
(cherry picked from commit e3b52c43a0879d6ea5c86d9fe38e030b1bbe2026)
build(vhf): pin the unsigned ordered-mouse beta.11 release
Accept the verified unsigned producer package without adding signing or
identity-allocation prerequisites. Pin its published archive, source and
DriverVer together while preserving final driver installation trust checks.
Co-authored-by: Codex <noreply@openai.com>
(cherry picked from commit d78ae061838141e4d175c0073473a0f8f40feae0)
fix(migration): Preserve downstream input and display contracts
Keep ordered VHF mouse regressions compatible with Vibepollo's queued input
and recovery contracts, and expose the macOS paused-display timeout in both
settings views. Correct portable test seams and retain shutdown/startup checks.
Co-authored-by: Codex <noreply@openai.com>
test(ci): exercise current driver publisher trust guard
Execute the actual publisher conditional across parent-install, daily unsigned
and certificate-present cases. Verify certificate and signer arguments rather
than requiring the old conditional spelling; retain all security safeguards.
test(ci): preserve driver interop assembly initialization
test(display): keep layout observation fixtures alive