up
Some checks failed
Docs CI / lint-and-preview (push) Has been cancelled
Mirror Thin Bundle Sign & Verify / mirror-sign (push) Has been cancelled
Signals CI & Image / signals-ci (push) Has been cancelled

This commit is contained in:
StellaOps Bot
2025-11-26 07:47:08 +02:00
parent 56e2f64d07
commit 1c782897f7
184 changed files with 8991 additions and 649 deletions

View File

@@ -26,6 +26,11 @@ public sealed class SignalsMongoOptions
/// Collection name storing reachability facts.
/// </summary>
public string ReachabilityFactsCollection { get; set; } = "reachability_facts";
/// <summary>
/// Collection name storing unresolved symbols/edges (Unknowns Registry).
/// </summary>
public string UnknownsCollection { get; set; } = "unknowns";
/// <summary>
/// Validates the configured values.
@@ -51,5 +56,10 @@ public sealed class SignalsMongoOptions
{
throw new InvalidOperationException("Signals reachability fact collection name must be configured.");
}
if (string.IsNullOrWhiteSpace(UnknownsCollection))
{
throw new InvalidOperationException("Signals unknowns collection name must be configured.");
}
}
}

View File

@@ -32,6 +32,24 @@ public sealed class SignalsScoringOptions
/// </summary>
public double MinConfidence { get; set; } = 0.05;
/// <summary>
/// Maximum fraction to subtract from overall fact score when unknowns are present.
/// </summary>
public double UnknownsPenaltyCeiling { get; set; } = 0.35;
/// <summary>
/// Multipliers applied per reachability bucket. Keys are case-insensitive.
/// Defaults mirror policy scoring config guidance in docs/11_DATA_SCHEMAS.md.
/// </summary>
public Dictionary<string, double> ReachabilityBuckets { get; } = new(StringComparer.OrdinalIgnoreCase)
{
{ "entrypoint", 1.0 },
{ "direct", 0.85 },
{ "runtime", 0.45 },
{ "unknown", 0.5 },
{ "unreachable", 0.0 }
};
public void Validate()
{
EnsurePercent(nameof(ReachableConfidence), ReachableConfidence);
@@ -39,6 +57,11 @@ public sealed class SignalsScoringOptions
EnsurePercent(nameof(RuntimeBonus), RuntimeBonus);
EnsurePercent(nameof(MaxConfidence), MaxConfidence);
EnsurePercent(nameof(MinConfidence), MinConfidence);
EnsurePercent(nameof(UnknownsPenaltyCeiling), UnknownsPenaltyCeiling);
foreach (var (key, value) in ReachabilityBuckets)
{
EnsurePercent($"ReachabilityBuckets[{key}]", value);
}
if (MinConfidence > UnreachableConfidence)
{