save development progress
This commit is contained in:
@@ -17,6 +17,7 @@ public sealed class DecisionDigestBuilder
|
||||
private DateTimeOffset? _createdAt;
|
||||
private DateTimeOffset? _expiresAt;
|
||||
private int? _trustScore;
|
||||
private TrustScoreBreakdown? _trustScoreBreakdown;
|
||||
private readonly ProvcacheOptions _options;
|
||||
private readonly TimeProvider _timeProvider;
|
||||
|
||||
@@ -217,7 +218,20 @@ public sealed class DecisionDigestBuilder
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Computes trust score from component scores using weighted formula.
|
||||
/// Sets the trust score from a breakdown, computing the total automatically.
|
||||
/// </summary>
|
||||
/// <param name="breakdown">The trust score breakdown with component scores.</param>
|
||||
public DecisionDigestBuilder WithTrustScoreBreakdown(TrustScoreBreakdown breakdown)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(breakdown);
|
||||
_trustScoreBreakdown = breakdown;
|
||||
_trustScore = breakdown.ComputeTotal();
|
||||
return this;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Computes trust score from component scores using weighted formula,
|
||||
/// and stores the breakdown for API responses.
|
||||
/// </summary>
|
||||
/// <param name="reachabilityScore">Reachability analysis coverage (0-100).</param>
|
||||
/// <param name="sbomCompletenessScore">SBOM completeness (0-100).</param>
|
||||
@@ -231,14 +245,16 @@ public sealed class DecisionDigestBuilder
|
||||
int policyFreshnessScore,
|
||||
int signerTrustScore)
|
||||
{
|
||||
// Weights from documentation:
|
||||
// Reachability: 25%, SBOM: 20%, VEX: 20%, Policy: 15%, Signer: 20%
|
||||
_trustScore = (int)Math.Round(
|
||||
reachabilityScore * 0.25 +
|
||||
sbomCompletenessScore * 0.20 +
|
||||
vexCoverageScore * 0.20 +
|
||||
policyFreshnessScore * 0.15 +
|
||||
signerTrustScore * 0.20);
|
||||
// Create breakdown with standard weights
|
||||
_trustScoreBreakdown = TrustScoreBreakdown.CreateDefault(
|
||||
reachabilityScore,
|
||||
sbomCompletenessScore,
|
||||
vexCoverageScore,
|
||||
policyFreshnessScore,
|
||||
signerTrustScore);
|
||||
|
||||
// Compute total from breakdown
|
||||
_trustScore = _trustScoreBreakdown.ComputeTotal();
|
||||
|
||||
// Clamp to valid range
|
||||
_trustScore = Math.Clamp(_trustScore.Value, 0, 100);
|
||||
@@ -263,7 +279,8 @@ public sealed class DecisionDigestBuilder
|
||||
ReplaySeed = _replaySeed!,
|
||||
CreatedAt = _createdAt!.Value,
|
||||
ExpiresAt = _expiresAt!.Value,
|
||||
TrustScore = _trustScore!.Value
|
||||
TrustScore = _trustScore!.Value,
|
||||
TrustScoreBreakdown = _trustScoreBreakdown
|
||||
};
|
||||
}
|
||||
|
||||
@@ -279,6 +296,7 @@ public sealed class DecisionDigestBuilder
|
||||
_createdAt = null;
|
||||
_expiresAt = null;
|
||||
_trustScore = null;
|
||||
_trustScoreBreakdown = null;
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user