Left over from #806 (PR #951). Small items with no user-visible effect, batched so they are not lost; each is a short, self-contained change.
IChatTranscriptFeed.cs holds four types (FeedStatus, ProjectedLine, FeedRead, IChatTranscriptFeed); the one-type-per-file rule wants them split.
QueuedChatMessage.Sender is set from the server's queue item but no view reads it; either show who queued a foreign prompt or drop the property.
RemoteTranscriptFeed's once-only log set grows with every distinct message for the life of the feed; a bounded set or a reset on re-establishment keeps it small.
SpecialKeyMapper maps both the CSI (ESC [ B) and SS3 (ESC O B) arrow-down sequences, but only the CSI form is under test.
MainWindowViewModel.MovedToServer proves a remote-to-local swap by session id for every dropped remote row; it should apply only while the local daemon is registered on the app's server, since that is the only case where a row can legitimately move.
RemoteSessionView.axaml.cs disposes its tab-focus subscription on detach and does not re-arm it when re-attached with an unchanged DataContext; fine under the current DataTemplate host, which always changes the context, but fragile.
MainWindow.axaml.cs still carries design-document section coordinates in comments; restate the constraints they point at.
ChatTabViewModel.QueueSummary counts other users' queued prompts in "N messages queued", so the strip reads as if they were the viewer's own; count foreign rows separately or word them apart.
RemoteSessionViewModel publishes its ChatSessionInfo subject on every directory row revision without the DistinctUntilChanged the local session stream has, so an unchanged row re-runs the pane's session handling, RefreshQueue included, for nothing.
Left over from #806 (PR #951). Small items with no user-visible effect, batched so they are not lost; each is a short, self-contained change.
IChatTranscriptFeed.csholds four types (FeedStatus,ProjectedLine,FeedRead,IChatTranscriptFeed); the one-type-per-file rule wants them split.QueuedChatMessage.Senderis set from the server's queue item but no view reads it; either show who queued a foreign prompt or drop the property.RemoteTranscriptFeed's once-only log set grows with every distinct message for the life of the feed; a bounded set or a reset on re-establishment keeps it small.SpecialKeyMappermaps both the CSI (ESC [ B) and SS3 (ESC O B) arrow-down sequences, but only the CSI form is under test.MainWindowViewModel.MovedToServerproves a remote-to-local swap by session id for every dropped remote row; it should apply only while the local daemon is registered on the app's server, since that is the only case where a row can legitimately move.RemoteSessionView.axaml.csdisposes its tab-focus subscription on detach and does not re-arm it when re-attached with an unchanged DataContext; fine under the current DataTemplate host, which always changes the context, but fragile.MainWindow.axaml.csstill carries design-document section coordinates in comments; restate the constraints they point at.ChatTabViewModel.QueueSummarycounts other users' queued prompts in "N messages queued", so the strip reads as if they were the viewer's own; count foreign rows separately or word them apart.RemoteSessionViewModelpublishes itsChatSessionInfosubject on every directory row revision without theDistinctUntilChangedthe local session stream has, so an unchanged row re-runs the pane's session handling,RefreshQueueincluded, for nothing.