fix: lower the source generator's Roslyn pin to the net10.0 GA compiler - #1
Merged
Conversation
Microsoft.CodeAnalysis.CSharp 5.6.0 made the generator unloadable (CS9057) on any SDK shipping an older compiler, including current distro packages of the .NET 10 SDK. Pin to 5.0.0 - the GA compiler - so standard installs build; the generator only uses ForAttributeWithMetadataName (Roslyn 4.3+). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QwUovURiQeAM8ctCu2gjAa
…S, metadata token Every listener gains an optional Tls block (PKCS#12 or PEM cert/key): - Http.Tls: HLS/DASH delivery over HTTPS - Management.Tls: keeps the Bearer token off the wire in cleartext - Rtmp.Tls: RTMPS via the TLS connection middleware ahead of the handler Options validation fails fast on an enabled Tls block with no certificate. The metadata injection endpoint on the public delivery port gets its own optional Bearer token (Http.MetadataInjectionToken); the constant-time comparison moves to a shared TokenGate used by the management gate too. Verified live: HTTPS 200 on both ports, plaintext refused, TLSv1.3 handshake on 1935, 401 without the metadata token / through with it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QwUovURiQeAM8ctCu2gjAa
Out of the box the only publish policy was allow-all. Listing names under Publish.AllowedStreamNames now switches the built-in authorizer to an exact-match (case-sensitive) allowlist over the raw published name (RTMP publish name / SRT streamid), keeping last-wins takeover for valid names so reconnects still work. A custom IPublishAuthorizer in DI still overrides the built-in policy entirely. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QwUovURiQeAM8ctCu2gjAa
MemoryHLSStorage kept every ended stream's final window until the same key published again, so distinct short-lived stream names accumulated without bound. Streams now carry a last-write stamp; EvictIdleStreams (new IEvictingHLSStorage capability) frees any stream idle past the TTL unless the publish registry still owns its key, releasing blocked LL-DASH readers on the way out. A hosted sweeper runs it a few times per TTL. Default TTL 300s; 0 restores keep-until-republish. File storage is an archive by design and is never cleaned. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QwUovURiQeAM8ctCu2gjAa
The window-acknowledgement/peer-bandwidth value announced during the RTMP connect sequence was hardcoded at 1.5 Mbps with a TODO to make it configurable; it now binds from Rtmp.Bandwidth (same default). Also gives the NALU-length-size guard in NALFileFormat a message naming the actual offending value instead of a bare InvalidDataException. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QwUovURiQeAM8ctCu2gjAa
TryResync widens to internal (InternalsVisibleTo already covers the test assembly) so the alignment-loss paths get exercised without a live SRT socket: garbage skip to a verified boundary, payload 0x47 rejection, keep-tail-for-more-data, and full-garbage drop. TokenGate gets the match/mismatch/scheme/whitespace/long-token matrix. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QwUovURiQeAM8ctCu2gjAa
…ream TTL Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QwUovURiQeAM8ctCu2gjAa
CmafPackager was only exercised incidentally; it now has a structural ISO-BMFF box parser and 9 tests: init-segment box trees for H.264+AAC / video-only (avc1 with verbatim avcC, mp4a with the ASC inside esds, mdhd timescales), the unmapped-codec rejection, and fragment structure - styp/ moof/mdat order, trun data offsets into the shared mdat, signed composition offsets, sequence numbers and tfdt base times advancing across fragments. The TS-mode HLSSegmenter (the passthrough variant was tested, this one was not) gets 5: keyframe-after-target cutting with held PSI tables, window trimming with physical blob deletion, handover export without ENDLIST, resumed continuation with EXT-X-DISCONTINUITY, and broken-input rejection. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QwUovURiQeAM8ctCu2gjAa
kt81
added a commit
that referenced
this pull request
Jul 13, 2026
fix: lower the source generator's Roslyn pin to the net10.0 GA compiler
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Microsoft.CodeAnalysis.CSharp 5.6.0 made the generator unloadable (CS9057)
on any SDK shipping an older compiler, including current distro packages
of the .NET 10 SDK. Pin to 5.0.0 - the GA compiler - so standard installs
build; the generator only uses ForAttributeWithMetadataName (Roslyn 4.3+).
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01QwUovURiQeAM8ctCu2gjAa