From 856f61e07126c749703d641eff331034a22f211e Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sat, 13 Jun 2026 07:54:30 +0100 Subject: [PATCH] Add typed state artifact verifier --- .../Aetheria.State.Verify.csproj | 13 + Aetheria.State.Verify/Program.cs | 93 + .../net10.0/Aetheria.State.Verify.deps.json | 293 ++ .../Debug/net10.0/Aetheria.State.Verify.dll | 3 + .../Debug/net10.0/Aetheria.State.Verify.exe | Bin 0 -> 162816 bytes .../Aetheria.State.Verify.runtimeconfig.json | 12 + .../bin/Debug/net10.0/Aetheria.State.dll | 3 + .../Debug/net10.0/ConcurrentCollections.dll | 3 + ...GameCult.Caching.MessagePack.Analyzers.dll | 3 + ...GameCult.Caching.MessagePack.Analyzers.xml | 13 + .../net10.0/GameCult.Caching.MessagePack.dll | 3 + .../net10.0/GameCult.Caching.MessagePack.xml | 226 + .../bin/Debug/net10.0/GameCult.Caching.dll | 3 + .../bin/Debug/net10.0/GameCult.Caching.xml | 1138 +++++ .../bin/Debug/net10.0/GameCult.Logging.dll | 3 + .../bin/Debug/net10.0/GameCult.Logging.xml | 94 + .../bin/Debug/net10.0/GameCult.Mesh.dll | 3 + .../bin/Debug/net10.0/GameCult.Mesh.xml | 849 ++++ .../bin/Debug/net10.0/GameCult.Networking.dll | 3 + .../bin/Debug/net10.0/GameCult.Networking.xml | 3737 +++++++++++++++++ .../net10.0/Isopoh.Cryptography.Argon2.dll | 3 + .../net10.0/Isopoh.Cryptography.Blake2b.dll | 3 + .../Isopoh.Cryptography.SecureArray.dll | 3 + .../bin/Debug/net10.0/LiteNetLib.dll | 3 + .../Debug/net10.0/MessagePack.Annotations.dll | 3 + .../bin/Debug/net10.0/MessagePack.dll | 3 + .../net10.0/Microsoft.NET.StringTools.dll | 3 + .../bin/Debug/net10.0/R3.dll | 3 + ...eria.State.Verify.csproj.nuget.dgspec.json | 960 +++++ ...Aetheria.State.Verify.csproj.nuget.g.props | 15 + ...theria.State.Verify.csproj.nuget.g.targets | 2 + ...oreApp,Version=v10.0.AssemblyAttributes.cs | 4 + .../Debug/net10.0/Aetheria.4BA5618A.Up2Date | 0 .../Aetheria.State.Verify.AssemblyInfo.cs | 22 + ...eria.State.Verify.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 17 + .../Aetheria.State.Verify.GlobalUsings.g.cs | 8 + .../Aetheria.State.Verify.assets.cache | Bin 0 -> 5711 bytes ...tate.Verify.csproj.AssemblyReference.cache | Bin 0 -> 8099 bytes ...tate.Verify.csproj.CoreCompileInputs.cache | 1 + ...a.State.Verify.csproj.FileListAbsolute.txt | 46 + .../Debug/net10.0/Aetheria.State.Verify.dll | 3 + ...theria.State.Verify.genruntimeconfig.cache | 1 + .../Aetheria.State.Verify.sourcelink.json | 1 + .../obj/Debug/net10.0/apphost.exe | Bin 0 -> 162816 bytes .../net10.0/ref/Aetheria.State.Verify.dll | 3 + .../net10.0/refint/Aetheria.State.Verify.dll | 3 + Aetheria.State.Verify/obj/project.assets.json | 851 ++++ Aetheria.State.Verify/obj/project.nuget.cache | 32 + Aetheria.State/AetheriaStateNode.cs | 5 + Aetheria.State/README.md | 6 + README.md | 2 + docs/aetheria-perfect-machine-map.md | 3 + 53 files changed, 8505 insertions(+) create mode 100644 Aetheria.State.Verify/Aetheria.State.Verify.csproj create mode 100644 Aetheria.State.Verify/Program.cs create mode 100644 Aetheria.State.Verify/bin/Debug/net10.0/Aetheria.State.Verify.deps.json create mode 100644 Aetheria.State.Verify/bin/Debug/net10.0/Aetheria.State.Verify.dll create mode 100644 Aetheria.State.Verify/bin/Debug/net10.0/Aetheria.State.Verify.exe create mode 100644 Aetheria.State.Verify/bin/Debug/net10.0/Aetheria.State.Verify.runtimeconfig.json create mode 100644 Aetheria.State.Verify/bin/Debug/net10.0/Aetheria.State.dll create mode 100644 Aetheria.State.Verify/bin/Debug/net10.0/ConcurrentCollections.dll create mode 100644 Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Caching.MessagePack.Analyzers.dll create mode 100644 Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Caching.MessagePack.Analyzers.xml create mode 100644 Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Caching.MessagePack.dll create mode 100644 Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Caching.MessagePack.xml create mode 100644 Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Caching.dll create mode 100644 Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Caching.xml create mode 100644 Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Logging.dll create mode 100644 Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Logging.xml create mode 100644 Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Mesh.dll create mode 100644 Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Mesh.xml create mode 100644 Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Networking.dll create mode 100644 Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Networking.xml create mode 100644 Aetheria.State.Verify/bin/Debug/net10.0/Isopoh.Cryptography.Argon2.dll create mode 100644 Aetheria.State.Verify/bin/Debug/net10.0/Isopoh.Cryptography.Blake2b.dll create mode 100644 Aetheria.State.Verify/bin/Debug/net10.0/Isopoh.Cryptography.SecureArray.dll create mode 100644 Aetheria.State.Verify/bin/Debug/net10.0/LiteNetLib.dll create mode 100644 Aetheria.State.Verify/bin/Debug/net10.0/MessagePack.Annotations.dll create mode 100644 Aetheria.State.Verify/bin/Debug/net10.0/MessagePack.dll create mode 100644 Aetheria.State.Verify/bin/Debug/net10.0/Microsoft.NET.StringTools.dll create mode 100644 Aetheria.State.Verify/bin/Debug/net10.0/R3.dll create mode 100644 Aetheria.State.Verify/obj/Aetheria.State.Verify.csproj.nuget.dgspec.json create mode 100644 Aetheria.State.Verify/obj/Aetheria.State.Verify.csproj.nuget.g.props create mode 100644 Aetheria.State.Verify/obj/Aetheria.State.Verify.csproj.nuget.g.targets create mode 100644 Aetheria.State.Verify/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs create mode 100644 Aetheria.State.Verify/obj/Debug/net10.0/Aetheria.4BA5618A.Up2Date create mode 100644 Aetheria.State.Verify/obj/Debug/net10.0/Aetheria.State.Verify.AssemblyInfo.cs create mode 100644 Aetheria.State.Verify/obj/Debug/net10.0/Aetheria.State.Verify.AssemblyInfoInputs.cache create mode 100644 Aetheria.State.Verify/obj/Debug/net10.0/Aetheria.State.Verify.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 Aetheria.State.Verify/obj/Debug/net10.0/Aetheria.State.Verify.GlobalUsings.g.cs create mode 100644 Aetheria.State.Verify/obj/Debug/net10.0/Aetheria.State.Verify.assets.cache create mode 100644 Aetheria.State.Verify/obj/Debug/net10.0/Aetheria.State.Verify.csproj.AssemblyReference.cache create mode 100644 Aetheria.State.Verify/obj/Debug/net10.0/Aetheria.State.Verify.csproj.CoreCompileInputs.cache create mode 100644 Aetheria.State.Verify/obj/Debug/net10.0/Aetheria.State.Verify.csproj.FileListAbsolute.txt create mode 100644 Aetheria.State.Verify/obj/Debug/net10.0/Aetheria.State.Verify.dll create mode 100644 Aetheria.State.Verify/obj/Debug/net10.0/Aetheria.State.Verify.genruntimeconfig.cache create mode 100644 Aetheria.State.Verify/obj/Debug/net10.0/Aetheria.State.Verify.sourcelink.json create mode 100644 Aetheria.State.Verify/obj/Debug/net10.0/apphost.exe create mode 100644 Aetheria.State.Verify/obj/Debug/net10.0/ref/Aetheria.State.Verify.dll create mode 100644 Aetheria.State.Verify/obj/Debug/net10.0/refint/Aetheria.State.Verify.dll create mode 100644 Aetheria.State.Verify/obj/project.assets.json create mode 100644 Aetheria.State.Verify/obj/project.nuget.cache diff --git a/Aetheria.State.Verify/Aetheria.State.Verify.csproj b/Aetheria.State.Verify/Aetheria.State.Verify.csproj new file mode 100644 index 000000000..ca788873d --- /dev/null +++ b/Aetheria.State.Verify/Aetheria.State.Verify.csproj @@ -0,0 +1,13 @@ + + + Exe + net10.0 + enable + latest + enable + + + + + + diff --git a/Aetheria.State.Verify/Program.cs b/Aetheria.State.Verify/Program.cs new file mode 100644 index 000000000..878162f62 --- /dev/null +++ b/Aetheria.State.Verify/Program.cs @@ -0,0 +1,93 @@ +using Aetheria.State; +using Aetheria.State.Documents; + +var root = args.Length > 0 ? Path.GetFullPath(args[0]) : Directory.GetCurrentDirectory(); +var statePath = args.Length > 1 + ? Path.GetFullPath(args[1]) + : AetheriaStatePaths.ResolveDefaultStatePath(root); + +await using var node = await AetheriaStateNode.OpenAsync(statePath, "aetheria-state-verify"); + +var ledger = await node.GetMigrationLedgerAsync() + ?? throw new InvalidOperationException("Missing typed migration ledger."); +var quarantine = await node.GetLegacyCatalogQuarantineAsync() + ?? throw new InvalidOperationException("Missing legacy catalog quarantine document."); + +var items = node.Cache.GetAll().ToArray(); +var corporations = node.Cache.GetAll().ToArray(); +var nameFiles = node.Cache.GetAll().ToArray(); + +RequireCount(ledger, "aetheria.item_definition.v1", items.Length); +RequireCount(ledger, "aetheria.corporation.v1", corporations.Length); +RequireCount(ledger, "aetheria.name_file.v1", nameFiles.Length); + +if (items.Length == 0) +{ + throw new InvalidOperationException("Typed state has no item definitions."); +} + +if (corporations.Length == 0) +{ + throw new InvalidOperationException("Typed state has no corporations."); +} + +if (nameFiles.Length == 0) +{ + throw new InvalidOperationException("Typed state has no name files."); +} + +await RequireLegacyLookupAsync( + items[0].LegacyId, + () => node.GetItemDefinitionByLegacyIdAsync(items[0].LegacyId), + "item definition"); +await RequireLegacyLookupAsync( + corporations[0].LegacyId, + () => node.GetCorporationByLegacyIdAsync(corporations[0].LegacyId), + "corporation"); +await RequireLegacyLookupAsync( + nameFiles[0].LegacyId, + () => node.GetNameFileByLegacyIdAsync(nameFiles[0].LegacyId), + "name file"); + +if (string.IsNullOrWhiteSpace(quarantine.CatalogFingerprint)) +{ + throw new InvalidOperationException("Legacy catalog quarantine has no catalog fingerprint."); +} + +Console.WriteLine($"Aetheria typed state verify passed: {statePath}"); +Console.WriteLine($"Catalog fingerprint: {quarantine.CatalogFingerprint}"); +Console.WriteLine($"Item definitions: {items.Length}"); +Console.WriteLine($"Corporations: {corporations.Length}"); +Console.WriteLine($"Name files: {nameFiles.Length}"); + +static void RequireCount(AetheriaMigrationLedger ledger, string documentType, int actual) +{ + var expected = ledger.Counts.FirstOrDefault(count => count.DocumentType == documentType)?.Count; + if (expected == null) + { + throw new InvalidOperationException($"Migration ledger is missing count for {documentType}."); + } + + if (expected.Value != actual) + { + throw new InvalidOperationException( + $"Migration ledger count mismatch for {documentType}: ledger={expected.Value}, actual={actual}."); + } +} + +static async Task RequireLegacyLookupAsync( + string legacyId, + Func> lookup, + string label) where T : class +{ + if (string.IsNullOrWhiteSpace(legacyId)) + { + throw new InvalidOperationException($"Cannot verify {label}: legacy id is empty."); + } + + var value = await lookup().ConfigureAwait(false); + if (value == null) + { + throw new InvalidOperationException($"Typed legacy-id lookup failed for {label} {legacyId}."); + } +} diff --git a/Aetheria.State.Verify/bin/Debug/net10.0/Aetheria.State.Verify.deps.json b/Aetheria.State.Verify/bin/Debug/net10.0/Aetheria.State.Verify.deps.json new file mode 100644 index 000000000..a7ef8ed34 --- /dev/null +++ b/Aetheria.State.Verify/bin/Debug/net10.0/Aetheria.State.Verify.deps.json @@ -0,0 +1,293 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v10.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v10.0": { + "Aetheria.State.Verify/1.0.0": { + "dependencies": { + "Aetheria.State": "1.0.0" + }, + "runtime": { + "Aetheria.State.Verify.dll": {} + } + }, + "ConcurrentHashSet/1.3.0": { + "runtime": { + "lib/netstandard2.0/ConcurrentCollections.dll": { + "assemblyVersion": "1.3.0.0", + "fileVersion": "1.3.0.0" + } + } + }, + "Isopoh.Cryptography.Argon2/2.0.0": { + "dependencies": { + "Isopoh.Cryptography.Blake2b": "2.0.0", + "Isopoh.Cryptography.SecureArray": "2.0.0" + }, + "runtime": { + "lib/net7.0/Isopoh.Cryptography.Argon2.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.0.0.0" + } + } + }, + "Isopoh.Cryptography.Blake2b/2.0.0": { + "dependencies": { + "Isopoh.Cryptography.SecureArray": "2.0.0" + }, + "runtime": { + "lib/net7.0/Isopoh.Cryptography.Blake2b.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.0.0.0" + } + } + }, + "Isopoh.Cryptography.SecureArray/2.0.0": { + "runtime": { + "lib/net7.0/Isopoh.Cryptography.SecureArray.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.0.0.0" + } + } + }, + "LiteNetLib/2.1.2": { + "runtime": { + "lib/net8.0/LiteNetLib.dll": { + "assemblyVersion": "2.1.2.0", + "fileVersion": "2.1.2.0" + } + } + }, + "MessagePack/3.1.4": { + "dependencies": { + "MessagePack.Annotations": "3.1.4", + "Microsoft.NET.StringTools": "17.11.4" + }, + "runtime": { + "lib/net9.0/MessagePack.dll": { + "assemblyVersion": "3.1.4.0", + "fileVersion": "3.1.4.0" + } + } + }, + "MessagePack.Annotations/3.1.4": { + "runtime": { + "lib/netstandard2.0/MessagePack.Annotations.dll": { + "assemblyVersion": "3.1.4.0", + "fileVersion": "3.1.4.0" + } + } + }, + "Microsoft.NET.StringTools/17.11.4": { + "runtime": { + "lib/net8.0/Microsoft.NET.StringTools.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "17.11.4.40609" + } + } + }, + "R3/1.3.0": { + "runtime": { + "lib/net8.0/R3.dll": { + "assemblyVersion": "1.3.0.0", + "fileVersion": "1.3.0.0" + } + } + }, + "Aetheria.State/1.0.0": { + "dependencies": { + "GameCult.Caching": "1.0.3", + "GameCult.Caching.MessagePack": "1.0.3", + "GameCult.Mesh": "1.0.3", + "GameCult.Networking": "1.0.3" + }, + "runtime": { + "Aetheria.State.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.0.0.0" + } + } + }, + "GameCult.Caching/1.0.3": { + "dependencies": { + "ConcurrentHashSet": "1.3.0", + "GameCult.Logging": "1.0.3", + "R3": "1.3.0" + }, + "runtime": { + "GameCult.Caching.dll": { + "assemblyVersion": "1.0.3.0", + "fileVersion": "1.0.3.0" + } + } + }, + "GameCult.Caching.MessagePack/1.0.3": { + "dependencies": { + "GameCult.Caching": "1.0.3", + "GameCult.Caching.MessagePack.Analyzers": "1.0.3", + "MessagePack": "3.1.4" + }, + "runtime": { + "GameCult.Caching.MessagePack.dll": { + "assemblyVersion": "1.0.3.0", + "fileVersion": "1.0.3.0" + } + } + }, + "GameCult.Caching.MessagePack.Analyzers/1.0.3": { + "runtime": { + "GameCult.Caching.MessagePack.Analyzers.dll": { + "assemblyVersion": "1.0.3.0", + "fileVersion": "1.0.3.0" + } + } + }, + "GameCult.Logging/1.0.3": { + "runtime": { + "GameCult.Logging.dll": { + "assemblyVersion": "1.0.3.0", + "fileVersion": "1.0.3.0" + } + } + }, + "GameCult.Mesh/1.0.3": { + "dependencies": { + "GameCult.Caching": "1.0.3", + "GameCult.Caching.MessagePack": "1.0.3", + "GameCult.Networking": "1.0.3" + }, + "runtime": { + "GameCult.Mesh.dll": { + "assemblyVersion": "1.0.3.0", + "fileVersion": "1.0.3.0" + } + } + }, + "GameCult.Networking/1.0.3": { + "dependencies": { + "GameCult.Caching": "1.0.3", + "GameCult.Caching.MessagePack": "1.0.3", + "GameCult.Logging": "1.0.3", + "Isopoh.Cryptography.Argon2": "2.0.0", + "LiteNetLib": "2.1.2", + "MessagePack": "3.1.4", + "R3": "1.3.0" + }, + "runtime": { + "GameCult.Networking.dll": { + "assemblyVersion": "1.0.3.0", + "fileVersion": "1.0.3.0" + } + } + } + } + }, + "libraries": { + "Aetheria.State.Verify/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "ConcurrentHashSet/1.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-a30gfk4WDn2f7sOisXpko+CrQ7s5nL1ZWk4afnRwwRQHWPRrRSZpzn5Dz2YWpJtS90NJqkytQ/MkzHq4QYTIbg==", + "path": "concurrenthashset/1.3.0", + "hashPath": "concurrenthashset.1.3.0.nupkg.sha512" + }, + "Isopoh.Cryptography.Argon2/2.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-8ytWN19j+qARb/XYi7KkNMm4Z8zS6tfGgnsZ1N5ihbQ5LXfyL+uYowfJxtGW9TO0S8NM2q0BaTKGOtOlsrhclQ==", + "path": "isopoh.cryptography.argon2/2.0.0", + "hashPath": "isopoh.cryptography.argon2.2.0.0.nupkg.sha512" + }, + "Isopoh.Cryptography.Blake2b/2.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Co56bjSZV13fpvYHEN04qG8hqc0rKRm4os8iEgpJ/kujvt0pYtOVhj5J0Q7HBPbHwpcChRh2CjYVCGm4nw85VQ==", + "path": "isopoh.cryptography.blake2b/2.0.0", + "hashPath": "isopoh.cryptography.blake2b.2.0.0.nupkg.sha512" + }, + "Isopoh.Cryptography.SecureArray/2.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-oWbRv/BTztKJxKFr3FBurWBBCgE1+nUTm3pwtA3Yg7Xeo4wDpaLstAwqx8HeQG3/b9yOs2qykpqfbNPJ40McIw==", + "path": "isopoh.cryptography.securearray/2.0.0", + "hashPath": "isopoh.cryptography.securearray.2.0.0.nupkg.sha512" + }, + "LiteNetLib/2.1.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-+bmu7Vj+ik3xGX+qubsFuGSR8Pdri4Og7D9YAer83vHotkSHNLYL5bkZNgpvsK8GrcdNOUabZhqbYtmHu8as7A==", + "path": "litenetlib/2.1.2", + "hashPath": "litenetlib.2.1.2.nupkg.sha512" + }, + "MessagePack/3.1.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-BH0wlHWmVoZpbAPyyt2Awbq30C+ZsS3eHSkYdnyUAbqVJ22fAJDzn2xTieBeoT5QlcBzp61vHcv878YJGfi3mg==", + "path": "messagepack/3.1.4", + "hashPath": "messagepack.3.1.4.nupkg.sha512" + }, + "MessagePack.Annotations/3.1.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-aVWrDAkCdqxwQsz/q0ldPh2EFn48M99YUzE9OvZjMq2RNLKz4o2z88iGFvSvbMqOWRweRvKPHBJZe22PRqzslQ==", + "path": "messagepack.annotations/3.1.4", + "hashPath": "messagepack.annotations.3.1.4.nupkg.sha512" + }, + "Microsoft.NET.StringTools/17.11.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-mudqUHhNpeqIdJoUx2YDWZO/I9uEDYVowan89R6wsomfnUJQk6HteoQTlNjZDixhT2B4IXMkMtgZtoceIjLRmA==", + "path": "microsoft.net.stringtools/17.11.4", + "hashPath": "microsoft.net.stringtools.17.11.4.nupkg.sha512" + }, + "R3/1.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-c4bL37HGimYon/qfRTZOJE41M3cgdMJn/p4O5Jq+WHTJGNXUb1x2DlVI+iZk5phCBwq3ERfrgbaPu9WdG2OS+w==", + "path": "r3/1.3.0", + "hashPath": "r3.1.3.0.nupkg.sha512" + }, + "Aetheria.State/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "GameCult.Caching/1.0.3": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "GameCult.Caching.MessagePack/1.0.3": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "GameCult.Caching.MessagePack.Analyzers/1.0.3": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "GameCult.Logging/1.0.3": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "GameCult.Mesh/1.0.3": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "GameCult.Networking/1.0.3": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/Aetheria.State.Verify/bin/Debug/net10.0/Aetheria.State.Verify.dll b/Aetheria.State.Verify/bin/Debug/net10.0/Aetheria.State.Verify.dll new file mode 100644 index 000000000..e8e13402e --- /dev/null +++ b/Aetheria.State.Verify/bin/Debug/net10.0/Aetheria.State.Verify.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:10df2ef3b22ac10a7654a740984cdf31744fe43c42b66ed906d32f4f360272e0 +size 13824 diff --git a/Aetheria.State.Verify/bin/Debug/net10.0/Aetheria.State.Verify.exe b/Aetheria.State.Verify/bin/Debug/net10.0/Aetheria.State.Verify.exe new file mode 100644 index 0000000000000000000000000000000000000000..bbb9055237617d0f4903af1d9b7c3e8094502c06 GIT binary patch literal 162816 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�|!f@$qWJC7RmpD*g-8pA-{C-^=PTVw3MJFqY`m% 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 Sg#&2mZ+jx0{pa_-2mTk+6$yg? literal 0 HcmV?d00001 diff --git a/Aetheria.State.Verify/bin/Debug/net10.0/Aetheria.State.Verify.runtimeconfig.json b/Aetheria.State.Verify/bin/Debug/net10.0/Aetheria.State.Verify.runtimeconfig.json new file mode 100644 index 000000000..01e45192a --- /dev/null +++ b/Aetheria.State.Verify/bin/Debug/net10.0/Aetheria.State.Verify.runtimeconfig.json @@ -0,0 +1,12 @@ +{ + "runtimeOptions": { + "tfm": "net10.0", + "framework": { + "name": "Microsoft.NETCore.App", + "version": "10.0.0" + }, + "configProperties": { + "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false + } + } +} \ No newline at end of file diff --git a/Aetheria.State.Verify/bin/Debug/net10.0/Aetheria.State.dll b/Aetheria.State.Verify/bin/Debug/net10.0/Aetheria.State.dll new file mode 100644 index 000000000..adb84470b --- /dev/null +++ b/Aetheria.State.Verify/bin/Debug/net10.0/Aetheria.State.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce1dea4707abfa9035c5aaccd70dc511a12046b535cb924c2f4252d29c6d9712 +size 57344 diff --git a/Aetheria.State.Verify/bin/Debug/net10.0/ConcurrentCollections.dll b/Aetheria.State.Verify/bin/Debug/net10.0/ConcurrentCollections.dll new file mode 100644 index 000000000..362b7d8a2 --- /dev/null +++ b/Aetheria.State.Verify/bin/Debug/net10.0/ConcurrentCollections.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe768c5c4f8a2c109b4e0677d804fa655c1726c35957635f66dc1ed0b3fb7734 +size 13824 diff --git a/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Caching.MessagePack.Analyzers.dll b/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Caching.MessagePack.Analyzers.dll new file mode 100644 index 000000000..a918eb586 --- /dev/null +++ b/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Caching.MessagePack.Analyzers.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0aef8297578b1320f5077ae55692936eefc125484ecb46eed06f586e2a982fca +size 5120 diff --git a/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Caching.MessagePack.Analyzers.xml b/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Caching.MessagePack.Analyzers.xml new file mode 100644 index 000000000..effbe1082 --- /dev/null +++ b/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Caching.MessagePack.Analyzers.xml @@ -0,0 +1,13 @@ + + + + GameCult.Caching.MessagePack.Analyzers + + + + + Placeholder type for the analyzer packaging project. + + + + diff --git a/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Caching.MessagePack.dll b/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Caching.MessagePack.dll new file mode 100644 index 000000000..e804d4dc6 --- /dev/null +++ b/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Caching.MessagePack.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2ff9b60fdbdefb4192392b86523f0cf71cf5859d52aead99014b7d9cf1c7723 +size 25088 diff --git a/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Caching.MessagePack.xml b/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Caching.MessagePack.xml new file mode 100644 index 000000000..a6027a462 --- /dev/null +++ b/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Caching.MessagePack.xml @@ -0,0 +1,226 @@ + + + + GameCult.Caching.MessagePack + + + + + Options for opening a CultCache over the canonical single-file MessagePack backing store. + + + + + Gets or sets the document registry to use. When omitted, the shared registry is used. + + + + + Gets or sets whether the cache should pull the existing snapshot during open. + + + + + Gets or sets whether the cache should flush attached stores when disposed. + + + + + Gets or sets whether the backing store should flush when disposed. + + + + + Gets or sets an optional callback used to customize the cache before opening. + + + + + Gets or sets an optional callback used to customize the backing store before opening. + + + + + Gets or sets whether the cache should use a paged directory store instead of one whole-file snapshot. + + + + + Gets or sets the directory used for paged records. When omitted, the store uses the file path plus ".records". + + + + + Gets or sets an optional callback used to customize the directory backing store before opening. + + + + + Friendly MessagePack entrypoints for opening a CultCache with the canonical backing store. + + + + + Creates a cache with the canonical single-file MessagePack backing store attached. + + + + + Creates a cache with the canonical single-file MessagePack backing store attached and optionally pulls the on-disk snapshot. + + + + + MessagePack resolver for CultCache-specific value types. + + + + + Gets the shared resolver instance. + + + + + Gets a formatter for the requested type, when this resolver owns it. + + + + + MessagePack serialization helpers for CultCache documents and backing stores. + + + + + Gets the shared MessagePack serializer options for CultCache payloads. + + + + + Serializes a typed value with the CultCache MessagePack options. + + + + + Deserializes a typed value with the CultCache MessagePack options. + + + + + Serializes a value whose document type is known at runtime. + + + + + Deserializes a value whose document type is known at runtime. + + + + + Serializes one persisted store record. + + + + + Deserializes one persisted store record. + + + + + Serializes a schema catalog. + + + + + Deserializes a schema catalog. + + + + + Serializes a complete persisted store snapshot. + + + + + Deserializes a complete persisted store snapshot. + + + + + Single-file CultCache backing store that persists snapshots as MessagePack. + + + + + Creates a MessagePack single-file backing store. + + + + + Serializes a store snapshot. + + + + + Deserializes a store snapshot. + + + + + Serializes one document payload. + + + + + Deserializes one document payload. + + + + + MessagePack backing store that keeps a small schema manifest hot and stores each record as its own cold file. + + + + + Creates a paged MessagePack backing store. + + + + + Gets the default record directory path for a manifest path. + + + + + + + + + + + + + + + + + Serializes typed CultCache record references as their persisted key strings. + + + + + Writes a typed record reference to MessagePack. + + + + + Reads a typed record reference from MessagePack. + + + + A MessagePack resolver that uses generated formatters for types in this assembly. + + + An instance of this resolver that only returns formatters specifically generated for types in this assembly. + + + diff --git a/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Caching.dll b/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Caching.dll new file mode 100644 index 000000000..e9456bb80 --- /dev/null +++ b/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Caching.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8122f77d7e095dc60fe6a11c5504af887019e57cdfdf7ae8ebe569263ac6d6c6 +size 82944 diff --git a/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Caching.xml b/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Caching.xml new file mode 100644 index 000000000..9554681e9 --- /dev/null +++ b/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Caching.xml @@ -0,0 +1,1138 @@ + + + + GameCult.Caching + + + + + Persisted schema metadata embedded in a CultCache backing store. + + + + + Gets or sets the content-derived schema identifier. + + + + + Gets or sets the stable schema name. + + + + + Gets or sets the schema version string. + + + + + Gets or sets the canonical schema content hash. + + + + + Gets or sets the canonical schema description. + + + + + Gets or sets schema identifiers compatible with this entry. + + + + + Gets or sets the persisted member descriptors used for compatibility checks. + + + + + Persisted catalog entry describing one schema member. + + + + + Gets or sets the persisted slot number. + + + + + Gets or sets the member name. + + + + + Gets or sets the persisted type name. + + + + + Gets or sets whether the member is a reference. + + + + + Gets or sets whether the member stores many values. + + + + + Gets or sets the referenced schema name, when the member is a reference. + + + + + Gets or sets whether the member provides the name lookup. + + + + + Gets or sets the index alias, when the member participates in lookups. + + + + + Persisted serialized document record. + + + + + Gets or sets the persisted record key. + + + + + Gets or sets the schema identifier used to deserialize the payload. + + + + + Gets or sets the storage timestamp. + + + + + Gets or sets the serialized document payload. + + + + + Complete snapshot persisted by a single-file CultCache backing store. + + + + + Gets or sets the backing store format version. + + + + + Gets or sets the embedded schema catalog. + + + + + Gets or sets the persisted records. + + + + + Classifies how a persisted schema mapped onto the local document registry. + + + + + The persisted schema matched the local schema exactly. + + + + + The persisted schema required a compatible soft-migration path. + + + + + Describes one schema-resolution warning emitted during load. + + + + + Gets or sets the stable warning code. + + + + + Gets or sets the human-readable warning text. + + + + + Reports how one persisted schema entry resolved against the local schema catalog. + + + + + Gets or sets the persisted schema identifier. + + + + + Gets or sets the local schema identifier selected for reading. + + + + + Gets or sets the persisted schema name. + + + + + Gets or sets the local schema name. + + + + + Gets or sets how the persisted schema matched locally. + + + + + Gets or sets the persisted member slots ignored by the local reader. + + + + + Gets or sets the local member slots defaulted because the persisted record did not contain them. + + + + + Gets or sets emitted migration warnings. + + + + + Runtime descriptor for a CultCache document type. + + + + + Gets the CLR document type. + + + + + Gets the stable schema name. + + + + + Gets the schema version string. + + + + + Gets the content-derived schema identifier. + + + + + Gets the canonical schema content hash. + + + + + Gets the canonical schema description. + + + + + Gets whether this document type stores one global record. + + + + + Gets the document name member, if any. + + + + + Gets the generated payload serializer, if one is available. + + + + + Gets the generated payload deserializer, if one is available. + + + + + Converts this descriptor into a persisted schema catalog entry. + + + + + Stores a resolved document together with its descriptor and key. + + + + + Creates a stored document wrapper. + + + + + Gets the record key. + + + + + Gets the storage timestamp. + + + + + Gets the document descriptor. + + + + + Gets the document instance. + + + + + Discovers, indexes, and resolves CultCache document descriptors. + + + + + Gets the shared process-wide document registry. + + + + + Creates a registry and discovers currently loaded document metadata. + + + + + Gets all known document descriptors. + + + + + Rebuilds the registry from generated metadata and reflected document attributes. + + + + + Gets the descriptor for a document type, building it when needed. + + + + + Gets the descriptor for a document type. + + + + + Gets a descriptor by its schema identifier. + + + + + Resolves a persisted schema identifier against the local registry and embedded catalog. + + + + + Resolves a persisted schema identifier and returns the selected descriptor with migration diagnostics. + + + + + In-memory document cache with pluggable persisted backing stores. + + + + + Creates a cache using the supplied document registry or the shared registry. + + + + + Gets or sets the cache logger. + + + + + Gets whether the cache currently holds unflushed mutations in any attached backing store or only in memory. + + + + + Gets the UTC timestamp of the last successful flush across all attached backing stores. + + + + + Gets or sets whether disposing the cache should flush attached dirty backing stores first. + + + + + Raised when a backing store adds, updates, or removes a document. + + + + + Gets attached backing stores in registration order. + + + + + Gets all document instances currently held by the cache. + + + + + Gets all stored document records currently held by the cache. + + + + + Gets the document registry used by this cache. + + + + + Opens a reactive POCO presentation for one cache-managed document. + + + + + Watches all local cache changes assignable to the requested document type. + + + + + Watches one local cache record. + + + + + Gets the cache-owned structure-of-arrays table for a document type. + + + + + Attaches a backing store to this cache. + + + + + Pulls all documents from every attached backing store. + + + + + Flushes all attached backing stores. + + + + + Flushes all attached backing stores. + + + + + Flushes one attached backing store. + + + + + Flushes attached backing stores at a lifecycle boundary such as shutdown or assembly reload. + + + + + Flushes attached backing stores at a lifecycle boundary such as shutdown or assembly reload. + + + + + Adds or replaces a typed document and returns its record handle. + + + + + Adds or replaces a typed document and returns its record handle. + + + + + Adds or replaces a document whose concrete type is known at runtime. + + + + + Gets the record handle for a document instance, if it is tracked. + + + + + Gets a document by record key. + + + + + Gets a typed document by record key. + + + + + Tries to get a typed document by record key. + + + + + Gets all cached documents assignable to the requested type. + + + + + Gets the global document for the requested type, if one exists. + + + + + Gets a typed document by its CultName value. + + + + + Tries to get a typed document by its CultName value. + + + + + Gets a typed document by an indexed value. + + + + + Tries to get a typed document by an indexed value. + + + + + Resolves a typed document reference against this cache. + + + + + Removes a document by typed handle. + + + + + Removes a document by cache-owned record key. + + + + + Removes a document by typed handle. + + + + + Disposes attached disposable backing stores. + + + + + Base class for CultCache persistence adapters. + + + + + Gets the attached document registry. + + + + + Gets the backing store entries by record key. + + + + + Gets or sets the backing store logger. + + + + + Gets whether the backing store holds staged mutations not yet durably flushed. + + + + + Gets the UTC timestamp of the last successful durable flush. + + + + + Gets or sets whether disposing the backing store should flush staged mutations first. + + + + + Gets schema migration reports emitted during the most recent pull. + + + + + Publishes documents added by the backing store. + + + + + Publishes documents updated by the backing store. + + + + + Publishes documents deleted by the backing store. + + + + + Pulls all persisted records into the backing store. + + + + + Pushes one stored document into the backing store. + + + + + Deletes one stored document from the backing store. + + + + + Persists all current backing store entries. + + + + + Releases backing store event subjects. + + + + + Converts a stored document into a persisted record. + + + + + Converts a persisted record into a stored document. + + + + + Records schema migration reports captured during a pull. + + + + + Marks the backing store as durably flushed. + + + + + Base class for backing stores that persist a complete snapshot to one file. + + + + + Creates a single-file backing store. + + + + + Gets the file used by this backing store. + + + + + Serializes a full store snapshot. + + + + + Deserializes a full store snapshot. + + + + + Serializes one document payload. + + + + + Deserializes one document payload. + + + + + Loads every persisted record from disk. + + + + + Stages one stored document in memory. + + + + + Removes one staged document. + + + + + Writes the staged snapshot to disk. + + + + + Marks a type as a CultCache document with a stable schema name and version. + + + + + Creates a document marker for the supplied schema identity. + + + + + Gets the stable schema name used by CultCache and CultNet. + + + + + Gets the semantic schema version string for this document shape. + + + + + Marks a document type as having one global record in a cache. + + + + + Marks the member that supplies the human-readable document name. + + + + + Marks a member as an indexed lookup value. + + + + + Creates an index marker with an optional alias. + + + + + Gets the external index alias, or null to use the member name. + + + + + Marks a member as a reference to another CultCache document. + + + + + Creates a document reference marker. + + + + + Gets the explicit referenced document type, when one is required. + + + + + Gets whether this member stores many references rather than one reference. + + + + + Identifies a record inside a CultCache backing store. + + + + + Creates a record key from its persisted string value. + + + + + Gets the persisted key value. + + + + + Returns the persisted key value. + + + + + Returns whether this key and another key contain the same persisted value. + + + + + Returns whether this key and another object contain the same persisted value. + + + + + Returns a hash code for the persisted key value. + + + + + Carries the persisted record key for a typed document. + + + + + Creates a typed document handle. + + + + + Gets the persisted record key. + + + + + Returns the persisted key value. + + + + + Stores a typed reference to a CultCache document. + + + + + Creates a typed document reference. + + + + + Gets the referenced record key. + + + + + Resolves the referenced record against the provided cache. + + + + + Returns the referenced key value. + + + + + Registers a generated CultCache document metadata provider with an assembly. + + + + + Creates an assembly metadata provider registration. + + + + + Gets the provider type that can create generated document definitions. + + + + + Supplies generated CultCache document metadata for an assembly. + + + + + Gets the generated document definitions exposed by the provider. + + + + + Describes one generated CultCache document contract. + + + + + Creates a generated document contract definition. + + + + + Gets the CLR document type. + + + + + Gets the stable CultCache schema name. + + + + + Gets the schema version string. + + + + + Gets whether this document type stores one global record. + + + + + Gets the member used as the document name, if any. + + + + + Gets the generated name accessor, if any. + + + + + Gets the generated payload serializer, if one was emitted. + + + + + Gets the generated payload deserializer, if one was emitted. + + + + + Gets the generated index accessors. + + + + + Gets the generated persisted member definitions. + + + + + Describes a generated accessor for one CultCache index. + + + + + Creates a generated index accessor. + + + + + Gets the index alias. + + + + + Gets the function that extracts the index value. + + + + + Describes one generated persisted document member. + + + + + Creates a generated persisted member definition. + + + + + Gets the CLR member name. + + + + + Gets the persisted slot number. + + + + + Gets the persisted type name. + + + + + Gets whether this member stores a document reference. + + + + + Gets whether this member stores many references. + + + + + Gets the target schema name for reference members. + + + + + Gets whether this member is the document name. + + + + + Gets the index alias for indexed members. + + + + + Describes how a CultCache-managed document changed. + + + + + A document was added. + + + + + A document was updated. + + + + + A document was removed. + + + + + One reactive CultCache document change. + + + + + Creates a document change. + + + + + Gets the change kind. + + + + + Gets the document record key. + + + + + Gets the current POCO presentation, when present. + + + + + Gets the previous POCO presentation, when present. + + + + + Reactive POCO presentation for one CultCache-managed document. + + + + + Creates a managed document presentation. + + + + + Gets the document record key. + + + + + Gets the current POCO presentation. + + + + + Watches committed values for this document. + + + + + Commits the current POCO value through the owner-supplied commit path. + + + + + Replaces the current value through the owner-supplied commit path. + + + + + CPU-local structure-of-arrays table owned by CultCache for one document type. + + + + + Gets record keys in row order. + + + + + Gets POCO presentations in row order. + + + + + Gets the row count. + + + + + Gets a contiguous unmanaged field/property column. + + + + + Contiguous typed SoA column. + + + + + Gets the column name. + + + + + Gets the backing array. + + + + + Gets the backing array as a span. + + + + diff --git a/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Logging.dll b/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Logging.dll new file mode 100644 index 000000000..586324a27 --- /dev/null +++ b/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Logging.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:baf021c02d7b24d4ea22eeab835e8f1074b7fa7de7051a07394d83d0ecb246b0 +size 6656 diff --git a/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Logging.xml b/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Logging.xml new file mode 100644 index 000000000..2f7996996 --- /dev/null +++ b/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Logging.xml @@ -0,0 +1,94 @@ + + + + GameCult.Logging + + + + + Writes log messages to the process console. + + + + + + + + + + + + + + + + + Appends timestamped log entries to a file on disk. + + + + + Initializes a new file-backed logger. + + The path to the log file to append to. + + + + + + + + + + + + + + + + Defines the logging contract used across CultLib components. + + + + + Writes an informational message. + + The message to record. + + + + Writes a warning message. + + The message to record. + + + + Writes an error message. + + The message to record. + + + + Writes a debug message. + + The message to record. + + + + Provides a no-op logger implementation. + + + + + + + + + + + + + + + + diff --git a/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Mesh.dll b/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Mesh.dll new file mode 100644 index 000000000..c2e992697 --- /dev/null +++ b/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Mesh.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:efb056dbf2c901e672ea66578a734e68477214c59ef678593c5d0e44dc7d1379 +size 75776 diff --git a/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Mesh.xml b/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Mesh.xml new file mode 100644 index 000000000..a6164bc30 --- /dev/null +++ b/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Mesh.xml @@ -0,0 +1,849 @@ + + + + GameCult.Mesh + + + + + Options for creating a local CultMesh node. + + + + + Gets or sets the cache-open options used for the underlying CultCache. + + + + + Gets or sets the server security configuration. When omitted, development defaults are used. + + + + + Gets or sets whether the server should start immediately after creation. + + + + + Gets or sets the mesh database sharding options used for the hosted CultCache. + + + + + Gets or sets whether CultMesh should attach a file-backed authoritative shard-log store when none is supplied. + + + + + Gets or sets the directory used for file-backed authoritative shard logs. + + + + + Gets or sets the database server bridge options used for shard routing and forwarding. + + + + + Gets or sets an optional callback used to customize the server before start. + + + + + A locally hosted CultMesh node over CultCache, CultNet transport, and the mesh database facade. + + + + + Gets the durable cache used by the node. + + + + + Gets the canonical single-file MessagePack store, when one is attached. + + + + + Gets the underlying CultNet server. + + + + + Gets the distributed realtime database facade. + + + + + Gets the schema-v0 server bridge for distributed database messages. + + + + + Starts the underlying server. + + + + + Flushes the durable cache. + + + + + + + + Public CultMesh entrypoints. + + + + + Creates a local CultMesh node with a durable CultCache and the canonical MessagePack backing store. + + + + + Creates and starts a local CultMesh node with development-friendly defaults. + + + + + Creates a local reactive catalog for discovered Verses. + + + + + Creates a local reactive catalog for discovered peers. + + + + + Creates a local authority lease catalog. + + + + + Creates a local stream catalog for zero-copy-oriented audio, video, tensor, and byte frame streams. + + + + + Creates a committer for writing quorum simulation facts to a mesh database. + + + + + Creates a gameplay-facing session facade over a CultMesh node. + + + + + Attaches Verse discovery responses to a CultMesh node. + + + + + Creates a client for fetching Verse catalogs from discovery endpoints. + + + + + Attaches peer exchange responses to a CultMesh node. + + + + + Creates a client for fetching peer cards from peer exchange endpoints. + + + + + Creates a CultNet client configured for CultMesh use. + + + + + Creates and connects a CultNet client to a CultMesh node. + + + + + Grants one peer authority to perform roles for a Verse over a bounded interval. + + + + + Creates an authority lease. + + + + Gets the stable lease id. + + + Gets the Verse id governed by the lease. + + + Gets the peer id receiving authority. + + + Gets the roles granted by this lease. + + + Gets shard ids covered by this lease. Empty means every shard in the Verse. + + + Gets the runtime that issued the lease. + + + Gets the first timestamp when the lease is valid. + + + Gets the timestamp when the lease expires. + + + Gets an optional signature over the lease. + + + + Returns whether this lease is valid at the supplied time. + + + + + Returns whether this lease covers a peer card, role, and shard. + + + + + Local authority lease catalog. + + + + Gets all known leases. + + + Adds or replaces an authority lease. + + + Gets a lease by id, if known. + + + + Returns whether a peer card is authorized for a role and optional shard. + + + + + Options for creating a gameplay-facing CultMesh session facade. + + + + + Gets or sets the Verse catalog used by the session. + + + + + Gets or sets the peer catalog used by the session. + + + + + Gets or sets the authority lease catalog used by the session. + + + + + Gets or sets simulation consensus options. + + + + + Gets or sets whether incoming observation messages should update the session hub. + + + + + Gets or sets whether the node should answer Verse catalog requests from the session catalog. + + + + + Gets or sets whether the node should answer peer exchange requests from the session peer catalog. + + + + + Gameplay-facing facade over common CultMesh runtime pieces. + + + + + Creates a game session facade. + + + + + Gets the underlying node. + + + + + Gets the session Verse catalog. + + + + + Gets the session peer catalog. + + + + + Gets the session authority lease catalog. + + + + + Gets the session simulation observation hub. + + + + + Gets the session simulation fact committer. + + + + + Watches consensus candidate updates. + + + + + Watches committed simulation facts. + + + + + Applies a local client prediction through the underlying database. + + + + + Submits one witness observation and returns the current candidates for that subject. + + + + + Submits one witness observation and commits any new quorum facts it creates. + + + + + Commits quorum candidates that have not already been committed by this session. + + + + + + + + Well-known CultMesh peer roles. + + + + Peer can answer discovery requests. + + + Peer can serve authoritative shard logs. + + + Peer can serve replicated shard logs. + + + Peer can serve read traffic. + + + Peer can observe simulation facts. + + + + Candidate peer contact information for a Verse. + + + + + Creates a peer card. + + + + Gets the stable peer id. + + + Gets the Verse id this peer participates in. + + + Gets reachable endpoints. + + + Gets advertised roles. + + + Gets shard ids this peer can serve or observe. + + + Gets an optional region/locality label. + + + Gets the authority lease id, when present. + + + Gets the expiry timestamp for this card. + + + Gets an optional signature over the card. + + + + Returns whether the card advertises a role. + + + + + Conversion helpers for CultMesh peer exchange messages. + + + + + Converts a peer card to its schema-v0 wire shape. + + + + + Converts a wire peer card to the local public API shape. + + + + + Reactive local catalog for discovered CultMesh peers. + + + + Gets all known peers. + + + Watches peer card updates. + + + Adds or replaces a peer card. + + + Adds or replaces peer cards from a wire response. + + + Finds peers by Verse and optional role. + + + + + + + Answers CultMesh peer exchange requests from a local peer catalog. + + + + + Creates and attaches a peer exchange bridge. + + + + + Creates a peer exchange response for a request. + + + + + + + + Options for schema-v0 CultMesh peer exchange clients. + + + + + Gets or sets client security options used to connect to peer exchange endpoints. + + + + + Gets or sets how long to wait for a connection before failing. + + + + + Gets or sets how long to wait for a peer exchange response before failing. + + + + + Gets or sets a callback used to customize each ephemeral exchange client. + + + + + Fetches peer cards from CultMesh peers. + + + + + Creates a peer exchange client. + + + + + Fetches peer cards from one endpoint. + + + + + Fetches peer cards from endpoints and upserts every response into a local peer catalog. + + + + + Committed simulation fact derived from witness consensus. + + + + + Stable fact identifier. + + + + + Shard containing the simulation. + + + + + Shard authority epoch observed by witnesses. + + + + + Simulation frame or tick. + + + + + Subject the fact is about. + + + + + Fact kind, such as hit, collision, or ownership. + + + + + Hash of the accepted claim. + + + + + Optional readable or app-specific claim detail. + + + + + Number of distinct witnesses supporting the fact. + + + + + Supporting witness weight. + + + + + Total observed weight for the same subject/frame/kind. + + + + + Support divided by total observed weight. + + + + + Commit timestamp. + + + + + Builds a deterministic record key for a simulation fact. + + + + + Builds a stable fact id for a consensus candidate. + + + + + Creates a committed fact document from a quorum candidate. + + + + + Commits quorum simulation candidates into the CultMesh database. + + + + + Creates a simulation fact committer. + + + + + Commits a quorum candidate as a simulation fact document. + + + + + Describes how a CultMesh Verse makes authority decisions. + + + + + A known operator cluster is authoritative for committed world state. + + + + + Regional operators share authority for lower latency and availability. + + + + + Peers participate directly in authority decisions. + + + + + The Verse follows another Verse and applies declared overlays. + + + + + Declares transport and rules compatibility for a Verse. + + + + + Creates compatibility metadata. + + + + + Gets the CultMesh/CultNet transport compatibility version. + + + + + Gets the stable rules hash. + + + + + Gets Verse ids this Verse can transfer from or subscribe to. + + + + + Gets plugin ids required to enter this Verse. + + + + + Gets plugin ids supported but not required by this Verse. + + + + + Describes one CultMesh Verse: a rule-bearing consensus graph. + + + + + Creates a Verse descriptor. + + + + + Gets the stable Verse id. + + + + + Gets the human-facing Verse name. + + + + + Gets the authority model used by this Verse. + + + + + Gets compatibility metadata for transport, rules, and plugins. + + + + + Gets discovery endpoints for nodes serving this Verse. + + + + + Gets known authoritative runtime ids, when authority is cluster-shaped. + + + + + Gets the parent Verse id for subscribed overlays or branches. + + + + + Gets optional public description. + + + + + Returns whether this Verse can accept transfer from another Verse. + + + + + Computes a stable rules hash from ordered rules/plugin parts. + + + + + Reactive local catalog for discovered CultMesh Verses. + + + + + Gets all known Verses. + + + + + Watches Verse discovery updates. + + + + + Adds or replaces a discovered Verse. + + + + + Adds or replaces Verses from a wire catalog response. + + + + + Gets a Verse by id, if known. + + + + + Gets known Verses that can accept transfer from the supplied source Verse. + + + + + + + + Conversion helpers for CultMesh Verse wire messages. + + + + + Converts a local Verse descriptor to its schema-v0 wire shape. + + + + + Converts a schema-v0 Verse descriptor to the local public API shape. + + + + + Answers CultMesh Verse discovery requests from a local Verse catalog. + + + + + Creates and attaches a Verse discovery bridge. + + + + + Creates a Verse catalog response for a request. + + + + + + + + Options for schema-v0 CultMesh Verse discovery clients. + + + + + Gets or sets client security options used to connect to discovery endpoints. + + + + + Gets or sets how long to wait for a connection before failing. + + + + + Gets or sets how long to wait for a discovery response before failing. + + + + + Gets or sets a callback used to customize each ephemeral discovery client. + + + + + Fetches CultMesh Verse catalogs from discovery endpoints. + + + + + Creates a Verse discovery client. + + + + + Fetches a Verse catalog response from one discovery endpoint. + + + + + Fetches Verse catalogs from endpoints and upserts every response into a local catalog. + + + + diff --git a/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Networking.dll b/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Networking.dll new file mode 100644 index 000000000..817add6e0 --- /dev/null +++ b/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Networking.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c60ae6f62d7be5982550e5840d0fe2c5ec9872bbbabfd729301dfc166bf6778 +size 332800 diff --git a/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Networking.xml b/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Networking.xml new file mode 100644 index 000000000..579c68585 --- /dev/null +++ b/Aetheria.State.Verify/bin/Debug/net10.0/GameCult.Networking.xml @@ -0,0 +1,3737 @@ + + + + GameCult.Networking + + + + + Describes the client's reconnect posture. + + + + + The client is connected or otherwise not trying to reconnect. + + + + + The client is waiting for the next reconnect attempt. + + + + + The client is actively attempting a reconnect. + + + + + Provides client-side connection, authentication, and message dispatch logic. + + + + + Raised when the client encounters a user-visible error. + + + + + Raised when reconnect state changes. + + + + + Gets or sets the logger used by the client. + + + + + Gets the last reported round-trip latency in milliseconds. + + + + + Gets the current reconnect posture exposed to consumers. + + + + + Gets or sets whether raw payload bodies may be logged for diagnostics. + + + + + Gets or sets whether CultNet schema-v0 messages may be sent before user session verification. + + + + + Gets a value indicating whether the client currently has a verified session. + + + + + Gets a value indicating whether the network manager has been created. + + + + + Initializes a new client instance. + + Validated client security configuration. This must be provided explicitly by the caller. + + + + Sends a message when the client is connected and authorized to do so. + + The message type. + The message to send. + + + + Sends a modern CultNet schema-v0 message when the client is connected and authorized. + + + + + Removes all registered message listeners. + + + + + Adds a listener for a specific message type. + + The message type to subscribe to. + The callback to invoke when the message is received. + + + + Adds a listener for a specific message type. + + + + + Adds a listener for a modern CultNet schema-v0 message type. + + + + + Adds a listener for a modern CultNet schema-v0 message type. + + + + + Removes a previously registered listener for a specific message type. + + The message type to unsubscribe from. + The callback to remove. + + + + Removes a previously registered listener for a specific message type. + + + + + Removes a previously registered modern CultNet schema-v0 listener. + + + + + Removes a previously registered modern CultNet schema-v0 listener. + + + + + Sends a login request. + + The email address or username. + The plaintext password. + + + + Sends a registration request. + + The email address for the new account. + The requested username. + The plaintext password. + + + + Connects the client to a server and starts polling LiteNetLib events. + + The remote host name or IP address. + The remote server port. + + + + Disconnects the client and suppresses automatic reconnect. + + + + + + + + Carries the client-side networking configuration required to talk to a server. + + + + + Shared LiteNetLib connection key and encryption seed. + + + + + Initializes a new client security configuration. + + The shared connection key used by both client and server. + + + + Creates a deterministic development-only configuration. + + + + + Describes the kind of domain change observed through a distributed CultCache surface. + + + + + A document was added. + + + + + A document was updated. + + + + + A document was removed. + + + + + A document was accepted through compatible schema migration. + + + + + A document change was rejected. + + + + + A document was applied locally before authoritative commit. + + + + + A predicted document was replaced by the authoritative committed state. + + + + + Declares which documents this runtime may predict locally before authoritative commit. + + + + + Creates a client authority scope. + + + + + Gets the runtime that owns authoring for this scope. + + + + + Gets the schema ids governed by this scope. Empty means all schemas. + + + + + Gets the optional record-key prefix governed by this scope. + + + + + Describes one shard owned or observed by a CultNet database surface. + + + + + Creates a shard descriptor. + + + + + Gets the stable shard identifier. + + + + + Gets the runtime that currently owns writes for this shard. + + + + + Gets the monotonic shard authority epoch. + + + + + Gets whether the local database instance is authoritative for writes to this shard. + + + + + Gets the schema ids governed by this shard. Empty means all schemas. + + + + + Gets the optional record-key prefix governed by this shard. + + + + + Gets endpoints that can accept authoritative writes for this shard. + + + + + Gets endpoints that replicate authoritative shard mutations. + + + + + Gets endpoints intended for low-latency read and subscription traffic. + + + + + Gets an optional locality label for this shard owner. + + + + + Creates a primary shard that accepts every schema and key. + + + + + Creates a read-only shard descriptor. + + + + + Options for creating a distributed CultCache database surface. + + + + + Gets or sets the local runtime id advertised as shard owner for default primary shards. + + + + + Gets or sets explicit shard descriptors. When omitted, this instance owns one primary shard for all records. + + + + + Gets or sets document scopes this runtime may predict before authoritative commit. + + + + + Gets or sets the document registry used to create and apply raw CultNet document messages. + + + + + Gets or sets the durable store for accepted shard mutation logs. + + + + + A typed domain change emitted by a CultNet database surface. + + + + + Creates a database change. + + + + + Gets the change kind. + + + + + Gets the changed record key. + + + + + Gets the schema id of the changed document. + + + + + Gets the shard that accepted or rejected the change. + + + + + Gets the current document for added and updated events. + + + + + Gets the previous document for updated and removed events. + + + + + Gets an optional diagnostic message. + + + + + One ordered mutation accepted for a shard. + + + + + Creates a shard mutation log entry. + + + + + Gets the shard id. + + + + + Gets the shard epoch. + + + + + Gets the per-shard mutation sequence. + + + + + Gets the commit timestamp. + + + + + Gets the mutation kind. + + + + + Gets the schema id. + + + + + Gets the record key. + + + + + Gets the current document, when present. + + + + + Gets the previous document, when present. + + + + + Raised when a database write targets a shard this node does not own. + + + + + Creates a shard authority exception. + + + + + Gets the shard that rejected the write. + + + + + Gets the machine-readable authority rejection reason. + + + + + Database-style CultNet facade over a CultCache shard set. + + + + + Creates a database surface over a CultCache instance. + + + + + Gets the local cache backing this database surface. + + + + + Gets the document registry used by the raw CultNet lane. + + + + + Gets the shard map known to this database surface. + + + + + Gets the document scopes this runtime may predict before authoritative commit. + + + + + Gets mutation log entries for a shard after the supplied sequence. + + + + + Gets replica catch-up log entries for a shard after the supplied sequence. + + + + + Gets the highest retained-log sequence that has been compacted away for a shard. + + + + + Gets the latest known shard-log sequence for a shard. + + + + + Creates a raw document snapshot bounded to one shard. + + + + + Applies a shard-bounded snapshot and advances the replica cursor to its represented sequence. + + + + + Gets the last replicated sequence applied for a shard. + + + + + Creates a shard catalog response for optional schema/key filters. + + + + + Resolves the shard that governs the supplied schema and key. + + + + + Gets a document by key. + + + + + Opens a reactive POCO presentation for one distributed CultCache document. + + + + + Adds or replaces a document at a specific key. + + + + + Applies a locally predicted document for a client-owned input scope. + + + + + Deletes a document by key. + + + + + Applies a raw document mutation after checking shard authority. + + + + + Applies a raw document delete after checking shard authority. + + + + + Applies committed shard-log entries from an authoritative peer. + + + + + Watches all changes assignable to the requested document type. + + + + + Watches all typed domain changes as boxed change objects. + + + + + Watches one record. + + + + + Watches the global record for a document type. + + + + + Watches changes for a named document. + + + + + Watches changes for the current document mapped by an indexed value. + + + + + Releases database subscriptions. + + + + + Routes CultNet schema-v0 document messages through a . + + + + + Creates and attaches a database message bridge to a server. + + + + + Gets the database used by this bridge. + + + + + Applies a raw put message through the database shard policy. + + + + + Applies a raw delete message through the database shard policy. + + + + + Creates a raw snapshot response from the database cache. + + + + + Creates a shard catalog response from the database shard map. + + + + + Creates a shard mutation-log response from the database log. + + + + + Detaches handlers from the server. + + + + + Attempts to forward a rejected raw put to the shard owner. + + + + + Attempts to forward a rejected raw delete to the shard owner. + + + + + Optional metadata applied when creating CultNet document messages. + + + + + Gets or sets an explicit storage timestamp. + + + + + Gets or sets the runtime that produced the document. + + + + + Gets or sets the agent that produced the document. + + + + + Gets or sets the role that produced the document. + + + + + Gets or sets optional document tags. + + + + + Binds a CultCache document type to CultNet payload serialization. + + + + + Gets the bound document type. + + + + + Gets the bound schema identifier. + + + + + Gets the payload serializer. + + + + + Gets the payload deserializer. + + + + + Creates a document binding for a typed CultCache document. + + + + + Creates and applies CultNet messages that replicate CultCache documents. + + + + + Creates a document registry with optional bindings. + + + + + Registers a document binding. + + + + + Gets a binding by schema identifier. + + + + + Gets a binding by CLR document type. + + + + + Creates a document delete message. + + + + + Creates a raw document put message for a typed document. + + + + + Creates a snapshot request message. + + + + + Creates a raw snapshot response from the cache. + + + + + Applies a raw document put message to a cache. + + + + + Applies a raw document put message and returns the typed document. + + + + + Applies all documents from a raw snapshot response. + + + + + Applies all typed documents from a raw snapshot response. + + + + + Options for creating a local CultNet host over CultCache and the canonical MessagePack store. + + + + + Gets or sets the cache-open options used for the underlying CultCache. + + + + + Gets or sets the server security configuration. When omitted, development defaults are used. + + + + + Gets or sets whether the server should start immediately after creation. + + + + + Gets or sets the database sharding options used for the hosted CultCache. + + + + + Gets or sets the database server bridge options used for shard routing and forwarding. + + + + + Gets or sets an optional callback used to customize the server before start. + + + + + Convenience wrapper for a locally hosted CultNet server over a durable CultCache. + + + + + Gets the durable cache used by the host. + + + + + Gets the canonical single-file MessagePack store, when one is attached. + + + + + Gets the underlying CultNet server. + + + + + Gets the distributed database facade over the hosted cache. + + + + + Gets the schema-v0 server bridge for distributed database messages. + + + + + Starts the server. + + + + + Flushes the durable cache. + + + + + Stops the server and disposes the host resources. + + + + + Friendly local entrypoints for CultNet host/client creation. + + + + + Creates a local host with a durable CultCache and the canonical MessagePack backing store. + + + + + Creates and starts a local host with development-friendly defaults. + + + + + Creates a client configured for local CultNet use. + + + + + Creates and connects a client to the specified host. + + + + + Creates and connects a client to a local development host. + + + + + Shared wire-contract identifiers understood by the CultNet family. + + + + + schema v0 contract identifier. + + + + + game cult networking v0 contract identifier. + + + + + Canonical schema-version strings for the modern CultNet message family. + + + + + hello contract identifier. + + + + + login contract identifier. + + + + + register contract identifier. + + + + + verify contract identifier. + + + + + login success contract identifier. + + + + + error contract identifier. + + + + + sample change name contract identifier. + + + + + sample chat contract identifier. + + + + + document delete contract identifier. + + + + + document put raw contract identifier. + + + + + snapshot request contract identifier. + + + + + snapshot response raw contract identifier. + + + + + schema catalog request contract identifier. + + + + + schema catalog response contract identifier. + + + + + database subscription request contract identifier. + + + + + database subscription cancel contract identifier. + + + + + database subscription change contract identifier. + + + + + shard catalog request contract identifier. + + + + + shard catalog response contract identifier. + + + + + shard mutation log request contract identifier. + + + + + shard mutation log response contract identifier. + + + + + simulation observation gossip contract identifier. + + + + + simulation consensus candidate gossip contract identifier. + + + + + witness artifact bundle document contract identifier. + + + + + CultMesh Verse catalog request contract identifier. + + + + + CultMesh Verse catalog response contract identifier. + + + + + CultMesh peer exchange request contract identifier. + + + + + CultMesh peer exchange response contract identifier. + + + + + Mutation authority owner identifiers advertised through CultNet mutation contracts. + + + + + The document is inspectable but not writable through CultNet. + + + + + The local human operator may submit the corresponding mutation intent. + + + + + A coordinator-owned Epiphany control surface owns the mutation path. + + + + + The runtime itself may write this document directly. + + + + + The document should not be mutated through CultNet. + + + + + Declares how a document or surface may be inspected and mutated over CultNet. + + + + + Gets or sets the stable document type governed by this contract. + + + + + Gets or sets the payload schema version when the contract governs a versioned document payload. + + + + + Gets or sets the CultNet operations this document accepts. + + + + + Gets or sets which actor is allowed to drive those operations. + + + + + Gets or sets the intent document types a client may submit to request mutation. + + + + + Gets or sets the receipt document types emitted after a successful mutation path. + + + + + Gets or sets freeform notes that explain local mutation guardrails or posture. + + + + + Marker interface for the explicit modern CultNet schema-v0 message family. + + + + + Gets or sets the schema version carried by this message. + + + + + CultNet hello message used to announce a runtime and its supported contracts. + + + + + Gets or sets the schema version. + + + + + Gets or sets the runtime id. + + + + + Gets or sets the runtime kind. + + + + + Gets or sets the agent id. + + + + + Gets or sets the role. + + + + + Gets or sets the display name. + + + + + Gets or sets the supported document types. + + + + + Gets or sets the supported mutation contracts. + + + + + Gets or sets the supported message versions. + + + + + Gets or sets the supports schema catalog. + + + + + CultNet login request message. + + + + + Gets or sets the schema version. + + + + + Gets or sets the nonce. + + + + + Gets or sets the auth. + + + + + Gets or sets the password. + + + + + CultNet registration request message. + + + + + Gets or sets the schema version. + + + + + Gets or sets the nonce. + + + + + Gets or sets the email. + + + + + Gets or sets the password. + + + + + Gets or sets the name. + + + + + CultNet session verification request message. + + + + + Gets or sets the schema version. + + + + + Gets or sets the nonce. + + + + + Gets or sets the session. + + + + + CultNet message returned after successful session verification. + + + + + Gets or sets the schema version. + + + + + Gets or sets the nonce. + + + + + Gets or sets the session. + + + + + CultNet error response message. + + + + + Gets or sets the schema version. + + + + + Gets or sets the error. + + + + + Gets or sets optional shard routing details for authority failures. + + + + + Describes where a shard write should be routed. + + + + + Gets or sets the shard descriptor. + + + + + Gets or sets a machine-readable routing reason. + + + + + Sample CultNet message used by development clients to change a display name. + + + + + Gets or sets the schema version. + + + + + Gets or sets the name. + + + + + Sample CultNet chat message used by development clients. + + + + + Gets or sets the schema version. + + + + + Gets or sets the text. + + + + + Raw document record carried over CultNet. + + + + + Gets or sets the schema id. + + + + + Gets or sets the record key. + + + + + Gets or sets the stored at. + + + + + Gets or sets the payload encoding. + + + + + Gets or sets the payload. + + + + + Gets or sets the source runtime id. + + + + + Gets or sets the source agent id. + + + + + Gets or sets the source role. + + + + + Gets or sets the tags. + + + + + CultNet message requesting deletion of a document record. + + + + + Gets or sets the schema version. + + + + + Gets or sets the message id. + + + + + Gets or sets the schema id. + + + + + Gets or sets the record key. + + + + + Gets or sets the shard id the sender targeted. + + + + + Gets or sets the shard epoch the sender targeted. + + + + + CultNet message carrying one raw document record. + + + + + Gets or sets the schema version. + + + + + Gets or sets the message id. + + + + + Gets or sets the document. + + + + + Gets or sets the shard id the sender targeted. + + + + + Gets or sets the shard epoch the sender targeted. + + + + + CultNet message requesting a document snapshot. + + + + + Gets or sets the schema version. + + + + + Gets or sets the message id. + + + + + Gets or sets the schema ids. + + + + + Gets or sets the record keys. + + + + + Gets or sets the shard id requested for a shard-bounded snapshot. + + + + + Gets or sets the expected shard epoch. + + + + + CultNet message returning raw document records from a snapshot request. + + + + + Gets or sets the schema version. + + + + + Gets or sets the message id. + + + + + Gets or sets the documents. + + + + + Gets or sets the shard id represented by this snapshot. + + + + + Gets or sets the shard epoch represented by this snapshot. + + + + + Gets or sets the shard-log sequence represented by this snapshot. + + + + + Requests a live database subscription. + + + + + Gets or sets the schema version. + + + + + Gets or sets the request id. + + + + + Gets or sets the live subscription id. + + + + + Gets or sets optional schema ids to watch. + + + + + Gets or sets optional record keys to watch. + + + + + Gets or sets whether the server should send a matching snapshot before live changes. + + + + + Cancels a live database subscription. + + + + + Gets or sets the schema version. + + + + + Gets or sets the request id. + + + + + Gets or sets the live subscription id. + + + + + Streams one raw document change for a live database subscription. + + + + + Gets or sets the schema version. + + + + + Gets or sets the message id. + + + + + Gets or sets the live subscription id. + + + + + Gets or sets the change kind. + + + + + Gets or sets the current document for added or updated changes. + + + + + Gets or sets the deleted record key for removed changes. + + + + + Gets or sets the deleted schema id for removed changes. + + + + + Describes one shard advertised by a CultNet database node. + + + + + Gets or sets the shard id. + + + + + Gets or sets the owner runtime id. + + + + + Gets or sets the shard authority epoch. + + + + + Gets or sets whether the responding node is primary for this shard. + + + + + Gets or sets schema ids governed by this shard. Empty means all schemas. + + + + + Gets or sets the record-key prefix governed by this shard. + + + + + Gets or sets endpoints that accept authoritative writes. + + + + + Gets or sets authoritative replica endpoints. + + + + + Gets or sets low-latency read replica endpoints. + + + + + Gets or sets an optional locality label. + + + + + Requests shard ownership and routing metadata. + + + + + Gets or sets the schema version. + + + + + Gets or sets the request id. + + + + + Gets or sets optional schema filters. + + + + + Gets or sets optional record-key filters. + + + + + Returns shard ownership and routing metadata. + + + + + Gets or sets the schema version. + + + + + Gets or sets the request id. + + + + + Gets or sets shard descriptors. + + + + + Requests accepted mutation log entries for a shard. + + + + + Gets or sets the schema version. + + + + + Gets or sets the request id. + + + + + Gets or sets the shard id. + + + + + Gets or sets the shard epoch expected by the requester. + + + + + Gets or sets the last sequence already held by the requester. + + + + + Gets or sets the maximum number of entries to return. + + + + + Returns accepted mutation log entries for a shard. + + + + + Gets or sets the schema version. + + + + + Gets or sets the request id. + + + + + Gets or sets the shard id. + + + + + Gets or sets the shard epoch. + + + + + Gets or sets mutation log entries. + + + + + Gets or sets whether the requester must fall back to a shard snapshot. + + + + + Gets or sets a machine-readable resync reason. + + + + + Gets or sets the highest sequence compacted out of the retained log. + + + + + Describes one accepted shard mutation for replica catch-up. + + + + + Gets or sets the per-shard sequence. + + + + + Gets or sets the commit timestamp. + + + + + Gets or sets the mutation kind. + + + + + Gets or sets a raw put message for added/updated entries. + + + + + Gets or sets a raw delete message for removed entries. + + + + + Carries one witness observation about a simulation fact. + + + + + Gets or sets the schema version. + + + + + Gets or sets the message id. + + + + + Gets or sets the observation. + + + + + Carries one deterministic consensus candidate derived from witness observations. + + + + + Gets or sets the schema version. + + + + + Gets or sets the message id. + + + + + Gets or sets the shard id. + + + + + Gets or sets the shard epoch. + + + + + Gets or sets the simulation frame. + + + + + Gets or sets the subject id. + + + + + Gets or sets the claim kind. + + + + + Gets or sets the selected claim hash. + + + + + Gets or sets optional claim detail. + + + + + Gets or sets distinct supporting witnesses. + + + + + Gets or sets supporting witness weight. + + + + + Gets or sets total observed witness weight. + + + + + Gets or sets whether the candidate crossed quorum. + + + + + Gets or sets support divided by total observed weight. + + + + + Creates a wire candidate message from a local candidate. + + + + + Requests known CultMesh Verses from a peer. + + + + + Gets or sets the schema version. + + + + + Gets or sets the request id. + + + + + Gets or sets optional Verse ids to request. + + + + + Gets or sets an optional transport compatibility filter. + + + + + Returns known CultMesh Verses. + + + + + Gets or sets the schema version. + + + + + Gets or sets the request id. + + + + + Gets or sets discovered Verses. + + + + + Wire representation of a CultMesh Verse. + + + + + Gets or sets the stable Verse id. + + + + + Gets or sets the display name. + + + + + Gets or sets the authority model name. + + + + + Gets or sets compatibility metadata. + + + + + Gets or sets endpoints that can answer discovery for this Verse. + + + + + Gets or sets known authoritative runtime ids. + + + + + Gets or sets the parent Verse id for overlays or branches. + + + + + Gets or sets an optional public description. + + + + + Wire representation of CultMesh Verse compatibility. + + + + + Gets or sets the CultMesh transport compatibility version. + + + + + Gets or sets the stable rules hash. + + + + + Gets or sets Verse ids this Verse can transfer from or subscribe to. + + + + + Gets or sets required plugin ids. + + + + + Gets or sets optional plugin ids. + + + + + Requests known peers for a CultMesh Verse. + + + + + Gets or sets the schema version. + + + + + Gets or sets the request id. + + + + + Gets or sets the Verse id to discover peers for. + + + + + Gets or sets optional role filters. + + + + + Gets or sets peer ids the requester already knows. + + + + + Gets or sets the maximum number of peer cards to return. + + + + + Returns known peers for a CultMesh Verse. + + + + + Gets or sets the schema version. + + + + + Gets or sets the request id. + + + + + Gets or sets peer cards. + + + + + Wire representation of a CultMesh peer candidate. + + + + + Gets or sets the stable peer id. + + + + + Gets or sets the Verse id this peer participates in. + + + + + Gets or sets reachable endpoints. + + + + + Gets or sets advertised peer roles. + + + + + Gets or sets shard ids this peer can serve or observe. + + + + + Gets or sets an optional region/locality label. + + + + + Gets or sets the authority lease id, when the card advertises authority. + + + + + Gets or sets the expiry timestamp for this card. + + + + + Gets or sets an optional signature over the card. + + + + + Describes one schema exposed through the CultNet schema catalog. + + + + + Gets or sets the schema id. + + + + + Gets or sets the kind. + + + + + Gets or sets the schema version. + + + + + Gets or sets the document type. + + + + + Gets or sets the title. + + + + + Gets or sets the wire contracts. + + + + + Gets or sets the content hash. + + + + + Gets or sets the schema json. + + + + + CultNet message requesting schema catalog entries. + + + + + Gets or sets the schema version. + + + + + Gets or sets the message id. + + + + + Gets or sets the include schema json. + + + + + Gets or sets the schema ids. + + + + + Gets or sets the kinds. + + + + + CultNet message returning schema catalog entries. + + + + + Gets or sets the schema version. + + + + + Gets or sets the message id. + + + + + Gets or sets the schemas. + + + + + Serializes and deserializes the explicit modern CultNet schema-v0 message family. + + + + + Gets the serializer options used for CultNet schema-v0 messages. + + + + + Serializes a typed CultNet schema message. + + + + + Deserializes a typed CultNet schema message. + + + + + Deserializes a CultNet schema message by inspecting its schema version. + + + + + Registers exchange-safe schema metadata and produces discovery responses. + + + + + Creates a schema registry with optional initial entries. + + + + + Adds or replaces one schema registration. + + + + + Gets one schema descriptor by schema identifier. + + + + + Lists schema descriptors, optionally filtered by identifier or kind. + + + + + Creates a schema catalog response for a request. + + + + + Creates a registry populated from embedded CultNet schema resources. + + + + + Gets the lazily initialized built-in schema registry. + + + + + One exchange-safe schema registration. + + + + + Gets or sets the schema identifier. + + + + + Gets or sets the schema kind. + + + + + Gets or sets the wire contracts implemented by the schema. + + + + + Gets or sets the schema document. + + + + + Gets or sets the message or document schema version. + + + + + Gets or sets the document type associated with the schema. + + + + + Gets or sets the display title. + + + + + Stores accepted shard-log entries in their replica catch-up wire shape. + + + + + Reads accepted log entries for a shard after the supplied sequence. + + + + + Appends or replaces one accepted log entry for a shard. + + + + + Gets the highest sequence that has been compacted out of the retained log. + + + + + Removes retained entries at or before the supplied sequence. + + + + + Persists shard-log entries as one MessagePack file per shard. + + + + + Creates a file-backed shard mutation log store. + + + + + + + + + + + + + + + + + Fetches committed shard-log entries from an authoritative shard owner. + + + + + Fetches shard-log entries after the supplied sequence. + + + + + Fetches shard-bounded snapshots from an authoritative shard owner. + + + + + Fetches a shard snapshot. + + + + + Persisted replica cursor for one shard. + + + + + Gets or sets the shard id. + + + + + Gets or sets the shard epoch. + + + + + Gets or sets the last applied shard-log sequence. + + + + + Gets or sets the cursor update timestamp. + + + + + Stores restart-safe replica cursors. + + + + + Reads the cursor for a shard, if one exists. + + + + + Writes the cursor for a shard. + + + + + Options for background shard-log replication. + + + + + Gets or sets the interval used by the background pull loop. + + + + + Gets or sets the maximum number of log entries requested per pull. + + + + + Gets or sets the fetcher used to read from shard primaries. + + + + + Gets or sets the fetcher used when log history has been compacted. + + + + + Gets or sets a callback for background pull failures. + + + + + Gets or sets optional restart-safe cursor storage. + + + + + Pulls committed shard logs from primaries and applies them to a local replica database. + + + + + Creates a shard replicator. + + + + + Starts background pull loops for non-primary shards with advertised primaries. + + + + + Pulls and applies one batch for a shard id. + + + + + Pulls and applies one batch for a shard. + + + + + + + + Stores replica cursors in one local MessagePack file. + + + + + Creates a file-backed cursor store. + + + + + + + + + + + Options for the schema-v0 client-based shard-log fetcher. + + + + + Gets or sets client security options used to connect to primary endpoints. + + + + + Gets or sets how long to wait for a connection before failing. + + + + + Gets or sets how long to wait for a log response before failing. + + + + + Gets or sets a callback used to customize each ephemeral fetch client. + + + + + Fetches shard-log batches over the CultNet schema-v0 client transport. + + + + + Creates a schema-v0 shard-log fetcher. + + + + + + + + Options for the schema-v0 client-based shard snapshot fetcher. + + + + + Gets or sets client security options used to connect to primary endpoints. + + + + + Gets or sets how long to wait for a connection before failing. + + + + + Gets or sets how long to wait for a snapshot response before failing. + + + + + Gets or sets a callback used to customize each ephemeral fetch client. + + + + + Fetches shard snapshots over the CultNet schema-v0 client transport. + + + + + Creates a schema-v0 shard snapshot fetcher. + + + + + + + + Forwards shard writes to an authoritative owner. + + + + + Forwards a raw document put to the shard owner. + + + + + Forwards a raw document delete to the shard owner. + + + + + Options controlling shard write forwarding from a database server bridge. + + + + + Gets or sets whether non-primary writes may be forwarded to shard owners. + + + + + Gets or sets the forwarder used when non-primary write forwarding is enabled. + + + + + Options for the schema-v0 client-based shard write forwarder. + + + + + Gets or sets client security options used to connect to primary endpoints. + + + + + Gets or sets how long to wait for a connection before failing the forwarded write. + + + + + Gets or sets a callback used to customize each ephemeral forwarding client. + + + + + Forwards shard writes over the CultNet schema-v0 client transport. + + + + + Creates a schema-v0 write forwarder. + + + + + + + + + + + Parses a CultNet endpoint URI into host and port. + + + + + One witness report about a deterministic simulation fact. + + + + + Gets or sets the observing runtime id. + + + + + Gets or sets the shard id containing the observed simulation. + + + + + Gets or sets the shard epoch observed by the witness. + + + + + Gets or sets the simulation frame or tick. + + + + + Gets or sets the subject this observation is about. + + + + + Gets or sets the kind of claim, such as hit, input, collision, or ownership. + + + + + Gets or sets the content hash of the witness claim. + + + + + Gets or sets optional human-readable or app-specific claim detail. + + + + + Gets or sets the witness weight. Normal clients should use 1. + + + + + Gets or sets the observation timestamp. + + + + + Computes a stable claim hash from ordered claim parts. + + + + + Controls deterministic witness aggregation. + + + + + Gets or sets the minimum distinct witnesses required before a claim can be accepted. + + + + + Gets or sets the minimum weight required before a claim can be accepted. + + + + + Gets or sets the fraction of observed weight required for quorum. + + + + + A deterministic consensus candidate derived from witness observations. + + + + + Creates a consensus candidate. + + + + + Gets the shard id. + + + + + Gets the shard epoch. + + + + + Gets the simulation frame. + + + + + Gets the subject id. + + + + + Gets the claim kind. + + + + + Gets the claim hash. + + + + + Gets optional claim detail. + + + + + Gets the distinct witness count supporting this candidate. + + + + + Gets supporting witness weight. + + + + + Gets total observed witness weight for the same subject/frame/kind. + + + + + Gets whether the candidate crossed the configured quorum. + + + + + Gets support divided by total observed weight. + + + + + Aggregates simulation observations into deterministic consensus candidates. + + + + + Creates a consensus aggregator. + + + + + Returns the strongest candidate for each observed shard/frame/subject/claim kind. + + + + + Collects witness observations and publishes updated consensus candidates. + + + + + Creates an observation hub. + + + + + Gets all observations currently held by the hub. + + + + + Watches accepted witness observations. + + + + + Watches consensus candidate updates. + + + + + Adds an observation and returns current candidates for the same observed subject. + + + + + Adds an observation message and returns current candidates for the same observed subject. + + + + + + + + Bridges schema-v0 simulation observation messages into a local observation hub. + + + + + Creates and attaches a simulation observation bridge. + + + + + Gets the observation hub used by this bridge. + + + + + Applies an observation message and returns current candidate messages for the same subject. + + + + + + + + Portable manifest for one inspectable pipeline witness bundle. + + + + + Gets or sets the stable bundle identifier. + + + + + Gets or sets the witness family or pipeline kind. + + + + + Gets or sets when the manifest was captured. + + + + + Gets or sets the pinned subject this witness bundle describes. + + + + + Gets or sets the schema and contract pins required to interpret the witness. + + + + + Gets or sets the inspectable artifact pointers carried by the bundle. + + + + + Gets or sets stage timing witnesses associated with the bundle. + + + + + Gets or sets provenance metadata for the bundle producer. + + + + + Pins the document or payload instance the witness is about. + + + + + Gets or sets the subject document type or domain identifier. + + + + + Gets or sets the persisted record key or equivalent stable subject id. + + + + + Gets or sets the pinned subject schema version. + + + + + Gets or sets the pinned subject schema identifier when one exists. + + + + + Gets or sets the pinned subject content hash when one exists. + + + + + Pins one schema or contract dependency for the witness bundle. + + + + + Gets or sets the contract role inside the bundle. + + + + + Gets or sets the stable schema identifier. + + + + + Gets or sets the pinned schema version. + + + + + Gets or sets the canonical schema content hash when one exists. + + + + + Points at one inspectable artifact emitted by the witnessed pipeline. + + + + + Gets or sets the artifact role inside the witness bundle. + + + + + Gets or sets the portable URI for the artifact. + + + + + Gets or sets the artifact media type. + + + + + Gets or sets the artifact content hash when one exists. + + + + + Gets or sets the artifact size in bytes when known. + + + + + Gets or sets when the artifact was produced. + + + + + Records timestamp and latency evidence for one stage in the witnessed pipeline. + + + + + Gets or sets the pipeline stage name. + + + + + Gets or sets when the stage started. + + + + + Gets or sets when the stage completed. + + + + + Gets or sets the observed stage latency in milliseconds. + + + + + Gets or sets the URI for the timing witness artifact when one exists. + + + + + Carries provenance metadata for the witness bundle producer. + + + + + Gets or sets the stable pipeline identifier. + + + + + Gets or sets the pipeline run identifier. + + + + + Gets or sets the runtime identifier that produced the bundle. + + + + + Gets or sets the producing agent identifier when one exists. + + + + + Gets or sets the producing agent role when one exists. + + + + + Gets or sets the pipeline or tool version when one exists. + + + + + Base type for all network messages exchanged by the client and server. + + + + + Gets or sets the peer associated with the received message. + + + + + Base type for encrypted messages that carry a nonce. + + + + + Nonce used for AES-GCM encryption of the message payload. + + + + + Requests authentication with an email or username and password. + + + + + Encrypted email address or username. + + + + + Encrypted password payload. + + + + + Requests registration of a new player account. + + + + + Encrypted email address. + + + + + Encrypted password payload. + + + + + Encrypted display name payload. + + + + + Attempts to restore a previously issued session. + + + + + Encrypted session identifier. + + + + + Indicates successful authentication or verification. + + + + + Encrypted session identifier. + + + + + Sends a non-success error back to the client. + + + + + Human-readable error text. + + + + + Requests a catalog of schemas that the remote runtime can safely exchange. + + + + + Correlation identifier for the discovery request. + + + + + Whether the remote runtime should include inline JSON schema bodies. + + + + + Optional schema-id filter. + + + + + Optional schema-kind filter. + + + + + Describes one schema that the runtime knows how to exchange safely. + + + + + Stable canonical schema identifier. + + + + + Discovery kind such as wire_message, document_payload, or shared_contract. + + + + + Optional runtime message schema version. + + + + + Optional CultCache/CultNet document type name. + + + + + Human-facing schema title. + + + + + Wire contracts that can transport this schema safely. + + + + + SHA-256 hash of the canonical schema JSON. + + + + + Optional canonical JSON Schema body as a string. + + + + + Returns the remote runtime's schema catalog for safe exchange planning. + + + + + Correlation identifier matching the request. + + + + + Discovered schemas available for safe exchange. + + + + + Adds MessagePack-based send helpers for . + + + + + Serializes and sends a message using reliable ordered delivery. + + The concrete message type. + The peer to send through. + The message to serialize and send. + + + + Serializes and sends a modern CultNet schema-v0 message using reliable ordered delivery. + + The concrete schema-v0 message type. + The peer to send through. + The schema-v0 message to serialize and send. + + + + Basic player account document used by the sample networking stack. + + + + + Unique player identifier. + + + + + Player email address. + + + + + Stored password hash. + + + + + Player display name. + + + + + Monotonic session version used to supersede older issued tokens. + + + + + Sample authenticated payload for changing a player-visible name. + + + This is example application payload riding the shared networking contract, + not a claim that CultNet itself is spiritually about chat lobbies forever. + Keep the wire tag stable if other runtimes depend on it. + + + + + Requested new username. + + + + + Sample plain chat payload. + + + This exists as a dead-simple reference payload for message extension and + cross-runtime compatibility tests. Real applications should define their + own domain messages and keep those contracts in sync across languages. + + + + + Chat text content. + + + + + Provides shared encryption helpers and connection secrets for the networking layer. + + + + + Configures the default server security options used by overloads that do not take an explicit options instance. + + + + + Shared LiteNetLib connection key from the configured default options. + + + + + Gets a newly generated nonce suitable for AES-GCM operations. + + + + + Encrypts a string using AES-GCM. + + The plaintext string to encrypt. + The nonce to use for the operation. + The encrypted payload, or null when is null or empty. + + + + Encrypts a string using AES-GCM. + + + + + Encrypts a string using AES-GCM. + + + + + Encrypts a byte array using AES-GCM. + + The plaintext bytes to encrypt. + The nonce to use for the operation. + The authentication tag followed by the ciphertext. + + + + Encrypts a byte array using AES-GCM. + + + + + Encrypts a byte array using AES-GCM. + + + + + Decrypts an encrypted UTF-8 string payload. + + The encrypted bytes produced by the corresponding string or byte encryption overloads. + The nonce used during encryption. + The decrypted string, or null when the inputs are invalid. + + + + Decrypts an encrypted UTF-8 string payload. + + + + + Decrypts an encrypted UTF-8 string payload. + + + + + Decrypts an AES-GCM payload into raw bytes. + + The encrypted bytes containing the authentication tag prefix. + The nonce used during encryption. + The decrypted plaintext bytes. + + + + Decrypts an AES-GCM payload into raw bytes. + + + + + Decrypts an AES-GCM payload into raw bytes. + + + + + Creates a signed session token for the supplied user. + + The authenticated user identifier. + The UTC expiration time for the token. + A tamper-evident session token. + + + + Creates a signed session token for the supplied user. + + + + + Creates a signed session token for the supplied user and session version. + + + + + Validates and parses a signed session token. + + The token to validate. + The extracted user identifier. + The extracted UTC expiration time. + true when the token is valid and unexpired. + + + + Validates and parses a signed session token. + + + + + Validates and parses a signed session token. + + + + + Validates and parses a signed session token. + + + + + Hosts the server-side authentication, session, and message dispatch pipeline. + + + + + Gets or sets the logger used by the server. + + + + + Gets or sets whether raw payload bodies may be logged for diagnostics. + + + + + Initializes a new server instance over the supplied cache. + + The backing cache used for player persistence. + Optional validated server security options. When omitted, strict environment-based configuration is used. + + + + Validates an email address against the server's accepted pattern. + + The email address to validate. + true when the address matches the expected format. + + + + Validates a username against the server's accepted pattern. + + The username to validate. + true when the username matches the expected format. + + + + Removes all registered message listeners. + + + + + Adds a listener for a specific authenticated message type. + + The message type to subscribe to. + The callback to invoke when the message is received. + + + + Adds a listener for a specific authenticated message type. + + + + + Adds a listener for a modern CultNet schema-v0 message type. + + + + + Adds a listener for a modern CultNet schema-v0 message type. + + + + + Adds a listener for a modern CultNet schema-v0 message type. + + + + + Adds a listener for a modern CultNet schema-v0 message type. + + + + + Removes a previously registered listener for a specific message type. + + The message type to unsubscribe from. + The callback to remove. + + + + Removes a previously registered listener for a specific authenticated message type. + + + + + Removes a previously registered modern CultNet schema-v0 listener. + + + + + Stops the underlying LiteNetLib server. + + + + + Starts listening for connections and configures message handlers. + + + + + + + + Represents an active authenticated session. + + + + + The last time the session was observed as active. + + + + + Player data associated with the session. + + + + + Tracks connection state for a connected peer. + + + + + The connected network peer. + + + + + The last reported latency for the peer. + + + + + The authenticated player identifier. + + + + + The current session expiration timestamp in UTC. + + + + + The latest signed session token issued to the peer. + + + + + The session version associated with the latest issued token. + + + + + Carries the server-side networking configuration and server-only signing secret. + + + + + Environment variable name for the LiteNetLib connection key. + + + + + Environment variable name for the session-token signing secret. + + + + + Shared LiteNetLib connection key and encryption seed. + + + + + Gets a value indicating whether the options were created for explicit development use. + + + + + Initializes a new server security configuration. + + + + + Creates a strict production-style configuration from environment variables. + + + When true, returns if both environment variables are absent. + + + + + Creates a deterministic development-only configuration. + + + + A MessagePack resolver that uses generated formatters for types in this assembly. + + + An instance of this resolver that only returns formatters specifically generated for types in this assembly. + + + diff --git a/Aetheria.State.Verify/bin/Debug/net10.0/Isopoh.Cryptography.Argon2.dll b/Aetheria.State.Verify/bin/Debug/net10.0/Isopoh.Cryptography.Argon2.dll new file mode 100644 index 000000000..7dcecfa1f --- /dev/null +++ b/Aetheria.State.Verify/bin/Debug/net10.0/Isopoh.Cryptography.Argon2.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:26b840ebe2ce1c5eb4ec0951801ce6f5c00b8fdbe6fc50f3e7aeaa0194c2d275 +size 33280 diff --git a/Aetheria.State.Verify/bin/Debug/net10.0/Isopoh.Cryptography.Blake2b.dll b/Aetheria.State.Verify/bin/Debug/net10.0/Isopoh.Cryptography.Blake2b.dll new file mode 100644 index 000000000..a749d0838 --- /dev/null +++ b/Aetheria.State.Verify/bin/Debug/net10.0/Isopoh.Cryptography.Blake2b.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:27858b5bc18d1ca269283cf752840d09070739adb0439f2814eb3d433f6fc1d7 +size 27648 diff --git a/Aetheria.State.Verify/bin/Debug/net10.0/Isopoh.Cryptography.SecureArray.dll b/Aetheria.State.Verify/bin/Debug/net10.0/Isopoh.Cryptography.SecureArray.dll new file mode 100644 index 000000000..a84f4472e --- /dev/null +++ b/Aetheria.State.Verify/bin/Debug/net10.0/Isopoh.Cryptography.SecureArray.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3650e6ddc582b56d27c0e759ecdf373eb1b298ab2f68d9360c2e02108e5c3ebe +size 26112 diff --git a/Aetheria.State.Verify/bin/Debug/net10.0/LiteNetLib.dll b/Aetheria.State.Verify/bin/Debug/net10.0/LiteNetLib.dll new file mode 100644 index 000000000..2919d9e62 --- /dev/null +++ b/Aetheria.State.Verify/bin/Debug/net10.0/LiteNetLib.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f70423511b4671f2db809248008c63ae77064b9014a52c6d45906726b893851 +size 126464 diff --git a/Aetheria.State.Verify/bin/Debug/net10.0/MessagePack.Annotations.dll b/Aetheria.State.Verify/bin/Debug/net10.0/MessagePack.Annotations.dll new file mode 100644 index 000000000..927ac49bf --- /dev/null +++ b/Aetheria.State.Verify/bin/Debug/net10.0/MessagePack.Annotations.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d7aa07d288c6a39109eedf6435e3ba8c413342876ed08bb5a64d55dd39dd04d +size 18432 diff --git a/Aetheria.State.Verify/bin/Debug/net10.0/MessagePack.dll b/Aetheria.State.Verify/bin/Debug/net10.0/MessagePack.dll new file mode 100644 index 000000000..059c96f59 --- /dev/null +++ b/Aetheria.State.Verify/bin/Debug/net10.0/MessagePack.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8abd8fa8d66f41d5bdd243b740c9dd392915a8b4df1373df5a1f3fdfe093a9c8 +size 378880 diff --git a/Aetheria.State.Verify/bin/Debug/net10.0/Microsoft.NET.StringTools.dll b/Aetheria.State.Verify/bin/Debug/net10.0/Microsoft.NET.StringTools.dll new file mode 100644 index 000000000..215f21ba2 --- /dev/null +++ b/Aetheria.State.Verify/bin/Debug/net10.0/Microsoft.NET.StringTools.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e51c8678fd602a21c249b369e833966019935132476f9434da896bef808ba3b1 +size 30880 diff --git a/Aetheria.State.Verify/bin/Debug/net10.0/R3.dll b/Aetheria.State.Verify/bin/Debug/net10.0/R3.dll new file mode 100644 index 000000000..91ebf3132 --- /dev/null +++ b/Aetheria.State.Verify/bin/Debug/net10.0/R3.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3fd39c541c070a0510eaf0b92af569c4467b03ce64204ea1a1ff55731b89b58 +size 599040 diff --git a/Aetheria.State.Verify/obj/Aetheria.State.Verify.csproj.nuget.dgspec.json b/Aetheria.State.Verify/obj/Aetheria.State.Verify.csproj.nuget.dgspec.json new file mode 100644 index 000000000..3a7b2c272 --- /dev/null +++ b/Aetheria.State.Verify/obj/Aetheria.State.Verify.csproj.nuget.dgspec.json @@ -0,0 +1,960 @@ +{ + "format": 1, + "restore": { + "E:\\Projects\\Aetheria\\Aetheria.State.Verify\\Aetheria.State.Verify.csproj": {} + }, + "projects": { + "E:\\Projects\\Aetheria\\Aetheria.State.Verify\\Aetheria.State.Verify.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "E:\\Projects\\Aetheria\\Aetheria.State.Verify\\Aetheria.State.Verify.csproj", + "projectName": "Aetheria.State.Verify", + "projectPath": "E:\\Projects\\Aetheria\\Aetheria.State.Verify\\Aetheria.State.Verify.csproj", + "packagesPath": "C:\\Users\\Meta\\.nuget\\packages\\", + "outputPath": "E:\\Projects\\Aetheria\\Aetheria.State.Verify\\obj\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\Meta\\AppData\\Roaming\\NuGet\\NuGet.Config" + ], + "originalTargetFrameworks": [ + "net10.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "projectReferences": { + "E:\\Projects\\Aetheria\\Aetheria.State\\Aetheria.State.csproj": { + "projectPath": "E:\\Projects\\Aetheria\\Aetheria.State\\Aetheria.State.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "all" + }, + "SdkAnalysisLevel": "10.0.200" + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.202/PortableRuntimeIdentifierGraph.json", + "packagesToPrune": { + "Microsoft.CSharp": "(,4.7.32767]", + "Microsoft.VisualBasic": "(,10.4.32767]", + "Microsoft.Win32.Primitives": "(,4.3.32767]", + "Microsoft.Win32.Registry": "(,5.0.32767]", + "runtime.any.System.Collections": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.any.System.Globalization": "(,4.3.32767]", + "runtime.any.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.any.System.IO": "(,4.3.32767]", + "runtime.any.System.Reflection": "(,4.3.32767]", + "runtime.any.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.any.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.any.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.any.System.Runtime": "(,4.3.32767]", + "runtime.any.System.Runtime.Handles": "(,4.3.32767]", + "runtime.any.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.any.System.Text.Encoding": "(,4.3.32767]", + "runtime.any.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.any.System.Threading.Tasks": "(,4.3.32767]", + "runtime.any.System.Threading.Timer": "(,4.3.32767]", + "runtime.aot.System.Collections": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.aot.System.Globalization": "(,4.3.32767]", + "runtime.aot.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.aot.System.IO": "(,4.3.32767]", + "runtime.aot.System.Reflection": "(,4.3.32767]", + "runtime.aot.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.aot.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.aot.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.aot.System.Runtime": "(,4.3.32767]", + "runtime.aot.System.Runtime.Handles": "(,4.3.32767]", + "runtime.aot.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.aot.System.Threading.Tasks": "(,4.3.32767]", + "runtime.aot.System.Threading.Timer": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.unix.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.unix.System.Console": "(,4.3.32767]", + "runtime.unix.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.unix.System.IO.FileSystem": "(,4.3.32767]", + "runtime.unix.System.Net.Primitives": "(,4.3.32767]", + "runtime.unix.System.Net.Sockets": "(,4.3.32767]", + "runtime.unix.System.Private.Uri": "(,4.3.32767]", + "runtime.unix.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.win.System.Console": "(,4.3.32767]", + "runtime.win.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.win.System.IO.FileSystem": "(,4.3.32767]", + "runtime.win.System.Net.Primitives": "(,4.3.32767]", + "runtime.win.System.Net.Sockets": "(,4.3.32767]", + "runtime.win.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win10-arm-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-arm64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win10-x64-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-x86-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7-x86.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7.System.Private.Uri": "(,4.3.32767]", + "runtime.win8-arm.runtime.native.System.IO.Compression": "(,4.3.32767]", + "System.AppContext": "(,4.3.32767]", + "System.Buffers": "(,5.0.32767]", + "System.Collections": "(,4.3.32767]", + "System.Collections.Concurrent": "(,4.3.32767]", + "System.Collections.Immutable": "(,10.0.32767]", + "System.Collections.NonGeneric": "(,4.3.32767]", + "System.Collections.Specialized": "(,4.3.32767]", + "System.ComponentModel": "(,4.3.32767]", + "System.ComponentModel.Annotations": "(,4.3.32767]", + "System.ComponentModel.EventBasedAsync": "(,4.3.32767]", + "System.ComponentModel.Primitives": "(,4.3.32767]", + "System.ComponentModel.TypeConverter": "(,4.3.32767]", + "System.Console": "(,4.3.32767]", + "System.Data.Common": "(,4.3.32767]", + "System.Data.DataSetExtensions": "(,4.4.32767]", + "System.Diagnostics.Contracts": "(,4.3.32767]", + "System.Diagnostics.Debug": "(,4.3.32767]", + "System.Diagnostics.DiagnosticSource": "(,10.0.32767]", + "System.Diagnostics.FileVersionInfo": "(,4.3.32767]", + "System.Diagnostics.Process": "(,4.3.32767]", + "System.Diagnostics.StackTrace": "(,4.3.32767]", + "System.Diagnostics.TextWriterTraceListener": "(,4.3.32767]", + "System.Diagnostics.Tools": "(,4.3.32767]", + "System.Diagnostics.TraceSource": "(,4.3.32767]", + "System.Diagnostics.Tracing": "(,4.3.32767]", + "System.Drawing.Primitives": "(,4.3.32767]", + "System.Dynamic.Runtime": "(,4.3.32767]", + "System.Formats.Asn1": "(,10.0.32767]", + "System.Formats.Tar": "(,10.0.32767]", + "System.Globalization": "(,4.3.32767]", + "System.Globalization.Calendars": "(,4.3.32767]", + "System.Globalization.Extensions": "(,4.3.32767]", + "System.IO": "(,4.3.32767]", + "System.IO.Compression": "(,4.3.32767]", + "System.IO.Compression.ZipFile": "(,4.3.32767]", + "System.IO.FileSystem": "(,4.3.32767]", + "System.IO.FileSystem.AccessControl": "(,4.4.32767]", + "System.IO.FileSystem.DriveInfo": "(,4.3.32767]", + "System.IO.FileSystem.Primitives": "(,4.3.32767]", + "System.IO.FileSystem.Watcher": "(,4.3.32767]", + "System.IO.IsolatedStorage": "(,4.3.32767]", + "System.IO.MemoryMappedFiles": "(,4.3.32767]", + "System.IO.Pipelines": "(,10.0.32767]", + "System.IO.Pipes": "(,4.3.32767]", + "System.IO.Pipes.AccessControl": "(,5.0.32767]", + "System.IO.UnmanagedMemoryStream": "(,4.3.32767]", + "System.Linq": "(,4.3.32767]", + "System.Linq.AsyncEnumerable": "(,10.0.32767]", + "System.Linq.Expressions": "(,4.3.32767]", + "System.Linq.Parallel": "(,4.3.32767]", + "System.Linq.Queryable": "(,4.3.32767]", + "System.Memory": "(,5.0.32767]", + "System.Net.Http": "(,4.3.32767]", + "System.Net.Http.Json": "(,10.0.32767]", + "System.Net.NameResolution": "(,4.3.32767]", + "System.Net.NetworkInformation": "(,4.3.32767]", + "System.Net.Ping": "(,4.3.32767]", + "System.Net.Primitives": "(,4.3.32767]", + "System.Net.Requests": "(,4.3.32767]", + "System.Net.Security": "(,4.3.32767]", + "System.Net.ServerSentEvents": "(,10.0.32767]", + "System.Net.Sockets": "(,4.3.32767]", + "System.Net.WebHeaderCollection": "(,4.3.32767]", + "System.Net.WebSockets": "(,4.3.32767]", + "System.Net.WebSockets.Client": "(,4.3.32767]", + "System.Numerics.Vectors": "(,5.0.32767]", + "System.ObjectModel": "(,4.3.32767]", + "System.Private.DataContractSerialization": "(,4.3.32767]", + "System.Private.Uri": "(,4.3.32767]", + "System.Reflection": "(,4.3.32767]", + "System.Reflection.DispatchProxy": "(,6.0.32767]", + "System.Reflection.Emit": "(,4.7.32767]", + "System.Reflection.Emit.ILGeneration": "(,4.7.32767]", + "System.Reflection.Emit.Lightweight": "(,4.7.32767]", + "System.Reflection.Extensions": "(,4.3.32767]", + "System.Reflection.Metadata": "(,10.0.32767]", + "System.Reflection.Primitives": "(,4.3.32767]", + "System.Reflection.TypeExtensions": "(,4.3.32767]", + "System.Resources.Reader": "(,4.3.32767]", + "System.Resources.ResourceManager": "(,4.3.32767]", + "System.Resources.Writer": "(,4.3.32767]", + "System.Runtime": "(,4.3.32767]", + "System.Runtime.CompilerServices.Unsafe": "(,7.0.32767]", + "System.Runtime.CompilerServices.VisualC": "(,4.3.32767]", + "System.Runtime.Extensions": "(,4.3.32767]", + "System.Runtime.Handles": "(,4.3.32767]", + "System.Runtime.InteropServices": "(,4.3.32767]", + "System.Runtime.InteropServices.RuntimeInformation": "(,4.3.32767]", + "System.Runtime.Loader": "(,4.3.32767]", + "System.Runtime.Numerics": "(,4.3.32767]", + "System.Runtime.Serialization.Formatters": "(,4.3.32767]", + "System.Runtime.Serialization.Json": "(,4.3.32767]", + "System.Runtime.Serialization.Primitives": "(,4.3.32767]", + "System.Runtime.Serialization.Xml": "(,4.3.32767]", + "System.Security.AccessControl": "(,6.0.32767]", + "System.Security.Claims": "(,4.3.32767]", + "System.Security.Cryptography.Algorithms": "(,4.3.32767]", + "System.Security.Cryptography.Cng": "(,5.0.32767]", + "System.Security.Cryptography.Csp": "(,4.3.32767]", + "System.Security.Cryptography.Encoding": "(,4.3.32767]", + "System.Security.Cryptography.OpenSsl": "(,5.0.32767]", + "System.Security.Cryptography.Primitives": "(,4.3.32767]", + "System.Security.Cryptography.X509Certificates": "(,4.3.32767]", + "System.Security.Principal": "(,4.3.32767]", + "System.Security.Principal.Windows": "(,5.0.32767]", + "System.Security.SecureString": "(,4.3.32767]", + "System.Text.Encoding": "(,4.3.32767]", + "System.Text.Encoding.CodePages": "(,10.0.32767]", + "System.Text.Encoding.Extensions": "(,4.3.32767]", + "System.Text.Encodings.Web": "(,10.0.32767]", + "System.Text.Json": "(,10.0.32767]", + "System.Text.RegularExpressions": "(,4.3.32767]", + "System.Threading": "(,4.3.32767]", + "System.Threading.AccessControl": "(,10.0.32767]", + "System.Threading.Channels": "(,10.0.32767]", + "System.Threading.Overlapped": "(,4.3.32767]", + "System.Threading.Tasks": "(,4.3.32767]", + "System.Threading.Tasks.Dataflow": "(,10.0.32767]", + "System.Threading.Tasks.Extensions": "(,5.0.32767]", + "System.Threading.Tasks.Parallel": "(,4.3.32767]", + "System.Threading.Thread": "(,4.3.32767]", + "System.Threading.ThreadPool": "(,4.3.32767]", + "System.Threading.Timer": "(,4.3.32767]", + "System.ValueTuple": "(,4.5.32767]", + "System.Xml.ReaderWriter": "(,4.3.32767]", + "System.Xml.XDocument": "(,4.3.32767]", + "System.Xml.XmlDocument": "(,4.3.32767]", + "System.Xml.XmlSerializer": "(,4.3.32767]", + "System.Xml.XPath": "(,4.3.32767]", + "System.Xml.XPath.XDocument": "(,5.0.32767]" + } + } + } + }, + "E:\\Projects\\Aetheria\\Aetheria.State\\Aetheria.State.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "E:\\Projects\\Aetheria\\Aetheria.State\\Aetheria.State.csproj", + "projectName": "Aetheria.State", + "projectPath": "E:\\Projects\\Aetheria\\Aetheria.State\\Aetheria.State.csproj", + "packagesPath": "C:\\Users\\Meta\\.nuget\\packages\\", + "outputPath": "E:\\Projects\\Aetheria\\Aetheria.State\\obj\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\Meta\\AppData\\Roaming\\NuGet\\NuGet.Config" + ], + "originalTargetFrameworks": [ + "netstandard2.1" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "netstandard2.1": { + "targetAlias": "netstandard2.1", + "projectReferences": { + "E:\\Projects\\CultLib\\src\\GameCult.Caching.MessagePack\\GameCult.Caching.MessagePack.csproj": { + "projectPath": "E:\\Projects\\CultLib\\src\\GameCult.Caching.MessagePack\\GameCult.Caching.MessagePack.csproj" + }, + "E:\\Projects\\CultLib\\src\\GameCult.Caching\\GameCult.Caching.csproj": { + "projectPath": "E:\\Projects\\CultLib\\src\\GameCult.Caching\\GameCult.Caching.csproj" + }, + "E:\\Projects\\CultLib\\src\\GameCult.Mesh\\GameCult.Mesh.csproj": { + "projectPath": "E:\\Projects\\CultLib\\src\\GameCult.Mesh\\GameCult.Mesh.csproj" + }, + "E:\\Projects\\CultLib\\src\\GameCult.Networking\\GameCult.Networking.csproj": { + "projectPath": "E:\\Projects\\CultLib\\src\\GameCult.Networking\\GameCult.Networking.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "10.0.200" + }, + "frameworks": { + "netstandard2.1": { + "targetAlias": "netstandard2.1", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "NETStandard.Library.Ref", + "version": "[2.1.0, 2.1.0]" + } + ], + "frameworkReferences": { + "NETStandard.Library": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.202\\RuntimeIdentifierGraph.json" + } + } + }, + "E:\\Projects\\CultLib\\src\\GameCult.Caching.MessagePack.Analyzers\\GameCult.Caching.MessagePack.Analyzers.csproj": { + "version": "1.0.3", + "restore": { + "projectUniqueName": "E:\\Projects\\CultLib\\src\\GameCult.Caching.MessagePack.Analyzers\\GameCult.Caching.MessagePack.Analyzers.csproj", + "projectName": "GameCult.Caching.MessagePack.Analyzers", + "projectPath": "E:\\Projects\\CultLib\\src\\GameCult.Caching.MessagePack.Analyzers\\GameCult.Caching.MessagePack.Analyzers.csproj", + "packagesPath": "C:\\Users\\Meta\\.nuget\\packages\\", + "outputPath": "E:\\Projects\\CultLib\\obj\\src\\GameCult.Caching.MessagePack.Analyzers\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\Meta\\AppData\\Roaming\\NuGet\\NuGet.Config" + ], + "originalTargetFrameworks": [ + "netstandard2.1" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "netstandard2.1": { + "targetAlias": "netstandard2.1", + "projectReferences": { + "E:\\Projects\\CultLib\\src\\GameCult.Caching.MessagePack.Generator\\GameCult.Caching.MessagePack.Generator.csproj": { + "projectPath": "E:\\Projects\\CultLib\\src\\GameCult.Caching.MessagePack.Generator\\GameCult.Caching.MessagePack.Generator.csproj", + "excludeAssets": "compile" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "10.0.200" + }, + "frameworks": { + "netstandard2.1": { + "targetAlias": "netstandard2.1", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "NETStandard.Library.Ref", + "version": "[2.1.0, 2.1.0]" + } + ], + "frameworkReferences": { + "NETStandard.Library": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.202\\RuntimeIdentifierGraph.json" + } + } + }, + "E:\\Projects\\CultLib\\src\\GameCult.Caching.MessagePack.Generator\\GameCult.Caching.MessagePack.Generator.csproj": { + "version": "1.0.3", + "restore": { + "projectUniqueName": "E:\\Projects\\CultLib\\src\\GameCult.Caching.MessagePack.Generator\\GameCult.Caching.MessagePack.Generator.csproj", + "projectName": "GameCult.Caching.MessagePack.Generator", + "projectPath": "E:\\Projects\\CultLib\\src\\GameCult.Caching.MessagePack.Generator\\GameCult.Caching.MessagePack.Generator.csproj", + "packagesPath": "C:\\Users\\Meta\\.nuget\\packages\\", + "outputPath": "E:\\Projects\\CultLib\\obj\\src\\GameCult.Caching.MessagePack.Generator\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\Meta\\AppData\\Roaming\\NuGet\\NuGet.Config" + ], + "originalTargetFrameworks": [ + "netstandard2.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "netstandard2.0": { + "targetAlias": "netstandard2.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "10.0.200" + }, + "frameworks": { + "netstandard2.0": { + "targetAlias": "netstandard2.0", + "dependencies": { + "Microsoft.CodeAnalysis.Analyzers": { + "suppressParent": "All", + "target": "Package", + "version": "[5.3.0, )" + }, + "Microsoft.CodeAnalysis.CSharp": { + "suppressParent": "All", + "target": "Package", + "version": "[5.3.0, )" + }, + "NETStandard.Library": { + "suppressParent": "All", + "target": "Package", + "version": "[2.0.3, )", + "autoReferenced": true + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.202\\RuntimeIdentifierGraph.json" + } + } + }, + "E:\\Projects\\CultLib\\src\\GameCult.Caching.MessagePack\\GameCult.Caching.MessagePack.csproj": { + "version": "1.0.3", + "restore": { + "projectUniqueName": "E:\\Projects\\CultLib\\src\\GameCult.Caching.MessagePack\\GameCult.Caching.MessagePack.csproj", + "projectName": "GameCult.Caching.MessagePack", + "projectPath": "E:\\Projects\\CultLib\\src\\GameCult.Caching.MessagePack\\GameCult.Caching.MessagePack.csproj", + "packagesPath": "C:\\Users\\Meta\\.nuget\\packages\\", + "outputPath": "E:\\Projects\\CultLib\\obj\\src\\GameCult.Caching.MessagePack\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\Meta\\AppData\\Roaming\\NuGet\\NuGet.Config" + ], + "originalTargetFrameworks": [ + "netstandard2.1" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "netstandard2.1": { + "targetAlias": "netstandard2.1", + "projectReferences": { + "E:\\Projects\\CultLib\\src\\GameCult.Caching.MessagePack.Analyzers\\GameCult.Caching.MessagePack.Analyzers.csproj": { + "projectPath": "E:\\Projects\\CultLib\\src\\GameCult.Caching.MessagePack.Analyzers\\GameCult.Caching.MessagePack.Analyzers.csproj", + "privateAssets": "none" + }, + "E:\\Projects\\CultLib\\src\\GameCult.Caching\\GameCult.Caching.csproj": { + "projectPath": "E:\\Projects\\CultLib\\src\\GameCult.Caching\\GameCult.Caching.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "10.0.200" + }, + "frameworks": { + "netstandard2.1": { + "targetAlias": "netstandard2.1", + "dependencies": { + "MessagePack": { + "target": "Package", + "version": "[3.1.4, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "NETStandard.Library.Ref", + "version": "[2.1.0, 2.1.0]" + } + ], + "frameworkReferences": { + "NETStandard.Library": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.202\\RuntimeIdentifierGraph.json" + } + } + }, + "E:\\Projects\\CultLib\\src\\GameCult.Caching\\GameCult.Caching.csproj": { + "version": "1.0.3", + "restore": { + "projectUniqueName": "E:\\Projects\\CultLib\\src\\GameCult.Caching\\GameCult.Caching.csproj", + "projectName": "GameCult.Caching", + "projectPath": "E:\\Projects\\CultLib\\src\\GameCult.Caching\\GameCult.Caching.csproj", + "packagesPath": "C:\\Users\\Meta\\.nuget\\packages\\", + "outputPath": "E:\\Projects\\CultLib\\obj\\src\\GameCult.Caching\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\Meta\\AppData\\Roaming\\NuGet\\NuGet.Config" + ], + "originalTargetFrameworks": [ + "netstandard2.1" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "netstandard2.1": { + "targetAlias": "netstandard2.1", + "projectReferences": { + "E:\\Projects\\CultLib\\src\\GameCult.Logging\\GameCult.Logging.csproj": { + "projectPath": "E:\\Projects\\CultLib\\src\\GameCult.Logging\\GameCult.Logging.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "10.0.200" + }, + "frameworks": { + "netstandard2.1": { + "targetAlias": "netstandard2.1", + "dependencies": { + "ConcurrentHashSet": { + "target": "Package", + "version": "[1.3.0, )" + }, + "R3": { + "target": "Package", + "version": "[1.3.0, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "NETStandard.Library.Ref", + "version": "[2.1.0, 2.1.0]" + } + ], + "frameworkReferences": { + "NETStandard.Library": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.202\\RuntimeIdentifierGraph.json" + } + } + }, + "E:\\Projects\\CultLib\\src\\GameCult.Logging\\GameCult.Logging.csproj": { + "version": "1.0.3", + "restore": { + "projectUniqueName": "E:\\Projects\\CultLib\\src\\GameCult.Logging\\GameCult.Logging.csproj", + "projectName": "GameCult.Logging", + "projectPath": "E:\\Projects\\CultLib\\src\\GameCult.Logging\\GameCult.Logging.csproj", + "packagesPath": "C:\\Users\\Meta\\.nuget\\packages\\", + "outputPath": "E:\\Projects\\CultLib\\obj\\src\\GameCult.Logging\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\Meta\\AppData\\Roaming\\NuGet\\NuGet.Config" + ], + "originalTargetFrameworks": [ + "netstandard2.1" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "netstandard2.1": { + "targetAlias": "netstandard2.1", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "10.0.200" + }, + "frameworks": { + "netstandard2.1": { + "targetAlias": "netstandard2.1", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "NETStandard.Library.Ref", + "version": "[2.1.0, 2.1.0]" + } + ], + "frameworkReferences": { + "NETStandard.Library": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.202\\RuntimeIdentifierGraph.json" + } + } + }, + "E:\\Projects\\CultLib\\src\\GameCult.Mesh\\GameCult.Mesh.csproj": { + "version": "1.0.3", + "restore": { + "projectUniqueName": "E:\\Projects\\CultLib\\src\\GameCult.Mesh\\GameCult.Mesh.csproj", + "projectName": "GameCult.Mesh", + "projectPath": "E:\\Projects\\CultLib\\src\\GameCult.Mesh\\GameCult.Mesh.csproj", + "packagesPath": "C:\\Users\\Meta\\.nuget\\packages\\", + "outputPath": "E:\\Projects\\CultLib\\obj\\src\\GameCult.Mesh\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\Meta\\AppData\\Roaming\\NuGet\\NuGet.Config" + ], + "originalTargetFrameworks": [ + "netstandard2.1" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "netstandard2.1": { + "targetAlias": "netstandard2.1", + "projectReferences": { + "E:\\Projects\\CultLib\\src\\GameCult.Caching.MessagePack\\GameCult.Caching.MessagePack.csproj": { + "projectPath": "E:\\Projects\\CultLib\\src\\GameCult.Caching.MessagePack\\GameCult.Caching.MessagePack.csproj" + }, + "E:\\Projects\\CultLib\\src\\GameCult.Caching\\GameCult.Caching.csproj": { + "projectPath": "E:\\Projects\\CultLib\\src\\GameCult.Caching\\GameCult.Caching.csproj" + }, + "E:\\Projects\\CultLib\\src\\GameCult.Networking\\GameCult.Networking.csproj": { + "projectPath": "E:\\Projects\\CultLib\\src\\GameCult.Networking\\GameCult.Networking.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "10.0.200" + }, + "frameworks": { + "netstandard2.1": { + "targetAlias": "netstandard2.1", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "NETStandard.Library.Ref", + "version": "[2.1.0, 2.1.0]" + } + ], + "frameworkReferences": { + "NETStandard.Library": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.202\\RuntimeIdentifierGraph.json" + } + } + }, + "E:\\Projects\\CultLib\\src\\GameCult.Networking\\GameCult.Networking.csproj": { + "version": "1.0.3", + "restore": { + "projectUniqueName": "E:\\Projects\\CultLib\\src\\GameCult.Networking\\GameCult.Networking.csproj", + "projectName": "GameCult.Networking", + "projectPath": "E:\\Projects\\CultLib\\src\\GameCult.Networking\\GameCult.Networking.csproj", + "packagesPath": "C:\\Users\\Meta\\.nuget\\packages\\", + "outputPath": "E:\\Projects\\CultLib\\obj\\src\\GameCult.Networking\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\Meta\\AppData\\Roaming\\NuGet\\NuGet.Config" + ], + "originalTargetFrameworks": [ + "netstandard2.1" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "netstandard2.1": { + "targetAlias": "netstandard2.1", + "projectReferences": { + "E:\\Projects\\CultLib\\src\\GameCult.Caching.MessagePack\\GameCult.Caching.MessagePack.csproj": { + "projectPath": "E:\\Projects\\CultLib\\src\\GameCult.Caching.MessagePack\\GameCult.Caching.MessagePack.csproj" + }, + "E:\\Projects\\CultLib\\src\\GameCult.Caching\\GameCult.Caching.csproj": { + "projectPath": "E:\\Projects\\CultLib\\src\\GameCult.Caching\\GameCult.Caching.csproj" + }, + "E:\\Projects\\CultLib\\src\\GameCult.Logging\\GameCult.Logging.csproj": { + "projectPath": "E:\\Projects\\CultLib\\src\\GameCult.Logging\\GameCult.Logging.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "10.0.200" + }, + "frameworks": { + "netstandard2.1": { + "targetAlias": "netstandard2.1", + "dependencies": { + "Isopoh.Cryptography.Argon2": { + "target": "Package", + "version": "[2.0.0, )" + }, + "LiteNetLib": { + "target": "Package", + "version": "[2.1.2, )" + }, + "MessagePack": { + "target": "Package", + "version": "[3.1.4, )" + }, + "R3": { + "target": "Package", + "version": "[1.3.0, )" + }, + "System.Text.Json": { + "target": "Package", + "version": "[9.0.10, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "NETStandard.Library.Ref", + "version": "[2.1.0, 2.1.0]" + } + ], + "frameworkReferences": { + "NETStandard.Library": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.202\\RuntimeIdentifierGraph.json" + } + } + } + } +} \ No newline at end of file diff --git a/Aetheria.State.Verify/obj/Aetheria.State.Verify.csproj.nuget.g.props b/Aetheria.State.Verify/obj/Aetheria.State.Verify.csproj.nuget.g.props new file mode 100644 index 000000000..5ebb9f7b8 --- /dev/null +++ b/Aetheria.State.Verify/obj/Aetheria.State.Verify.csproj.nuget.g.props @@ -0,0 +1,15 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\.nuget\packages\ + C:\Users\Meta\.nuget\packages\ + PackageReference + 7.0.0 + + + + + \ No newline at end of file diff --git a/Aetheria.State.Verify/obj/Aetheria.State.Verify.csproj.nuget.g.targets b/Aetheria.State.Verify/obj/Aetheria.State.Verify.csproj.nuget.g.targets new file mode 100644 index 000000000..3dc06ef3c --- /dev/null +++ b/Aetheria.State.Verify/obj/Aetheria.State.Verify.csproj.nuget.g.targets @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/Aetheria.State.Verify/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs b/Aetheria.State.Verify/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs new file mode 100644 index 000000000..925b1351b --- /dev/null +++ b/Aetheria.State.Verify/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v10.0", FrameworkDisplayName = ".NET 10.0")] diff --git a/Aetheria.State.Verify/obj/Debug/net10.0/Aetheria.4BA5618A.Up2Date b/Aetheria.State.Verify/obj/Debug/net10.0/Aetheria.4BA5618A.Up2Date new file mode 100644 index 000000000..e69de29bb diff --git a/Aetheria.State.Verify/obj/Debug/net10.0/Aetheria.State.Verify.AssemblyInfo.cs b/Aetheria.State.Verify/obj/Debug/net10.0/Aetheria.State.Verify.AssemblyInfo.cs new file mode 100644 index 000000000..7994321dc --- /dev/null +++ b/Aetheria.State.Verify/obj/Debug/net10.0/Aetheria.State.Verify.AssemblyInfo.cs @@ -0,0 +1,22 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Aetheria.State.Verify")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+dad8d799fcaec5d616486f3656f6240ad6634a27")] +[assembly: System.Reflection.AssemblyProductAttribute("Aetheria.State.Verify")] +[assembly: System.Reflection.AssemblyTitleAttribute("Aetheria.State.Verify")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/Aetheria.State.Verify/obj/Debug/net10.0/Aetheria.State.Verify.AssemblyInfoInputs.cache b/Aetheria.State.Verify/obj/Debug/net10.0/Aetheria.State.Verify.AssemblyInfoInputs.cache new file mode 100644 index 000000000..0e0a24cf5 --- /dev/null +++ b/Aetheria.State.Verify/obj/Debug/net10.0/Aetheria.State.Verify.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +16c3b2cc1cd5c6839015577c94ae9c2874569af60f8beeba2d3b98f54dc21768 diff --git a/Aetheria.State.Verify/obj/Debug/net10.0/Aetheria.State.Verify.GeneratedMSBuildEditorConfig.editorconfig b/Aetheria.State.Verify/obj/Debug/net10.0/Aetheria.State.Verify.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 000000000..c1ed04bfb --- /dev/null +++ b/Aetheria.State.Verify/obj/Debug/net10.0/Aetheria.State.Verify.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,17 @@ +is_global = true +build_property.TargetFramework = net10.0 +build_property.TargetFrameworkIdentifier = .NETCoreApp +build_property.TargetFrameworkVersion = v10.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = Aetheria.State.Verify +build_property.ProjectDir = E:\Projects\Aetheria\Aetheria.State.Verify\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.EffectiveAnalysisLevelStyle = 10.0 +build_property.EnableCodeStyleSeverity = diff --git a/Aetheria.State.Verify/obj/Debug/net10.0/Aetheria.State.Verify.GlobalUsings.g.cs b/Aetheria.State.Verify/obj/Debug/net10.0/Aetheria.State.Verify.GlobalUsings.g.cs new file mode 100644 index 000000000..d12bcbc76 --- /dev/null +++ b/Aetheria.State.Verify/obj/Debug/net10.0/Aetheria.State.Verify.GlobalUsings.g.cs @@ -0,0 +1,8 @@ +// +global using System; +global using System.Collections.Generic; +global using System.IO; +global using System.Linq; +global using System.Net.Http; +global using System.Threading; +global using System.Threading.Tasks; diff --git a/Aetheria.State.Verify/obj/Debug/net10.0/Aetheria.State.Verify.assets.cache b/Aetheria.State.Verify/obj/Debug/net10.0/Aetheria.State.Verify.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..c4b8f22cde1577837942bac8c93d264244dc8288 GIT binary patch literal 5711 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 Dwi#t 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�|!f@$qWJC7RmpD*g-8pA-{C-^=PTVw3MJFqY`m% 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 Sg#&2mZ+jx0{pa_-2mTk+6$yg? literal 0 HcmV?d00001 diff --git a/Aetheria.State.Verify/obj/Debug/net10.0/ref/Aetheria.State.Verify.dll b/Aetheria.State.Verify/obj/Debug/net10.0/ref/Aetheria.State.Verify.dll new file mode 100644 index 000000000..5ce79b337 --- /dev/null +++ b/Aetheria.State.Verify/obj/Debug/net10.0/ref/Aetheria.State.Verify.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f93ea6751f6ecd4676def51d9334d0524d53914078072d7024734e7da7e67b9e +size 7168 diff --git a/Aetheria.State.Verify/obj/Debug/net10.0/refint/Aetheria.State.Verify.dll b/Aetheria.State.Verify/obj/Debug/net10.0/refint/Aetheria.State.Verify.dll new file mode 100644 index 000000000..5ce79b337 --- /dev/null +++ b/Aetheria.State.Verify/obj/Debug/net10.0/refint/Aetheria.State.Verify.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f93ea6751f6ecd4676def51d9334d0524d53914078072d7024734e7da7e67b9e +size 7168 diff --git a/Aetheria.State.Verify/obj/project.assets.json b/Aetheria.State.Verify/obj/project.assets.json new file mode 100644 index 000000000..ba8930897 --- /dev/null +++ b/Aetheria.State.Verify/obj/project.assets.json @@ -0,0 +1,851 @@ +{ + "version": 3, + "targets": { + "net10.0": { + "ConcurrentHashSet/1.3.0": { + "type": "package", + "compile": { + "lib/netstandard2.0/ConcurrentCollections.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/ConcurrentCollections.dll": { + "related": ".xml" + } + } + }, + "Isopoh.Cryptography.Argon2/2.0.0": { + "type": "package", + "dependencies": { + "Isopoh.Cryptography.Blake2b": "2.0.0", + "Isopoh.Cryptography.SecureArray": "2.0.0" + }, + "compile": { + "lib/net7.0/Isopoh.Cryptography.Argon2.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Isopoh.Cryptography.Argon2.dll": { + "related": ".xml" + } + } + }, + "Isopoh.Cryptography.Blake2b/2.0.0": { + "type": "package", + "dependencies": { + "Isopoh.Cryptography.SecureArray": "2.0.0" + }, + "compile": { + "lib/net7.0/Isopoh.Cryptography.Blake2b.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Isopoh.Cryptography.Blake2b.dll": { + "related": ".xml" + } + } + }, + "Isopoh.Cryptography.SecureArray/2.0.0": { + "type": "package", + "compile": { + "lib/net7.0/Isopoh.Cryptography.SecureArray.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Isopoh.Cryptography.SecureArray.dll": { + "related": ".xml" + } + } + }, + "LiteNetLib/2.1.2": { + "type": "package", + "compile": { + "lib/net8.0/LiteNetLib.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/LiteNetLib.dll": { + "related": ".xml" + } + } + }, + "MessagePack/3.1.4": { + "type": "package", + "dependencies": { + "MessagePack.Annotations": "3.1.4", + "MessagePackAnalyzer": "3.1.4", + "Microsoft.NET.StringTools": "17.11.4" + }, + "compile": { + "lib/net9.0/MessagePack.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/MessagePack.dll": { + "related": ".xml" + } + } + }, + "MessagePack.Annotations/3.1.4": { + "type": "package", + "compile": { + "lib/netstandard2.0/MessagePack.Annotations.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/MessagePack.Annotations.dll": { + "related": ".xml" + } + } + }, + "MessagePackAnalyzer/3.1.4": { + "type": "package", + "build": { + "build/_._": {} + } + }, + "Microsoft.NET.StringTools/17.11.4": { + "type": "package", + "compile": { + "ref/net8.0/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.NET.StringTools.dll": { + "related": ".pdb;.xml" + } + } + }, + "R3/1.3.0": { + "type": "package", + "compile": { + "lib/net8.0/R3.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/R3.dll": { + "related": ".xml" + } + } + }, + "Aetheria.State/1.0.0": { + "type": "project", + "framework": ".NETStandard,Version=v2.1", + "dependencies": { + "GameCult.Caching": "1.0.3", + "GameCult.Caching.MessagePack": "1.0.3", + "GameCult.Mesh": "1.0.3", + "GameCult.Networking": "1.0.3" + }, + "compile": { + "bin/placeholder/Aetheria.State.dll": {} + }, + "runtime": { + "bin/placeholder/Aetheria.State.dll": {} + } + }, + "GameCult.Caching/1.0.3": { + "type": "project", + "framework": ".NETStandard,Version=v2.1", + "dependencies": { + "ConcurrentHashSet": "1.3.0", + "GameCult.Logging": "1.0.3", + "R3": "1.3.0" + }, + "compile": { + "bin/placeholder/GameCult.Caching.dll": {} + }, + "runtime": { + "bin/placeholder/GameCult.Caching.dll": {} + } + }, + "GameCult.Caching.MessagePack/1.0.3": { + "type": "project", + "framework": ".NETStandard,Version=v2.1", + "dependencies": { + "GameCult.Caching": "1.0.3", + "GameCult.Caching.MessagePack.Analyzers": "1.0.3", + "MessagePack": "3.1.4" + }, + "compile": { + "bin/placeholder/GameCult.Caching.MessagePack.dll": {} + }, + "runtime": { + "bin/placeholder/GameCult.Caching.MessagePack.dll": {} + } + }, + "GameCult.Caching.MessagePack.Analyzers/1.0.3": { + "type": "project", + "framework": ".NETStandard,Version=v2.1", + "dependencies": { + "GameCult.Caching.MessagePack.Generator": "1.0.3" + }, + "compile": { + "bin/placeholder/GameCult.Caching.MessagePack.Analyzers.dll": {} + }, + "runtime": { + "bin/placeholder/GameCult.Caching.MessagePack.Analyzers.dll": {} + } + }, + "GameCult.Caching.MessagePack.Generator/1.0.3": { + "type": "project", + "framework": ".NETStandard,Version=v2.0", + "compile": { + "bin/placeholder/_._": {} + }, + "runtime": { + "bin/placeholder/GameCult.Caching.MessagePack.Generator.dll": {} + } + }, + "GameCult.Logging/1.0.3": { + "type": "project", + "framework": ".NETStandard,Version=v2.1", + "compile": { + "bin/placeholder/GameCult.Logging.dll": {} + }, + "runtime": { + "bin/placeholder/GameCult.Logging.dll": {} + } + }, + "GameCult.Mesh/1.0.3": { + "type": "project", + "framework": ".NETStandard,Version=v2.1", + "dependencies": { + "GameCult.Caching": "1.0.3", + "GameCult.Caching.MessagePack": "1.0.3", + "GameCult.Networking": "1.0.3" + }, + "compile": { + "bin/placeholder/GameCult.Mesh.dll": {} + }, + "runtime": { + "bin/placeholder/GameCult.Mesh.dll": {} + } + }, + "GameCult.Networking/1.0.3": { + "type": "project", + "framework": ".NETStandard,Version=v2.1", + "dependencies": { + "GameCult.Caching": "1.0.3", + "GameCult.Caching.MessagePack": "1.0.3", + "GameCult.Logging": "1.0.3", + "Isopoh.Cryptography.Argon2": "2.0.0", + "LiteNetLib": "2.1.2", + "MessagePack": "3.1.4", + "R3": "1.3.0" + }, + "compile": { + "bin/placeholder/GameCult.Networking.dll": {} + }, + "runtime": { + "bin/placeholder/GameCult.Networking.dll": {} + } + } + } + }, + "libraries": { + "ConcurrentHashSet/1.3.0": { + "sha512": "a30gfk4WDn2f7sOisXpko+CrQ7s5nL1ZWk4afnRwwRQHWPRrRSZpzn5Dz2YWpJtS90NJqkytQ/MkzHq4QYTIbg==", + "type": "package", + "path": "concurrenthashset/1.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "concurrenthashset.1.3.0.nupkg.sha512", + "concurrenthashset.nuspec", + "lib/net461/ConcurrentCollections.dll", + "lib/net461/ConcurrentCollections.xml", + "lib/netstandard1.0/ConcurrentCollections.dll", + "lib/netstandard1.0/ConcurrentCollections.xml", + "lib/netstandard2.0/ConcurrentCollections.dll", + "lib/netstandard2.0/ConcurrentCollections.xml" + ] + }, + "Isopoh.Cryptography.Argon2/2.0.0": { + "sha512": "8ytWN19j+qARb/XYi7KkNMm4Z8zS6tfGgnsZ1N5ihbQ5LXfyL+uYowfJxtGW9TO0S8NM2q0BaTKGOtOlsrhclQ==", + "type": "package", + "path": "isopoh.cryptography.argon2/2.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE", + "README.md", + "isopoh.cryptography.argon2.2.0.0.nupkg.sha512", + "isopoh.cryptography.argon2.nuspec", + "isopoh.png", + "lib/net6.0/Isopoh.Cryptography.Argon2.dll", + "lib/net6.0/Isopoh.Cryptography.Argon2.xml", + "lib/net7.0/Isopoh.Cryptography.Argon2.dll", + "lib/net7.0/Isopoh.Cryptography.Argon2.xml", + "lib/netcoreapp3.1/Isopoh.Cryptography.Argon2.dll", + "lib/netcoreapp3.1/Isopoh.Cryptography.Argon2.xml", + "lib/netstandard2.0/Isopoh.Cryptography.Argon2.dll", + "lib/netstandard2.0/Isopoh.Cryptography.Argon2.xml" + ] + }, + "Isopoh.Cryptography.Blake2b/2.0.0": { + "sha512": "Co56bjSZV13fpvYHEN04qG8hqc0rKRm4os8iEgpJ/kujvt0pYtOVhj5J0Q7HBPbHwpcChRh2CjYVCGm4nw85VQ==", + "type": "package", + "path": "isopoh.cryptography.blake2b/2.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE", + "README.md", + "isopoh.cryptography.blake2b.2.0.0.nupkg.sha512", + "isopoh.cryptography.blake2b.nuspec", + "isopoh.png", + "lib/net6.0/Isopoh.Cryptography.Blake2b.dll", + "lib/net6.0/Isopoh.Cryptography.Blake2b.xml", + "lib/net7.0/Isopoh.Cryptography.Blake2b.dll", + "lib/net7.0/Isopoh.Cryptography.Blake2b.xml", + "lib/netcoreapp3.1/Isopoh.Cryptography.Blake2b.dll", + "lib/netcoreapp3.1/Isopoh.Cryptography.Blake2b.xml", + "lib/netstandard2.0/Isopoh.Cryptography.Blake2b.dll", + "lib/netstandard2.0/Isopoh.Cryptography.Blake2b.xml" + ] + }, + "Isopoh.Cryptography.SecureArray/2.0.0": { + "sha512": "oWbRv/BTztKJxKFr3FBurWBBCgE1+nUTm3pwtA3Yg7Xeo4wDpaLstAwqx8HeQG3/b9yOs2qykpqfbNPJ40McIw==", + "type": "package", + "path": "isopoh.cryptography.securearray/2.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE", + "README.md", + "isopoh.cryptography.securearray.2.0.0.nupkg.sha512", + "isopoh.cryptography.securearray.nuspec", + "isopoh.png", + "lib/net6.0/Isopoh.Cryptography.SecureArray.dll", + "lib/net6.0/Isopoh.Cryptography.SecureArray.xml", + "lib/net7.0/Isopoh.Cryptography.SecureArray.dll", + "lib/net7.0/Isopoh.Cryptography.SecureArray.xml", + "lib/netcoreapp3.1/Isopoh.Cryptography.SecureArray.dll", + "lib/netcoreapp3.1/Isopoh.Cryptography.SecureArray.xml", + "lib/netstandard2.0/Isopoh.Cryptography.SecureArray.dll", + "lib/netstandard2.0/Isopoh.Cryptography.SecureArray.xml" + ] + }, + "LiteNetLib/2.1.2": { + "sha512": "+bmu7Vj+ik3xGX+qubsFuGSR8Pdri4Og7D9YAer83vHotkSHNLYL5bkZNgpvsK8GrcdNOUabZhqbYtmHu8as7A==", + "type": "package", + "path": "litenetlib/2.1.2", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LNL.png", + "README.md", + "lib/net8.0/LiteNetLib.dll", + "lib/net8.0/LiteNetLib.xml", + "lib/netstandard2.1/LiteNetLib.dll", + "lib/netstandard2.1/LiteNetLib.xml", + "litenetlib.2.1.2.nupkg.sha512", + "litenetlib.nuspec" + ] + }, + "MessagePack/3.1.4": { + "sha512": "BH0wlHWmVoZpbAPyyt2Awbq30C+ZsS3eHSkYdnyUAbqVJ22fAJDzn2xTieBeoT5QlcBzp61vHcv878YJGfi3mg==", + "type": "package", + "path": "messagepack/3.1.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net472/MessagePack.dll", + "lib/net472/MessagePack.xml", + "lib/net8.0/MessagePack.dll", + "lib/net8.0/MessagePack.xml", + "lib/net9.0/MessagePack.dll", + "lib/net9.0/MessagePack.xml", + "lib/netstandard2.0/MessagePack.dll", + "lib/netstandard2.0/MessagePack.xml", + "lib/netstandard2.1/MessagePack.dll", + "lib/netstandard2.1/MessagePack.xml", + "messagepack.3.1.4.nupkg.sha512", + "messagepack.nuspec" + ] + }, + "MessagePack.Annotations/3.1.4": { + "sha512": "aVWrDAkCdqxwQsz/q0ldPh2EFn48M99YUzE9OvZjMq2RNLKz4o2z88iGFvSvbMqOWRweRvKPHBJZe22PRqzslQ==", + "type": "package", + "path": "messagepack.annotations/3.1.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/netstandard2.0/MessagePack.Annotations.dll", + "lib/netstandard2.0/MessagePack.Annotations.xml", + "messagepack.annotations.3.1.4.nupkg.sha512", + "messagepack.annotations.nuspec" + ] + }, + "MessagePackAnalyzer/3.1.4": { + "sha512": "CTaSsN/liJ7MhLCAB7Z4ZLBNuVGCq9lt2BT/cbrc9vzGv89yK3CqIA+z9T19a11eQYl9etZHL6MQJgCqECRVpg==", + "type": "package", + "path": "messagepackanalyzer/3.1.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "analyzers/roslyn4.3/cs/MessagePack.Analyzers.CodeFixes.dll", + "analyzers/roslyn4.3/cs/MessagePack.SourceGenerator.dll", + "build/MessagePackAnalyzer.targets", + "messagepackanalyzer.3.1.4.nupkg.sha512", + "messagepackanalyzer.nuspec" + ] + }, + "Microsoft.NET.StringTools/17.11.4": { + "sha512": "mudqUHhNpeqIdJoUx2YDWZO/I9uEDYVowan89R6wsomfnUJQk6HteoQTlNjZDixhT2B4IXMkMtgZtoceIjLRmA==", + "type": "package", + "path": "microsoft.net.stringtools/17.11.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "MSBuild-NuGet-Icon.png", + "README.md", + "lib/net472/Microsoft.NET.StringTools.dll", + "lib/net472/Microsoft.NET.StringTools.pdb", + "lib/net472/Microsoft.NET.StringTools.xml", + "lib/net8.0/Microsoft.NET.StringTools.dll", + "lib/net8.0/Microsoft.NET.StringTools.pdb", + "lib/net8.0/Microsoft.NET.StringTools.xml", + "lib/netstandard2.0/Microsoft.NET.StringTools.dll", + "lib/netstandard2.0/Microsoft.NET.StringTools.pdb", + "lib/netstandard2.0/Microsoft.NET.StringTools.xml", + "microsoft.net.stringtools.17.11.4.nupkg.sha512", + "microsoft.net.stringtools.nuspec", + "notices/THIRDPARTYNOTICES.txt", + "ref/net472/Microsoft.NET.StringTools.dll", + "ref/net472/Microsoft.NET.StringTools.xml", + "ref/net8.0/Microsoft.NET.StringTools.dll", + "ref/net8.0/Microsoft.NET.StringTools.xml", + "ref/netstandard2.0/Microsoft.NET.StringTools.dll", + "ref/netstandard2.0/Microsoft.NET.StringTools.xml" + ] + }, + "R3/1.3.0": { + "sha512": "c4bL37HGimYon/qfRTZOJE41M3cgdMJn/p4O5Jq+WHTJGNXUb1x2DlVI+iZk5phCBwq3ERfrgbaPu9WdG2OS+w==", + "type": "package", + "path": "r3/1.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "lib/net6.0/R3.dll", + "lib/net6.0/R3.xml", + "lib/net8.0/R3.dll", + "lib/net8.0/R3.xml", + "lib/netstandard2.0/R3.dll", + "lib/netstandard2.0/R3.xml", + "lib/netstandard2.1/R3.dll", + "lib/netstandard2.1/R3.xml", + "r3.1.3.0.nupkg.sha512", + "r3.nuspec" + ] + }, + "Aetheria.State/1.0.0": { + "type": "project", + "path": "../Aetheria.State/Aetheria.State.csproj", + "msbuildProject": "../Aetheria.State/Aetheria.State.csproj" + }, + "GameCult.Caching/1.0.3": { + "type": "project", + "path": "../../CultLib/src/GameCult.Caching/GameCult.Caching.csproj", + "msbuildProject": "../../CultLib/src/GameCult.Caching/GameCult.Caching.csproj" + }, + "GameCult.Caching.MessagePack/1.0.3": { + "type": "project", + "path": "../../CultLib/src/GameCult.Caching.MessagePack/GameCult.Caching.MessagePack.csproj", + "msbuildProject": "../../CultLib/src/GameCult.Caching.MessagePack/GameCult.Caching.MessagePack.csproj" + }, + "GameCult.Caching.MessagePack.Analyzers/1.0.3": { + "type": "project", + "path": "../../CultLib/src/GameCult.Caching.MessagePack.Analyzers/GameCult.Caching.MessagePack.Analyzers.csproj", + "msbuildProject": "../../CultLib/src/GameCult.Caching.MessagePack.Analyzers/GameCult.Caching.MessagePack.Analyzers.csproj" + }, + "GameCult.Caching.MessagePack.Generator/1.0.3": { + "type": "project", + "path": "../../CultLib/src/GameCult.Caching.MessagePack.Generator/GameCult.Caching.MessagePack.Generator.csproj", + "msbuildProject": "../../CultLib/src/GameCult.Caching.MessagePack.Generator/GameCult.Caching.MessagePack.Generator.csproj" + }, + "GameCult.Logging/1.0.3": { + "type": "project", + "path": "../../CultLib/src/GameCult.Logging/GameCult.Logging.csproj", + "msbuildProject": "../../CultLib/src/GameCult.Logging/GameCult.Logging.csproj" + }, + "GameCult.Mesh/1.0.3": { + "type": "project", + "path": "../../CultLib/src/GameCult.Mesh/GameCult.Mesh.csproj", + "msbuildProject": "../../CultLib/src/GameCult.Mesh/GameCult.Mesh.csproj" + }, + "GameCult.Networking/1.0.3": { + "type": "project", + "path": "../../CultLib/src/GameCult.Networking/GameCult.Networking.csproj", + "msbuildProject": "../../CultLib/src/GameCult.Networking/GameCult.Networking.csproj" + } + }, + "projectFileDependencyGroups": { + "net10.0": [ + "Aetheria.State >= 1.0.0" + ] + }, + "packageFolders": { + "C:\\Users\\Meta\\.nuget\\packages\\": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "E:\\Projects\\Aetheria\\Aetheria.State.Verify\\Aetheria.State.Verify.csproj", + "projectName": "Aetheria.State.Verify", + "projectPath": "E:\\Projects\\Aetheria\\Aetheria.State.Verify\\Aetheria.State.Verify.csproj", + "packagesPath": "C:\\Users\\Meta\\.nuget\\packages\\", + "outputPath": "E:\\Projects\\Aetheria\\Aetheria.State.Verify\\obj\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\Meta\\AppData\\Roaming\\NuGet\\NuGet.Config" + ], + "originalTargetFrameworks": [ + "net10.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "projectReferences": { + "E:\\Projects\\Aetheria\\Aetheria.State\\Aetheria.State.csproj": { + "projectPath": "E:\\Projects\\Aetheria\\Aetheria.State\\Aetheria.State.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "all" + }, + "SdkAnalysisLevel": "10.0.200" + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.202/PortableRuntimeIdentifierGraph.json", + "packagesToPrune": { + "Microsoft.CSharp": "(,4.7.32767]", + "Microsoft.VisualBasic": "(,10.4.32767]", + "Microsoft.Win32.Primitives": "(,4.3.32767]", + "Microsoft.Win32.Registry": "(,5.0.32767]", + "runtime.any.System.Collections": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.any.System.Globalization": "(,4.3.32767]", + "runtime.any.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.any.System.IO": "(,4.3.32767]", + "runtime.any.System.Reflection": "(,4.3.32767]", + "runtime.any.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.any.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.any.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.any.System.Runtime": "(,4.3.32767]", + "runtime.any.System.Runtime.Handles": "(,4.3.32767]", + "runtime.any.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.any.System.Text.Encoding": "(,4.3.32767]", + "runtime.any.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.any.System.Threading.Tasks": "(,4.3.32767]", + "runtime.any.System.Threading.Timer": "(,4.3.32767]", + "runtime.aot.System.Collections": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.aot.System.Globalization": "(,4.3.32767]", + "runtime.aot.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.aot.System.IO": "(,4.3.32767]", + "runtime.aot.System.Reflection": "(,4.3.32767]", + "runtime.aot.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.aot.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.aot.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.aot.System.Runtime": "(,4.3.32767]", + "runtime.aot.System.Runtime.Handles": "(,4.3.32767]", + "runtime.aot.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.aot.System.Threading.Tasks": "(,4.3.32767]", + "runtime.aot.System.Threading.Timer": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.unix.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.unix.System.Console": "(,4.3.32767]", + "runtime.unix.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.unix.System.IO.FileSystem": "(,4.3.32767]", + "runtime.unix.System.Net.Primitives": "(,4.3.32767]", + "runtime.unix.System.Net.Sockets": "(,4.3.32767]", + "runtime.unix.System.Private.Uri": "(,4.3.32767]", + "runtime.unix.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.win.System.Console": "(,4.3.32767]", + "runtime.win.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.win.System.IO.FileSystem": "(,4.3.32767]", + "runtime.win.System.Net.Primitives": "(,4.3.32767]", + "runtime.win.System.Net.Sockets": "(,4.3.32767]", + "runtime.win.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win10-arm-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-arm64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win10-x64-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-x86-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7-x86.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7.System.Private.Uri": "(,4.3.32767]", + "runtime.win8-arm.runtime.native.System.IO.Compression": "(,4.3.32767]", + "System.AppContext": "(,4.3.32767]", + "System.Buffers": "(,5.0.32767]", + "System.Collections": "(,4.3.32767]", + "System.Collections.Concurrent": "(,4.3.32767]", + "System.Collections.Immutable": "(,10.0.32767]", + "System.Collections.NonGeneric": "(,4.3.32767]", + "System.Collections.Specialized": "(,4.3.32767]", + "System.ComponentModel": "(,4.3.32767]", + "System.ComponentModel.Annotations": "(,4.3.32767]", + "System.ComponentModel.EventBasedAsync": "(,4.3.32767]", + "System.ComponentModel.Primitives": "(,4.3.32767]", + "System.ComponentModel.TypeConverter": "(,4.3.32767]", + "System.Console": "(,4.3.32767]", + "System.Data.Common": "(,4.3.32767]", + "System.Data.DataSetExtensions": "(,4.4.32767]", + "System.Diagnostics.Contracts": "(,4.3.32767]", + "System.Diagnostics.Debug": "(,4.3.32767]", + "System.Diagnostics.DiagnosticSource": "(,10.0.32767]", + "System.Diagnostics.FileVersionInfo": "(,4.3.32767]", + "System.Diagnostics.Process": "(,4.3.32767]", + "System.Diagnostics.StackTrace": "(,4.3.32767]", + "System.Diagnostics.TextWriterTraceListener": "(,4.3.32767]", + "System.Diagnostics.Tools": "(,4.3.32767]", + "System.Diagnostics.TraceSource": "(,4.3.32767]", + "System.Diagnostics.Tracing": "(,4.3.32767]", + "System.Drawing.Primitives": "(,4.3.32767]", + "System.Dynamic.Runtime": "(,4.3.32767]", + "System.Formats.Asn1": "(,10.0.32767]", + "System.Formats.Tar": "(,10.0.32767]", + "System.Globalization": "(,4.3.32767]", + "System.Globalization.Calendars": "(,4.3.32767]", + "System.Globalization.Extensions": "(,4.3.32767]", + "System.IO": "(,4.3.32767]", + "System.IO.Compression": "(,4.3.32767]", + "System.IO.Compression.ZipFile": "(,4.3.32767]", + "System.IO.FileSystem": "(,4.3.32767]", + "System.IO.FileSystem.AccessControl": "(,4.4.32767]", + "System.IO.FileSystem.DriveInfo": "(,4.3.32767]", + "System.IO.FileSystem.Primitives": "(,4.3.32767]", + "System.IO.FileSystem.Watcher": "(,4.3.32767]", + "System.IO.IsolatedStorage": "(,4.3.32767]", + "System.IO.MemoryMappedFiles": "(,4.3.32767]", + "System.IO.Pipelines": "(,10.0.32767]", + "System.IO.Pipes": "(,4.3.32767]", + "System.IO.Pipes.AccessControl": "(,5.0.32767]", + "System.IO.UnmanagedMemoryStream": "(,4.3.32767]", + "System.Linq": "(,4.3.32767]", + "System.Linq.AsyncEnumerable": "(,10.0.32767]", + "System.Linq.Expressions": "(,4.3.32767]", + "System.Linq.Parallel": "(,4.3.32767]", + "System.Linq.Queryable": "(,4.3.32767]", + "System.Memory": "(,5.0.32767]", + "System.Net.Http": "(,4.3.32767]", + "System.Net.Http.Json": "(,10.0.32767]", + "System.Net.NameResolution": "(,4.3.32767]", + "System.Net.NetworkInformation": "(,4.3.32767]", + "System.Net.Ping": "(,4.3.32767]", + "System.Net.Primitives": "(,4.3.32767]", + "System.Net.Requests": "(,4.3.32767]", + "System.Net.Security": "(,4.3.32767]", + "System.Net.ServerSentEvents": "(,10.0.32767]", + "System.Net.Sockets": "(,4.3.32767]", + "System.Net.WebHeaderCollection": "(,4.3.32767]", + "System.Net.WebSockets": "(,4.3.32767]", + "System.Net.WebSockets.Client": "(,4.3.32767]", + "System.Numerics.Vectors": "(,5.0.32767]", + "System.ObjectModel": "(,4.3.32767]", + "System.Private.DataContractSerialization": "(,4.3.32767]", + "System.Private.Uri": "(,4.3.32767]", + "System.Reflection": "(,4.3.32767]", + "System.Reflection.DispatchProxy": "(,6.0.32767]", + "System.Reflection.Emit": "(,4.7.32767]", + "System.Reflection.Emit.ILGeneration": "(,4.7.32767]", + "System.Reflection.Emit.Lightweight": "(,4.7.32767]", + "System.Reflection.Extensions": "(,4.3.32767]", + "System.Reflection.Metadata": "(,10.0.32767]", + "System.Reflection.Primitives": "(,4.3.32767]", + "System.Reflection.TypeExtensions": "(,4.3.32767]", + "System.Resources.Reader": "(,4.3.32767]", + "System.Resources.ResourceManager": "(,4.3.32767]", + "System.Resources.Writer": "(,4.3.32767]", + "System.Runtime": "(,4.3.32767]", + "System.Runtime.CompilerServices.Unsafe": "(,7.0.32767]", + "System.Runtime.CompilerServices.VisualC": "(,4.3.32767]", + "System.Runtime.Extensions": "(,4.3.32767]", + "System.Runtime.Handles": "(,4.3.32767]", + "System.Runtime.InteropServices": "(,4.3.32767]", + "System.Runtime.InteropServices.RuntimeInformation": "(,4.3.32767]", + "System.Runtime.Loader": "(,4.3.32767]", + "System.Runtime.Numerics": "(,4.3.32767]", + "System.Runtime.Serialization.Formatters": "(,4.3.32767]", + "System.Runtime.Serialization.Json": "(,4.3.32767]", + "System.Runtime.Serialization.Primitives": "(,4.3.32767]", + "System.Runtime.Serialization.Xml": "(,4.3.32767]", + "System.Security.AccessControl": "(,6.0.32767]", + "System.Security.Claims": "(,4.3.32767]", + "System.Security.Cryptography.Algorithms": "(,4.3.32767]", + "System.Security.Cryptography.Cng": "(,5.0.32767]", + "System.Security.Cryptography.Csp": "(,4.3.32767]", + "System.Security.Cryptography.Encoding": "(,4.3.32767]", + "System.Security.Cryptography.OpenSsl": "(,5.0.32767]", + "System.Security.Cryptography.Primitives": "(,4.3.32767]", + "System.Security.Cryptography.X509Certificates": "(,4.3.32767]", + "System.Security.Principal": "(,4.3.32767]", + "System.Security.Principal.Windows": "(,5.0.32767]", + "System.Security.SecureString": "(,4.3.32767]", + "System.Text.Encoding": "(,4.3.32767]", + "System.Text.Encoding.CodePages": "(,10.0.32767]", + "System.Text.Encoding.Extensions": "(,4.3.32767]", + "System.Text.Encodings.Web": "(,10.0.32767]", + "System.Text.Json": "(,10.0.32767]", + "System.Text.RegularExpressions": "(,4.3.32767]", + "System.Threading": "(,4.3.32767]", + "System.Threading.AccessControl": "(,10.0.32767]", + "System.Threading.Channels": "(,10.0.32767]", + "System.Threading.Overlapped": "(,4.3.32767]", + "System.Threading.Tasks": "(,4.3.32767]", + "System.Threading.Tasks.Dataflow": "(,10.0.32767]", + "System.Threading.Tasks.Extensions": "(,5.0.32767]", + "System.Threading.Tasks.Parallel": "(,4.3.32767]", + "System.Threading.Thread": "(,4.3.32767]", + "System.Threading.ThreadPool": "(,4.3.32767]", + "System.Threading.Timer": "(,4.3.32767]", + "System.ValueTuple": "(,4.5.32767]", + "System.Xml.ReaderWriter": "(,4.3.32767]", + "System.Xml.XDocument": "(,4.3.32767]", + "System.Xml.XmlDocument": "(,4.3.32767]", + "System.Xml.XmlSerializer": "(,4.3.32767]", + "System.Xml.XPath": "(,4.3.32767]", + "System.Xml.XPath.XDocument": "(,5.0.32767]" + } + } + } + }, + "logs": [ + { + "code": "NU1903", + "level": "Warning", + "warningLevel": 1, + "message": "Package 'MessagePack' 3.1.4 has a known high severity vulnerability, https://github.com/advisories/GHSA-hv8m-jj95-wg3x", + "libraryId": "MessagePack", + "targetGraphs": [ + "net10.0" + ] + } + ] +} \ No newline at end of file diff --git a/Aetheria.State.Verify/obj/project.nuget.cache b/Aetheria.State.Verify/obj/project.nuget.cache new file mode 100644 index 000000000..8ef044c7d --- /dev/null +++ b/Aetheria.State.Verify/obj/project.nuget.cache @@ -0,0 +1,32 @@ +{ + "version": 2, + "dgSpecHash": "1NX9KVtabo8=", + "success": true, + "projectFilePath": "E:\\Projects\\Aetheria\\Aetheria.State.Verify\\Aetheria.State.Verify.csproj", + "expectedPackageFiles": [ + "C:\\Users\\Meta\\.nuget\\packages\\concurrenthashset\\1.3.0\\concurrenthashset.1.3.0.nupkg.sha512", + "C:\\Users\\Meta\\.nuget\\packages\\isopoh.cryptography.argon2\\2.0.0\\isopoh.cryptography.argon2.2.0.0.nupkg.sha512", + "C:\\Users\\Meta\\.nuget\\packages\\isopoh.cryptography.blake2b\\2.0.0\\isopoh.cryptography.blake2b.2.0.0.nupkg.sha512", + "C:\\Users\\Meta\\.nuget\\packages\\isopoh.cryptography.securearray\\2.0.0\\isopoh.cryptography.securearray.2.0.0.nupkg.sha512", + "C:\\Users\\Meta\\.nuget\\packages\\litenetlib\\2.1.2\\litenetlib.2.1.2.nupkg.sha512", + "C:\\Users\\Meta\\.nuget\\packages\\messagepack\\3.1.4\\messagepack.3.1.4.nupkg.sha512", + "C:\\Users\\Meta\\.nuget\\packages\\messagepack.annotations\\3.1.4\\messagepack.annotations.3.1.4.nupkg.sha512", + "C:\\Users\\Meta\\.nuget\\packages\\messagepackanalyzer\\3.1.4\\messagepackanalyzer.3.1.4.nupkg.sha512", + "C:\\Users\\Meta\\.nuget\\packages\\microsoft.net.stringtools\\17.11.4\\microsoft.net.stringtools.17.11.4.nupkg.sha512", + "C:\\Users\\Meta\\.nuget\\packages\\r3\\1.3.0\\r3.1.3.0.nupkg.sha512" + ], + "logs": [ + { + "code": "NU1903", + "level": "Warning", + "message": "Package 'MessagePack' 3.1.4 has a known high severity vulnerability, https://github.com/advisories/GHSA-hv8m-jj95-wg3x", + "projectPath": "E:\\Projects\\Aetheria\\Aetheria.State.Verify\\Aetheria.State.Verify.csproj", + "warningLevel": 1, + "filePath": "E:\\Projects\\Aetheria\\Aetheria.State.Verify\\Aetheria.State.Verify.csproj", + "libraryId": "MessagePack", + "targetGraphs": [ + "net10.0" + ] + } + ] +} \ No newline at end of file diff --git a/Aetheria.State/AetheriaStateNode.cs b/Aetheria.State/AetheriaStateNode.cs index ba980bb6b..2546c714f 100644 --- a/Aetheria.State/AetheriaStateNode.cs +++ b/Aetheria.State/AetheriaStateNode.cs @@ -76,6 +76,11 @@ public sealed class AetheriaStateNode : IAsyncDisposable, IDisposable return Database.PutAsync(new CultRecordKey("global:aetheria.migration_ledger.v1"), ledger); } + public Task GetMigrationLedgerAsync() + { + return Database.GetAsync(new CultRecordKey("global:aetheria.migration_ledger.v1")); + } + public Task> PutLegacyCatalogQuarantineAsync( AetheriaLegacyCatalogQuarantine quarantine) { diff --git a/Aetheria.State/README.md b/Aetheria.State/README.md index baff94b3c..3a65b707a 100644 --- a/Aetheria.State/README.md +++ b/Aetheria.State/README.md @@ -46,6 +46,12 @@ definitions, 12 factions, and 12 name files. Runtime object graphs, behaviors, Unity shapes, and simulation state remain legacy until dedicated typed documents exist. +`Aetheria.State.Verify` opens a materialized state file and checks that the +typed migration ledger matches the actual item, corporation, and name-file +records in the `.cc` store. It also verifies the canonical legacy-ID lookup API +for one migrated record of each catalog kind. Use it after import when +`GameData/aetheria-world.cc` changes. + Current rebuild notes: - `MessagePack` 3.1.4 is pulled transitively through CultLib and is currently diff --git a/README.md b/README.md index af4b1526c..9c786a69a 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,8 @@ The state spine lives in `Aetheria.State`. It defines CultCache documents, CultN Use `Aetheria.State.Import` to quarantine the checked-in legacy catalog files and map stable MessagePack payload fields into typed CultCache state. The importer records path, size, and SHA-256 provenance for `GameData/AetherDB.msgpack` and `GameData/NameFile/*.msgpack`, then emits typed item, faction, and name-file records for the fields that have earned migration authority. +Use `Aetheria.State.Verify` after import to prove the materialized `.cc` file is internally coherent: migration-ledger counts must match actual typed catalog records, and legacy-ID lookups must resolve through `Aetheria.State` rather than importer-local key strings. + #### Editing Items Item editing should target typed CultCache documents and CultMesh/Eve surfaces. The old Unity database inspector has been removed from authority; if it returns, it should be a lowering over the state spine, not a separate store. diff --git a/docs/aetheria-perfect-machine-map.md b/docs/aetheria-perfect-machine-map.md index 00e6db599..903347d74 100644 --- a/docs/aetheria-perfect-machine-map.md +++ b/docs/aetheria-perfect-machine-map.md @@ -55,6 +55,9 @@ legacy catalog cache, and legacy UI paths should be migration-only or deleted. - `GameData/aetheria-world.cc` is now materialized from the importer as the project-local typed state file for the checked-in catalog. The importer stores relative provenance in the state document, not machine-local absolute paths. + `Aetheria.State.Verify` opens the materialized file and checks that migration + ledger counts match actual typed catalog records and that the legacy-ID lookup + API resolves migrated item, corporation, and name-file documents. - `.voidbot/state/aetheria.cc` is the repo Persona state witness. Aetheria is not registered as a VoidBot Discord identity yet, so mutations use the repo-local `void-self-state.mjs apply-operation` typed boundary rather than