* Report API version and channel for build artifacts
* Add small PackageBuild exe that will replace most of CLLCompile on the backend
* Remove ReferenceAssembly upload
Allows us to get rid of a ton of abstraction in SboxBuild, and gets rid of a lot of GitHub API plumbing.
I feel like now that our workflows are more complex it's nicer to just use GitHub directly rather than having our own pipeline abstraction in SboxBuild.
This way we get nicer logging and error reporting, which we can\t achieve through GitHub API.
* Whitelist System.Memory and System.ReadOnlyMemory (without pinning)
* Be very explicit with System.Span and System.ReadOnlySpan whitelists, do not allow pinnables
* Be completely explicit with Unsafe IL whitelist, allow Unsafe.SizeOf<T>
* BlacklistCodeWalker can have an allow list
* Compiler blacklist explicitly bans CreateSpan, allows Unsafe.SizeOf<T>
* Whitelist System.IO.InvalidDataException
* Better InlineArray whitelisting for compiler generated code
* WhitelistGen: Creates explicit signatures from wildcard rules
* Claude skill for whitelisting, uses the WhitelistGen tool to be very explicit and makes a good effort to security review
* Move all unit tests to Engine/Tests
* Fix Margin.EdgeSubtract
* Fix Capsule.Contains
* EnvironmentVariables.Remove if it's null
* Fixed ray trace never returning startedsolid
* Fix HistoryList.Navigate on empty list
* Fix GameObject.WorldPosition accepting NaNs
* Fix flex: initial expanding to the wrong grow/shrink
* Translation.TryConvert shouldn't throw on invalid enum strings
* Skip sound file tests on machines with no audio device
* Remove some dead native sound code
* Rewrite managed audio system to be lock-free
Use a snapshot triple buffering approach (main thread collect snapshots -> mixingthread processes), similar to how we handle batch drawing (mainthread collects snapshots -> render threads processes)
* Remove/Rework managed steam audio abstraction
* Add just Steam Audio effects, build ourselves via vpc
Compile steamaudio with AVX1
* Sync job becomes upload job, gets artifacts from different platform runners and uploads to Steam, still does git public sync
* Make our own actions/upload-artifact that uses networked storage instead of GitHub
When an LFS file is renamed (e.g. `libHarfBuzzSharp.so.0.60830.0` to `libHarfBuzzSharp.so`) the LFS blob stays the same. `git lfs ls-files --all --deleted` deduplicates by blob OID, so it only reports the new filename.
The old filename disappears from the list, changing historical commits and cascading a full history rewrite.
Replace the path-based LFS exclusion with inline blob content detection using git-filter-repo's `blob_callback`.
Any blob starting with the LFS pointer header is stripped regardless of filename, making the filter immune to renames
* Gitignore for unix objects and bins
* libmpg123 mac
* try with kosmiskrisp instead of molten xx, much less problematic?
* Explicit cast for box3d and include for utlblockmemory to make clang happ
* Simple DLLImportResolver for the 3 platforms, on linux/mac it tries to load DLLs from managed/ directory even with PATH being set, and backport the steamworks behaviour from Facepunch.Steamwokrs
* Dont ShaderCompile outside of tools, resourcecompiler is not even enabled there
* Only enable steam audio binaural effect on windows, we self compile it with that feature on there, dont bother yet for linux/mac until we have a better way to do dependency track
* Fix DLLImportResolver, also let's try to keep just a single set of binaries for managed without platform variants
* Fix rect_t interop on ARM64
On ARM64, NativeRect (4 floats = HFA) gets passed in float registers (v0-v3), but the C++ function reads from x1 expecting a pointer → null crash.
On x64 Windows, passing a 16-byte struct "by value" through an unmanaged function pointer accidentally works because the x64 ABI passes it by hidden pointer anyway. On ARM64, NativeRect (4 floats = HFA) goes into float registers v0-v3, leaving x1=0x0 for the C++ Rect_t* parameter.
* Building the load path via string interpolation hardcodes "/" and can produce double-separators because NetCore.NativeDllPath already includes a trailing slash. For consistency with the rest of the codebase (e.g., InteropGen uses Path.Combine with NativeDllPath) and to avoid path quirks across platforms, use Path.Combine(NetCore.NativeDllPath, nativeName).
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Format
---------
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>