Shared desktop mechanisms and native interoperability for ArcChat, ArcNotes, ArcScope and ArcSlate. This repository owns the CMake/vcpkg toolchain, narrow C ABIs, C# wrappers and capability NuGet packages. Product applications and services build independently from published packages.
- Five native shim foundations: media, OpenTimelineIO, colour, image and macOS Metal. Their existing ABI/version/error probes are retained; full product capabilities are still implementation work.
- Shared C# mechanism and ContentSandbox scaffolds, explicitly excluded from NuGet publication.
ArcForges.Build.Policy: portable C# build defaults and enforced central package-version rules.- Five managed native packages and four Windows x64 runtime packages deliver the existing version, build-information and error APIs, real DLL dependencies, C headers, import libraries and source records.
- Platform-only managed and Windows IDE solutions, native ABI CI, package verification and NuGet OIDC CI.
See extraction scope and evidence. The accepted product family design is maintained in ArcForges-Design.
Install the .NET SDK selected by global.json and Python 3.11 or newer. No Mobile/Web workloads are needed.
dotnet restore DesktopPlatform.slnx --locked-mode
dotnet build DesktopPlatform.slnx -c Release --no-restore
dotnet test --project tests/ArchitectureTests/ArcForges.Tests.ArchitectureTests.csproj -c Release --no-buildCMake 4.3.3, Ninja 1.13.1, sccache and a C++20 compiler are needed only for native producer builds.
Follow native prerequisites and commands. win.slnx additionally builds the native
Windows projects and stages their DLLs for NativeAbiTests; CI uses the independent CMake path.
After native staging, follow the complete package verification to pack and
run independent C#, Native AOT and C17 consumers. See native package scope and evidence.
The scheduled/manual Deep check runs C# CodeQL only. C++ verification uses the PR/release native compilation, CMake/CTest, managed ABI tests and isolated package consumers; Deep check no longer runs native clang-tidy, sanitizers or fuzzers. To validate the current configuration, use Actions → Deep check → Run workflow and select the desired branch. Re-running a historical workflow uses its original commit and can still execute the removed jobs.
Package publishing documents the release allowlist, candidate verification,
NuGet trusted-publisher setup and consumer examples. Only admitted packages are published; shared
placeholders remain excluded. These runtime packages expose the existing ABI, not future product APIs.
Every push to main, including a merged PR, automatically allocates a prerelease version. Native
compilation/tests and source checks must finish before packing; isolated package consumers and the
aggregate gate must pass before the same package bytes are published to nuget.org through OIDC.
No manual workflow run, version entry or publish checkbox is required.
Contracts is a separate repository with handwritten proto as the business RPC authority. It also owns schema validation, compatibility checks, generators and generated SDK packaging:
| Consumer | Published dependency |
|---|---|
| C# desktop / Cloud | ArcForges.Contracts.* NuGets: generated protobuf messages and gRPC stubs |
| TypeScript Web / Mobile | @arcforges/proto, @arcforges/api-client; Mobile also @arcforges/rn-transport |
| AI / Cloud internal integration | Separate internal schema/client package; never imported by public SDKs |
Consumers reference exact NuGet/npm versions and commit their locks. They neither clone Contracts nor run its generators during ordinary builds. Contracts CI publishes both ecosystems from one reviewed schema commit and records descriptor/package hashes. Compatible additive changes can roll out without simultaneously updating every consumer; breaking changes require a new protocol major and migration. There are no Git submodules. This extraction does not create or publish the separate Contracts repository.
AGPL-3.0-only. See NOTICE.md and the dependency register for attribution.