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.
Source: 4de692efe277
Since the preceding successfully published nightly Commit log
2.0.5-nightly.d20261106.062d0ac0291b: compare exact sources.
fix(installer): Scope path checks and explain install rejections
Keep drive-root metadata informational and inspect package/action inputs
instead of unrelated user files. Preserve critical checks and log the
actual rejected path, permissions and API evidence.
Co-authored-by: Codex <noreply@openai.com>
docs(release): Describe the 2.0.5 installer fixes
Explain the narrower Windows path checks and improved failure evidence
so users know which installation problems this release addresses.
Co-authored-by: Codex <noreply@openai.com>
test(installer): Match the packaged preflight reflection signature
The preview now accepts an optional short-filename setting. Extract the
object-array assignment and exercise all four reflection arguments so the
release check reaches the production preview instead of failing in its fixture.
Co-authored-by: Codex <noreply@openai.com>
merge(canary): Replace scoped install checks with repairs for 2.0.5
Supersede the unpublished scoped-check approach, which still blocked installs
over permissions, with the repair design from canary. Keep the SHORTFILENAMES
preflight handling and the updated preflight reflection test. Drop the scoped
guard's tests and validation document, which described the replaced code, and
rewrite the 2.0.5 notes to match what ships.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs(release): Describe the 2.0.6 installer fixes
2.0.5 was tagged but never released, and this replaces its installer changes,
so its notes move to 2.0.6 instead of appearing in the new release.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
test(installer): Register the restored product in the per-user rollback case
The case cleared native registration without letting the restore create it,
so a correct restore could never be verified and the check always failed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
revert(installer): Restore the 2.0.1 stable install flow
Repeated installer failures need a longer Canary test period. Restore the 2.0.1 Windows bootstrapper and MSI actions for 2.0.6, removing the newer guard and its test/build wiring from master. Keep application and driver updates, migration data preservation, and nightly security work intact.
Co-authored-by: Codex <noreply@openai.com>
fix(nightly): anchor version to reconciled published stable
Derive the nightly base from the highest published stable release and require its commit in the source before assigning a newer upgrade version. Recheck the anchor at publication and rebuild unchanged source if the stable base advances.
Cover release filtering, version ordering, divergent branches and publication races.
fix(nightly): preserve existing source eligibility checks
Keep unchanged-source and migration checks unchanged while anchoring the version to the latest published stable. Align the two hosts' version policy.
fix(release): persist build channel and protect numeric packages
feat(release): allocate immutable numeric versions
fix(release): support local-only nightly validation tags
fix(release): verify validation tags and dispatched artifacts
fix(release): close numeric publication gaps
fix(release): preserve notes framing and draft identity
test(release): align Windows validation workflow contracts
fix(validation): resolve numeric nightly stable anchor
test(validation): preserve legacy qualification fallback
test(validation): cover numeric and legacy nightly qualification
merge(release): reconcile stable 2.0.6 with Canary
fix(gamepad): Stop DualSense rumble when emulation is disabled (#708)
fix(audio): Honor Steam capture endpoint mute across buffered audio
fix(display): Move a virtual display out of a Duplicate group before applying
Windows can activate the virtual display at the same origin as a Duplicate
pair of physical monitors. libdisplaydevice groups displays by origin and
rejects any group larger than two, including the layout it starts from, so
every APPLY failed and capture waited for a display that never appeared.
Before applying, move the configured display to the right edge of the
desktop when it is the only display on its adapter in an oversized group.
The user's own displays never move. Both helper engines do this.
Refs: Nonary/Vibepollo#702
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
feat(linux): Run commands by their elevated setting, not an approval list
Linux machine-service hosts required `sudo vibeshine authorize-commands`
after every command change, and the approval list missed sources such as
global prep commands, so saved commands failed with exit 126. Windows has
no such step: the Web UI login is the trust boundary and the elevated flag
alone decides privilege.
Match that on Linux:
- The session broker drops the /etc/vibeshine/session-commands check.
Requests now carry <working-directory> <command>; an empty directory
still resolves from the command's executable.
- New app-elevated verb: "Run elevated" commands run as root in a
transient system unit (no app supervisor, which drops all capabilities),
with SUDO_USER/SUDO_UID/SUDO_GID set. Other commands still run as the
desktop user through the user manager.
- Upgrades delete the retired allowlist; authorize-commands only prints
that approval is no longer needed.
- Both Web UIs show the elevated toggle for Linux hosts.
- session-exec logs failed broker requests to the journal.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
merge(release): Bring numeric nightly versioning to Canary
fix(nightly): Number nightlies above every published release
The numeric allocator refused to run unless the source contained the latest
stable, the highest published version and the previous release source. Canary
does not contain stable 2.0.6, so tonight's nightly would have failed instead
of numbering above it, and the build-time CMake gate had the same dependency.
Take the base from the highest version any published release carries (stable,
prerelease or nightly, with legacy 2.0.5-nightly.* counting as 2.0.5) and keep
the feat/fix rules unchanged. Ancestry now only produces a warning, since the
feat/fix count already excludes commits from every published release source.
A number claimed by another tag, such as a reservation left by a failed build,
is skipped by taking the next patch instead of failing. A retry reuses its own
reservation only while it still outranks everything published, and the
pre-publication re-resolve still stops a nightly that a newer release overtook.
The stable anchor is now informational: publication, Windows versioninfo and
validate-windows no longer fail when the source lacks the latest stable.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
test(nightly): Keep allocator test warnings out of run annotations
The allocator prints ::warning:: lines, and the nightly workflow runs its tests
in the same job as the real resolve. Fixture warnings such as "canary does not
contain stable 2.0.6" surfaced as run annotations. Capture them in the tests
and assert on them instead.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fix(nightly): Verify the reservation tag without MSYS2 brace expansion
Windows CI generates versioninfo with MSYS2 git launched from native
cmake.exe, and the MSYS2 runtime brace-expands unquoted arguments.
"2.2.0^{commit}" reached git as "2.2.0^commit", so the reservation check
always failed and every numeric nightly build stopped with "requires its
annotated reservation tag to peel exactly to HEAD". Legacy -nightly builds
never used that syntax, which is why they kept working.
Peel the tag with "rev-list -n 1 refs/tags/<version>" instead, and make the
versioninfo test reject ^{...} peel syntax in the generator.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fix(audio): Mark the endpoint mute callback final for the Windows build
The Windows MinGW build treats -Wdelete-non-virtual-dtor as an error. The COM
callback's Release() does "delete this" on a polymorphic type with a
non-virtual destructor, so the Windows build failed in audio.cpp. Mark the
class final so the delete cannot skip a derived destructor.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>