Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 88 additions & 0 deletions docs/release-notes/0.6.5.md
Original file line number Diff line number Diff line change
@@ -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.
2 changes: 1 addition & 1 deletion version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.6.4
0.6.5
Loading