fix: restore strict runtime manifest compatibility

This commit is contained in:
codex
2026-08-05 14:24:17 +03:00
parent d4a4d9acf8
commit 6fd670d08a
2 changed files with 16 additions and 1 deletions
+14 -1
View File
@@ -10,7 +10,7 @@ public sealed class PackageManifestValidator : IPackageManifestValidator
var issues = new List<ValidationIssue>();
if (manifest.SchemaVersion != 1) issues.Add(new("schema", "Unsupported schemaVersion."));
if (string.IsNullOrWhiteSpace(manifest.PackageId) || string.IsNullOrWhiteSpace(manifest.Version)) issues.Add(new("identity", "packageId and version are required."));
if (string.IsNullOrWhiteSpace(manifest.Product) || manifest.ProductYear != productYear) issues.Add(new("product", "Package product or year is incompatible."));
if (!string.Equals(manifest.Product, "Plant3D", StringComparison.OrdinalIgnoreCase) || manifest.ProductYear != productYear) issues.Add(new("product", "Package is incompatible with Plant 3D."));
if (!string.Equals(manifest.Architecture, architecture, StringComparison.OrdinalIgnoreCase)) issues.Add(new("architecture", "Package architecture is incompatible."));
var paths = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
foreach (var file in manifest.Files)
@@ -25,3 +25,16 @@ public sealed class PackageManifestValidator : IPackageManifestValidator
return issues.Count == 0 ? ValidationResult.Success : new ValidationResult(issues);
}
}
/// <summary>Structural validation for product-neutral catalog acquisition; it is
/// deliberately not a substitute for a product compatibility policy.</summary>
public sealed class StructuralPackageManifestValidator
{
public ValidationResult Validate(PackageManifest manifest)
{
if (string.IsNullOrWhiteSpace(manifest.Product))
return new ValidationResult([new("product", "Package product is required.")]);
return new PackageManifestValidator().Validate(
manifest with { Product = "Plant3D" }, manifest.ProductYear, manifest.Architecture);
}
}