new advisories work and features gaps work

This commit is contained in:
master
2026-01-14 18:39:19 +02:00
parent 95d5898650
commit 15aeac8e8b
148 changed files with 16731 additions and 554 deletions

View File

@@ -55,7 +55,9 @@ public sealed record RichGraphNode(
IReadOnlyDictionary<string, string>? Attributes,
string? SymbolDigest,
ReachabilitySymbol? Symbol = null,
string? CodeBlockHash = null)
string? CodeBlockHash = null,
// Sprint: SPRINT_20260112_004_SCANNER_path_witness_nodehash (PW-SCN-002)
string? NodeHash = null)
{
public RichGraphNode Trimmed()
{
@@ -71,6 +73,7 @@ public sealed record RichGraphNode(
BuildId = string.IsNullOrWhiteSpace(BuildId) ? null : BuildId.Trim(),
CodeBlockHash = string.IsNullOrWhiteSpace(CodeBlockHash) ? null : CodeBlockHash.Trim(),
SymbolDigest = string.IsNullOrWhiteSpace(SymbolDigest) ? null : SymbolDigest.Trim(),
NodeHash = string.IsNullOrWhiteSpace(NodeHash) ? null : NodeHash.Trim(),
Symbol = Symbol?.Trimmed(),
Evidence = Evidence is null
? Array.Empty<string>()

View File

@@ -53,6 +53,14 @@ public sealed record ReachabilitySubgraphNode
[JsonPropertyName("attributes")]
public IReadOnlyDictionary<string, string>? Attributes { get; init; }
// Sprint: SPRINT_20260112_004_SCANNER_path_witness_nodehash (PW-SCN-002)
/// <summary>
/// Canonical node hash computed from PURL and symbol using NodeHashRecipe.
/// </summary>
[JsonPropertyName("nodeHash")]
public string? NodeHash { get; init; }
}
/// <summary>