From 4a366a5a51ece5a4767939970a32b613b1ad4c95 Mon Sep 17 00:00:00 2001 From: jkdevito Date: Fri, 10 Jul 2026 13:03:28 -0500 Subject: [PATCH] fix: guard against empty Version in configured-but-not-loaded package passthrough PopulatePackages' "configured but not currently loaded" pass-through could still emit PackageVersion entries with a null/empty Version, reintroducing the schema issue the loaded-reflection branch's own guard already prevents (downstream parsers drop entries whose version isn't a string). --- .../RequestHandlers/GetPackageManifestRequestHandler.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/PepperDash.Essentials.Core/Web/RequestHandlers/GetPackageManifestRequestHandler.cs b/src/PepperDash.Essentials.Core/Web/RequestHandlers/GetPackageManifestRequestHandler.cs index 284f3e2d..f89b0919 100644 --- a/src/PepperDash.Essentials.Core/Web/RequestHandlers/GetPackageManifestRequestHandler.cs +++ b/src/PepperDash.Essentials.Core/Web/RequestHandlers/GetPackageManifestRequestHandler.cs @@ -186,8 +186,11 @@ public class GetPackageManifestRequestHandler : WebApiBaseRequestHandler } } - // Configured but not currently loaded - pass through unchanged - mergedPackages.AddRange(configPackages.Where(p => !matchedConfigPackages.Contains(p))); + // Configured but not currently loaded - pass through unchanged, but keep the same + // "never emit an entry with no version" guarantee as the loaded-reflection branch above - + // otherwise this branch reintroduces the schema issue that guard is meant to prevent. + mergedPackages.AddRange(configPackages.Where(p => + !matchedConfigPackages.Contains(p) && !string.IsNullOrEmpty(p.Version))); result.Packages = mergedPackages; }