From 42480cc751eba3b93dd5bfd1f1e47a91b3a72dac Mon Sep 17 00:00:00 2001 From: Erik Date: Fri, 10 Apr 2026 09:40:17 +0200 Subject: [PATCH] refactor(core): preserve exception in PluginDiscoveryResult + order deterministically Addresses code quality review of 9161868: - PluginDiscoveryResult.Error is now Exception? rather than string?, preserving stack traces across the plugin boundary for logging - PluginDiscovery.Scan orders subdirectories by ordinal string comparison so plugin load order is reproducible across platforms --- src/AcDream.Core/Plugins/PluginDiscovery.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/AcDream.Core/Plugins/PluginDiscovery.cs b/src/AcDream.Core/Plugins/PluginDiscovery.cs index 616616c..16b524d 100644 --- a/src/AcDream.Core/Plugins/PluginDiscovery.cs +++ b/src/AcDream.Core/Plugins/PluginDiscovery.cs @@ -3,7 +3,7 @@ namespace AcDream.Core.Plugins; public sealed record PluginDiscoveryResult( string PluginDirectory, PluginManifest? Manifest, - string? Error) + Exception? Error) { public bool Success => Manifest is not null && Error is null; } @@ -16,7 +16,7 @@ public static class PluginDiscovery return Array.Empty(); var results = new List(); - foreach (var subdir in Directory.EnumerateDirectories(pluginsRootDirectory)) + foreach (var subdir in Directory.EnumerateDirectories(pluginsRootDirectory).OrderBy(p => p, StringComparer.Ordinal)) { var manifestPath = Path.Combine(subdir, "plugin.json"); if (!File.Exists(manifestPath)) @@ -30,7 +30,7 @@ public static class PluginDiscovery } catch (Exception ex) { - results.Add(new PluginDiscoveryResult(subdir, null, ex.Message)); + results.Add(new PluginDiscoveryResult(subdir, null, ex)); } } return results;