Make EveUnity CultLib dependencies explicit

This commit is contained in:
Meta Vens 2026-07-09 16:38:39 +01:00
commit 5bf4d0f665
8 changed files with 168 additions and 16 deletions

View file

@ -1625,21 +1625,48 @@
"packageId": "GameCult.Caching",
"packageManager": "nuget",
"ownerRepo": "CultLib",
"resolutionMode": "Unity precompiled reference during EveUnity incubation."
"resolutionMode": "Unity precompiled reference during EveUnity incubation.",
"dependencyContract": {
"sourceAuthority": "CultLib",
"packageSource": "nuget",
"packageId": "GameCult.Caching",
"assemblyName": "GameCult.Caching.dll",
"versionPolicy": "CultLib-owned package version stream.",
"unityResolution": "EveUnity consumes this as a Unity precompiled reference during incubation.",
"handoffRequirement": "EveUnity split must resolve this through CultLib's NuGet/package feed or a documented Unity import without vendoring CultLib ownership into Eve."
}
},
{
"assemblyName": "GameCult.Mesh.dll",
"packageId": "GameCult.Mesh",
"packageManager": "nuget",
"ownerRepo": "CultLib",
"resolutionMode": "Unity precompiled reference during EveUnity incubation."
"resolutionMode": "Unity precompiled reference during EveUnity incubation.",
"dependencyContract": {
"sourceAuthority": "CultLib",
"packageSource": "nuget",
"packageId": "GameCult.Mesh",
"assemblyName": "GameCult.Mesh.dll",
"versionPolicy": "CultLib-owned package version stream.",
"unityResolution": "EveUnity consumes this as a Unity precompiled reference during incubation.",
"handoffRequirement": "EveUnity split must resolve this through CultLib's NuGet/package feed or a documented Unity import without vendoring CultLib ownership into Eve."
}
},
{
"assemblyName": "MessagePack.Annotations.dll",
"packageId": "MessagePack.Annotations",
"packageManager": "nuget",
"ownerRepo": "CultLib",
"resolutionMode": "Unity precompiled reference during EveUnity incubation."
"resolutionMode": "Unity precompiled reference during EveUnity incubation.",
"dependencyContract": {
"sourceAuthority": "CultLib",
"packageSource": "nuget",
"packageId": "MessagePack.Annotations",
"assemblyName": "MessagePack.Annotations.dll",
"versionPolicy": "CultLib-owned transitive package version stream.",
"unityResolution": "EveUnity consumes this as a Unity precompiled reference during incubation.",
"handoffRequirement": "EveUnity split must resolve this through CultLib's NuGet/package feed or a documented Unity import without vendoring CultLib ownership into Eve."
}
}
]
},

View file

@ -1574,7 +1574,20 @@ function compareTestContract(expected, actual, label) {
expected.managedAssemblyDependencies || [],
actual.managedAssemblyDependencies || [],
`${label}.managedAssemblyDependencies`,
["assemblyName", "packageId", "packageManager", "ownerRepo", "resolutionMode"],
[
"assemblyName",
"packageId",
"packageManager",
"ownerRepo",
"resolutionMode",
"dependencyContract.sourceAuthority",
"dependencyContract.packageSource",
"dependencyContract.packageId",
"dependencyContract.assemblyName",
"dependencyContract.versionPolicy",
"dependencyContract.unityResolution",
"dependencyContract.handoffRequirement",
],
));
return errors;
}
@ -1615,14 +1628,20 @@ function compareDependencyRecords(expectedRecords, actualRecords, label, keys) {
continue;
}
for (const key of keys) {
if ((expected[key] || "") !== (actual[key] || "")) {
errors.push(`${label}:${expected[identityKey]}.${key}:expected ${expected[key] || ""} got ${actual[key] || ""}`);
const expectedValue = getByPath(expected, key) || "";
const actualValue = getByPath(actual, key) || "";
if (expectedValue !== actualValue) {
errors.push(`${label}:${expected[identityKey]}.${key}:expected ${expectedValue} got ${actualValue}`);
}
}
}
return errors;
}
function getByPath(record, dottedPath) {
return dottedPath.split(".").reduce((current, segment) => current?.[segment], record);
}
function comparePluginCapabilityClaims(expectedPlugins, actualPlugins, label) {
const errors = [];
const actual = new Map(actualPlugins.map(plugin => [plugin.pluginId, new Set(plugin.capabilities || [])]));