From c5cf3af0bcacfca715b18f550825b049040d154e Mon Sep 17 00:00:00 2001 From: vibesoftwarecoder Date: Sat, 12 Sep 2026 23:26:57 -0500 Subject: [PATCH] release: 0.6.5 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit version.txt 0.6.4 -> 0.6.5, plus the notes the release workflow reads. No code changes -- four merged commits ship: #49 (a streaming seat reported Ready), #50 (a streaming standalone Apollo reported idle), #51 (that warning overstated the stall), #52 (the audit gate failed on a registry outage). ⭐ Three of the four are runtime-verified on the reference host rather than only CI-green: #49 Ready -> Streaming in 6s on connect, back in 3s on disconnect #50 streaming signal correct in BOTH directions, including a live stream the old serverinfo check reported as idle #51 266 ms measured, and the person streaming did not notice it ⚠️ And master CI was RED before this. 45f46b05 failed on a 400 from registry.npmjs.org, not on our code -- the same commit had passed its own PR 45 minutes earlier and passed locally afterwards. #52 fixed the gate; the master push on b5feaac3 is green across all three jobs, checked before cutting rather than assumed. That is worth recording: "the tests pass" is not "master is green", and I reported the first while implying the second. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01SQvL62WkT8xDWXqyjFCGDw --- docs/release-notes/0.6.5.md | 88 +++++++++++++++++++++++++++++++++++++ version.txt | 2 +- 2 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 docs/release-notes/0.6.5.md diff --git a/docs/release-notes/0.6.5.md b/docs/release-notes/0.6.5.md new file mode 100644 index 0000000..3816ca1 --- /dev/null +++ b/docs/release-notes/0.6.5.md @@ -0,0 +1,88 @@ +**The dashboard now tells the truth about what is streaming. Two things it reported were simply +wrong, and both were wrong in the same direction — saying nothing was happening when something +was.** + +## A streaming seat said it was idle + +A seat with a Moonlight client attached reported its status as `Ready`, not `Streaming`. The stream +worked; only the reporting was wrong. So the dashboard showed an active seat as idle, and anyone +deciding whether a seat was safe to tear down got the wrong answer. + +The cause was narrow and easy to miss. MultiSeat watches a seat's Apollo log for client connect and +disconnect, and that watcher opened by checking whether any launch-on-connect apps were configured. +If none were — which is the default — it returned immediately, and the connect detection went with +it. Nothing on a default installation ever noticed a client arriving. + +Detection now always runs. Launching apps is still optional; noticing a client is not. + +**Verified on real hardware**, not only in tests: `Ready` to `Streaming` in 6 seconds on connect, +back to `Ready` in 3 on disconnect. + +## A streaming host said it was idle too + +The same class of error, one level up. MultiSeat asks a standalone Apollo whether it is streaming by +reading its `serverinfo`, which reports the state of a launched **application**. Someone streaming +the plain desktop — which is what a second Apollo is usually for — leaves that permanently reading +"free". + +Measured here: a client streaming the desktop for 26 minutes, the GPU encoder busy the whole time, +and `serverinfo` still insisting the host was idle. + +MultiSeat now decides this from the encoder itself — per process, so another remote-desktop tool on +the same machine cannot be mistaken for Apollo. Verified in both directions: correctly idle when +nothing is streaming, correctly busy during a live stream that the old check missed entirely. + +## Tearing down a seat now says when it will disturb someone + +Every seat is a remote desktop session, and ending one is a display change that any other Apollo on +the machine notices — it rebuilds its encoder, and whoever is watching sees a brief hitch. This is +not new and is not fixable: the session has to end for the seat to go away. + +What is new is that it no longer happens silently. Tear down a seat while a standalone Apollo is +streaming and MultiSeat says so first, naming the consequence. + +**Measured at 266 ms, and the person streaming did not notice it.** An earlier measurement of 690 ms +led to this being described as a second-long freeze; that was too strong and has been corrected +everywhere it appeared. + +⚠️ One person on one network is not proof it is always imperceptible. A busier machine may feel it. +But the warning now describes a few hundred milliseconds rather than a freeze. + +## Continuous integration no longer fails on someone else's outage + +The dependency audit added in 0.6.2 failed a build when the npm registry returned an error, because +`npm` reports "found a problem" and "could not check" the same way. A real finding still fails +immediately; an unreachable registry is now retried and then reported as a warning, saying plainly +that nothing was audited in that run. + +This affects nobody running MultiSeat. It is here because a build that goes red for reasons unrelated +to the code trains people to ignore it. + +## Install + +```powershell +.\prerequisites\install-prerequisites.ps1 # drivers - needed either way +.\scripts\install-service.ps1 -FromZip . +``` + +Your configuration is preserved, as of 0.6.4 — `appsettings.json` and `appsettings.local.json` are +kept byte for byte, with a backup under `C:\ProgramData\MultiSeat\config-backups\`. + +Afterwards, confirm what landed: + +```powershell +& 'C:\Program Files\MultiSeat\MultiSeat.Service.exe' --config +``` + +It should report `0.6.5`. + +## Known limitations + +- **Seats capture the remote desktop surface, not a dedicated virtual display.** A seat's display + reports a 1000 Hz refresh rate, which is the sign of it. A Windows constraint on where a virtual + display can attach, not a regression. +- **Tearing a seat down still briefly disturbs a standalone Apollo.** Now announced rather than + silent, but unchanged. +- Seat auto-discovery from another machine was fixed in MoonlightVibe 6.3.4 but has not been run by + anyone yet. If a seat does not appear on its own, add it by address and port — the first seat uses + 48100, and each further seat is thirty higher. diff --git a/version.txt b/version.txt index d2b13eb..ef5e445 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.6.4 +0.6.5