using System; namespace StellaOps.Scanner.Reachability; /// /// Represents optional symbol metadata (mangled/demangled names, source, confidence). /// Used to enrich reachability evidence without altering canonical IDs. /// public sealed record ReachabilitySymbol( string? Mangled, string? Demangled, string? Source, double? Confidence) { public ReachabilitySymbol Trimmed() => new( TrimOrNull(Mangled), TrimOrNull(Demangled), NormalizeSource(Source), Confidence is null ? null : ClampConfidence(Confidence.Value)); private static string? TrimOrNull(string? value) => string.IsNullOrWhiteSpace(value) ? null : value.Trim(); private static string? NormalizeSource(string? source) { if (string.IsNullOrWhiteSpace(source)) { return null; } return source.Trim().ToUpperInvariant(); } private static double ClampConfidence(double value) => Math.Max(0.0, Math.Min(1.0, value)); }