Duplication that had to agree by luck now has ONE home each: - PeerAddress (Core): the host[:port] split + resolve-preferring-IPv4 that lived as byte-identical private copies in MainForm and ServiceSendHost (plus an extra resolve copy). Both now delegate. (The unicast-hints path deliberately keeps its own loop - it collects ALL IPv4 records, a different behaviour, not a duplicate.) - RemSoundCrypto.ForPlainPassword: key + fingerprint always derived together - the divergence that once got the service's audio silently rejected can't recur. - AudioTransportRules.EffectiveOpusFrameSamples moved to Core; the headless service no longer reaches into the WinForms MainForm for a frame-size rule. - ServiceAudioDefaults (Core): the service's fixed live-jamming transport numbers, referenced by BOTH the dialog that writes the profile and the host that re-forces them at runtime - they can no longer disagree. Legacy sweep: - HandleTypeProbe + its per-minute tick retired (the 2026-06 handle-leak investigation it was built for is closed; git history has it). - RemSound.Harness project removed from the tree + solution (superseded by --selftest). - Fixed the stale AppConfig claim that per-profile hotkeys are 'no longer read' (the one-time v4.4 import reads them once); Profile.AudioPort now carries an explicit DEAD FIELD / trap warning backed by the persistence tripwire test. Gate 59/59. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
9 lines
317 B
XML
9 lines
317 B
XML
<Solution>
|
|
<Folder Name="/src/">
|
|
<Project Path="src/RemSound.Core/RemSound.Core.csproj" />
|
|
<Project Path="src/RemSound.Sender/RemSound.Sender.csproj" />
|
|
<Project Path="src/RemSound.Receiver/RemSound.Receiver.csproj" />
|
|
<Project Path="src/RemSound.App/RemSound.App.csproj" />
|
|
</Folder>
|
|
</Solution>
|