using System.Collections.Immutable;
namespace StellaOps.Scanner.ChangeTrace.Builder;
///
/// Options for change trace building.
///
public sealed record ChangeTraceBuilderOptions
{
///
/// Include package-level diffing. Default: true.
///
public bool IncludePackageDiff { get; init; } = true;
///
/// Include symbol-level diffing. Default: true.
///
public bool IncludeSymbolDiff { get; init; } = true;
///
/// Include byte-level diffing. Default: false.
///
public bool IncludeByteDiff { get; init; } = false;
///
/// Minimum confidence threshold for symbol matches.
/// Default: 0.75.
///
public double MinSymbolConfidence { get; init; } = 0.75;
///
/// Rolling hash window size for byte diffing.
/// Default: 2048 bytes.
///
public int ByteDiffWindowSize { get; init; } = 2048;
///
/// Maximum binary size for byte-level analysis (bytes).
/// Default: 10MB.
///
public long MaxBinarySize { get; init; } = 10 * 1024 * 1024;
///
/// Lattice policies to apply during trust delta computation.
/// Default: ["lattice:default@v3"].
///
public ImmutableArray Policies { get; init; } = ["lattice:default@v3"];
///
/// Gets the diff methods enabled based on options.
///
public ImmutableArray GetDiffMethods()
{
var methods = ImmutableArray.CreateBuilder();
if (IncludePackageDiff) methods.Add("pkg");
if (IncludeSymbolDiff) methods.Add("symbol");
if (IncludeByteDiff) methods.Add("byte");
return methods.ToImmutable();
}
///
/// Default options instance.
///
public static ChangeTraceBuilderOptions Default { get; } = new();
}