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
12 changes: 9 additions & 3 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -342,9 +342,15 @@ MultiSeat is self-contained and **non-destructive**: it works out of the box whe
2. **Own port range.** Default `PortBase = 48100`, above a stock Apollo's block — no runtime port conflict.
3. **Never kills a non-MultiSeat Apollo.** On startup `MultiSeatWorker.KillOrphanedApolloProcesses` reaps **only** Apollo processes MultiSeat launched, identified via WMI (`GetManagedApolloPids`) by executable path (under the ApolloVibe dir) or a MultiSeat per-seat config path on the command line. It no longer stops/disables `ApolloService`, and `install-service.ps1` leaves that service alone. (WMI failure → empty set → cleanup is skipped rather than risk killing an unrelated Apollo.)

⚠️ **"Non-destructive" has one exception, and it is not fixable here: tearing a seat down stalls a
standalone Apollo's stream for about 690 ms** while it rebuilds its encoder. Self-recovering, and
it does not compound with seat count — seat-to-seat interference was measured and does not exist.
⚠️ **"Non-destructive" has one exception, and it is not fixable here: tearing a seat down makes a
standalone Apollo rebuild its encoder.** Self-recovering, and it does not compound with seat count —
seat-to-seat interference was measured and does not exist.

⭐ **It is smaller than it sounds.** 690 ms on 2026-09-04, **266 ms on 2026-09-11**, and on
2026-09-11 the person actually streaming **did not notice it at all**. Do not describe this as a
freeze or a second-long stall; that came from one early measurement and overstates it. ⚠️ One
user's perception on one LAN is not proof it is always imperceptible — but "a few hundred
milliseconds, usually unnoticed" is what the evidence supports.

⛔ **The cause is NOT a second Apollo starting or stopping**, which is the intuitive guess and was
this issue's original premise. Decomposed step by step (#23): stopping the seat's Apollo produced
Expand Down
4 changes: 2 additions & 2 deletions src/MultiSeat.Service/Sessions/SeatManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -649,8 +649,8 @@ private async Task WarnIfStandaloneApolloStreamingAsync(Guid seatId, Cancellatio
_logger.LogWarning(
"Seat {Id}: tearing down while the standalone Apollo (PID {Pid}, {Name}) is " +
"streaming. Ending this seat's RDP session changes the desktop topology, so " +
"that stream will stall for about a second while its encoder rebuilds. It " +
"recovers on its own. See issue #23.",
"that stream will hitch for a few hundred milliseconds while its encoder " +
"rebuilds. It recovers on its own. See issue #23.",
seatId, host.ProcessId, host.HostName ?? "unnamed");
}
}
Expand Down
Loading