using System; using System.Collections.Generic; using System.Text.Json.Serialization; namespace StellaOps.Reachability.FixtureTests.PatchOracle; /// /// Root model for patch-oracle fixture files. /// public sealed record PatchOracleDefinition { [JsonPropertyName("schema_version")] public string SchemaVersion { get; init; } = "patch-oracle/v1"; [JsonPropertyName("id")] public required string Id { get; init; } [JsonPropertyName("case_ref")] public required string CaseRef { get; init; } [JsonPropertyName("variant")] public required string Variant { get; init; } [JsonPropertyName("description")] public string? Description { get; init; } [JsonPropertyName("expected_functions")] public IReadOnlyList ExpectedFunctions { get; init; } = Array.Empty(); [JsonPropertyName("expected_edges")] public IReadOnlyList ExpectedEdges { get; init; } = Array.Empty(); [JsonPropertyName("expected_roots")] public IReadOnlyList ExpectedRoots { get; init; } = Array.Empty(); [JsonPropertyName("forbidden_functions")] public IReadOnlyList ForbiddenFunctions { get; init; } = Array.Empty(); [JsonPropertyName("forbidden_edges")] public IReadOnlyList ForbiddenEdges { get; init; } = Array.Empty(); [JsonPropertyName("min_confidence")] public double MinConfidence { get; init; } = 0.5; [JsonPropertyName("strict_mode")] public bool StrictMode { get; init; } = false; [JsonPropertyName("created_at")] public DateTimeOffset? CreatedAt { get; init; } [JsonPropertyName("updated_at")] public DateTimeOffset? UpdatedAt { get; init; } } /// /// Expected function/node in the graph. /// public sealed record ExpectedFunction { [JsonPropertyName("symbol_id")] public required string SymbolId { get; init; } [JsonPropertyName("lang")] public string? Lang { get; init; } [JsonPropertyName("kind")] public string? Kind { get; init; } [JsonPropertyName("purl_pattern")] public string? PurlPattern { get; init; } [JsonPropertyName("required")] public bool Required { get; init; } = true; [JsonPropertyName("reason")] public string? Reason { get; init; } } /// /// Expected edge in the graph. /// public sealed record ExpectedEdge { [JsonPropertyName("from")] public required string From { get; init; } [JsonPropertyName("to")] public required string To { get; init; } [JsonPropertyName("kind")] public string? Kind { get; init; } [JsonPropertyName("min_confidence")] public double? MinConfidence { get; init; } [JsonPropertyName("required")] public bool Required { get; init; } = true; [JsonPropertyName("reason")] public string? Reason { get; init; } } /// /// Expected root node in the graph. /// public sealed record ExpectedRoot { [JsonPropertyName("id")] public required string Id { get; init; } [JsonPropertyName("phase")] public string? Phase { get; init; } [JsonPropertyName("required")] public bool Required { get; init; } = true; [JsonPropertyName("reason")] public string? Reason { get; init; } } /// /// Index entry for an oracle. /// public sealed record PatchOracleIndexEntry { [JsonPropertyName("id")] public required string Id { get; init; } [JsonPropertyName("case_ref")] public required string CaseRef { get; init; } [JsonPropertyName("variant")] public required string Variant { get; init; } [JsonPropertyName("path")] public required string Path { get; init; } } /// /// Root model for patch-oracle INDEX.json. /// public sealed record PatchOracleIndex { [JsonPropertyName("version")] public string Version { get; init; } = "1.0"; [JsonPropertyName("schema")] public string Schema { get; init; } = "patch-oracle/v1"; [JsonPropertyName("generated_at")] public DateTimeOffset? GeneratedAt { get; init; } [JsonPropertyName("description")] public string? Description { get; init; } [JsonPropertyName("oracles")] public IReadOnlyList Oracles { get; init; } = Array.Empty(); }