UI work to fill SBOM sourcing management gap. UI planning remaining functionality exposure. Work on CI/Tests stabilization
Introduces CGS determinism test runs to CI workflows for Windows, macOS, Linux, Alpine, and Debian, fulfilling CGS-008 cross-platform requirements. Updates local-ci scripts to support new smoke steps, test timeouts, progress intervals, and project slicing for improved test isolation and diagnostics.
This commit is contained in:
@@ -118,6 +118,164 @@ public sealed record VexDeltaRationale
|
||||
/// </summary>
|
||||
[JsonPropertyName("justificationCode")]
|
||||
public string? JustificationCode { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// Merge trace from VexLens consensus computation (if status change was from consensus).
|
||||
/// Captures how the consensus was reached, including contributing statements and conflicts.
|
||||
/// </summary>
|
||||
[JsonPropertyName("mergeTrace")]
|
||||
public ConsensusMergeTrace? MergeTrace { get; init; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Merge trace from VexLens consensus computation.
|
||||
/// Records how a consensus status was reached from multiple VEX statements.
|
||||
/// </summary>
|
||||
public sealed record ConsensusMergeTrace
|
||||
{
|
||||
/// <summary>
|
||||
/// Summary of the consensus computation.
|
||||
/// </summary>
|
||||
[JsonPropertyName("summary")]
|
||||
public required string Summary { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// List of factors that influenced the consensus decision.
|
||||
/// </summary>
|
||||
[JsonPropertyName("factors")]
|
||||
public required IReadOnlyList<string> Factors { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// Weight assigned to each status by contributing statements.
|
||||
/// </summary>
|
||||
[JsonPropertyName("statusWeights")]
|
||||
public required IReadOnlyDictionary<string, double> StatusWeights { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// Consensus mode used (HighestWeight, WeightedVote, Lattice, AuthoritativeFirst).
|
||||
/// </summary>
|
||||
[JsonPropertyName("consensusMode")]
|
||||
public required string ConsensusMode { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// Outcome of the consensus (Unanimous, Majority, Plurality, ConflictResolved, NoData).
|
||||
/// </summary>
|
||||
[JsonPropertyName("outcome")]
|
||||
public required string Outcome { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// Confidence score (0-1) in the consensus result.
|
||||
/// </summary>
|
||||
[JsonPropertyName("confidenceScore")]
|
||||
public required double ConfidenceScore { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// Contributions from each VEX statement that participated in consensus.
|
||||
/// </summary>
|
||||
[JsonPropertyName("contributions")]
|
||||
public IReadOnlyList<StatementContributionSnapshot>? Contributions { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// Conflicts detected during consensus computation.
|
||||
/// </summary>
|
||||
[JsonPropertyName("conflicts")]
|
||||
public IReadOnlyList<ConsensusConflictSnapshot>? Conflicts { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// When the consensus was computed.
|
||||
/// </summary>
|
||||
[JsonPropertyName("computedAt")]
|
||||
public required DateTimeOffset ComputedAt { get; init; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Snapshot of a VEX statement's contribution to consensus.
|
||||
/// </summary>
|
||||
public sealed record StatementContributionSnapshot
|
||||
{
|
||||
/// <summary>
|
||||
/// Statement identifier.
|
||||
/// </summary>
|
||||
[JsonPropertyName("statementId")]
|
||||
public required string StatementId { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// Issuer identifier.
|
||||
/// </summary>
|
||||
[JsonPropertyName("issuerId")]
|
||||
public string? IssuerId { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// Issuer name.
|
||||
/// </summary>
|
||||
[JsonPropertyName("issuerName")]
|
||||
public string? IssuerName { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// Status from this statement.
|
||||
/// </summary>
|
||||
[JsonPropertyName("status")]
|
||||
public required string Status { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// Weight assigned to this statement.
|
||||
/// </summary>
|
||||
[JsonPropertyName("weight")]
|
||||
public required double Weight { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// Contribution fraction (weight / total_weight).
|
||||
/// </summary>
|
||||
[JsonPropertyName("contribution")]
|
||||
public required double Contribution { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// Whether this statement was the winning contributor.
|
||||
/// </summary>
|
||||
[JsonPropertyName("isWinner")]
|
||||
public required bool IsWinner { get; init; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Snapshot of a conflict detected during consensus.
|
||||
/// </summary>
|
||||
public sealed record ConsensusConflictSnapshot
|
||||
{
|
||||
/// <summary>
|
||||
/// First conflicting statement ID.
|
||||
/// </summary>
|
||||
[JsonPropertyName("statement1Id")]
|
||||
public required string Statement1Id { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// Second conflicting statement ID.
|
||||
/// </summary>
|
||||
[JsonPropertyName("statement2Id")]
|
||||
public required string Statement2Id { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// Status from first statement.
|
||||
/// </summary>
|
||||
[JsonPropertyName("status1")]
|
||||
public required string Status1 { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// Status from second statement.
|
||||
/// </summary>
|
||||
[JsonPropertyName("status2")]
|
||||
public required string Status2 { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// Conflict severity (Critical, High, Medium, Low).
|
||||
/// </summary>
|
||||
[JsonPropertyName("severity")]
|
||||
public required string Severity { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// How the conflict was resolved.
|
||||
/// </summary>
|
||||
[JsonPropertyName("resolution")]
|
||||
public required string Resolution { get; init; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user