2.7 KiB
2.7 KiB
Evidence Graph with Validation
Module
__Libraries
Status
IMPLEMENTED
Description
Evidence graph model with pre-traversal validation, cycle detection, and policy integration.
Implementation Details
- EvidenceGraph:
src/__Libraries/StellaOps.Resolver/EvidenceGraph.cs-- immutable record withImmutableArray<Node> NodesandImmutableArray<Edge> Edges(both sorted by ID for determinism); content-addressedGraphDigestcomputed viaCanonicalJsonSerializer.SerializeWithDigest; factory methodCreate(nodes, edges)sorts collections;AddNode/AddEdgereturn new immutable instances;GetInboundEdges/GetOutboundEdgesfor graph traversal;NodeIds/EdgeIdslazy computed sorted arrays - GraphValidation:
src/__Libraries/StellaOps.Resolver/GraphValidation.cs--DefaultGraphValidatorcombining cycle detection and implicit data detection;TarjanCycleDetector(Tarjan's SCC algorithm, excludesIsCycleCutedges from adjacency);DefaultImplicitDataDetectorcatches dangling edge sources/destinations, duplicate NodeIds, duplicate EdgeIds;GraphValidationResultrecord withIsValid,Cycles,Errors,Warnings,ImplicitDataViolations;CycleInforecord with CycleNodes and optional CutEdge;ImplicitDataViolationrecord;InvalidGraphExceptionfor validation failures - DeterministicResolver:
src/__Libraries/StellaOps.Resolver/DeterministicResolver.cs-- 4-phase resolution: (1) Validate graph viaIGraphValidator, (2) Compute traversal order viaIGraphOrderer, (3) Evaluate each node withITrustLatticeEvaluatorusing predecessor verdicts, (4) Compute final digest viaIFinalDigestComputer;ResolutionResultwith TraversalSequence, Verdicts, GraphDigest, PolicyDigest, FinalDigest, ResolvedAt, ResolverVersion - TopologicalGraphOrderer:
src/__Libraries/StellaOps.Resolver/TopologicalGraphOrderer.cs-- deterministic topological sort for traversal ordering - ResolutionVerifier:
src/__Libraries/StellaOps.Resolver/ResolutionVerifier.cs-- verifies resolution results for integrity - Source: Feature matrix scan
E2E Test Plan
- Verify EvidenceGraph.Create sorts nodes and edges deterministically
- Test GraphDigest is content-addressed and changes when nodes/edges change
- Verify TarjanCycleDetector finds cycles and identifies IsCycleCut edges
- Test DefaultImplicitDataDetector catches dangling edges and duplicate IDs
- Verify DeterministicResolver produces identical ResolutionResult for same inputs
- Test 4-phase resolution: validate, order, evaluate, digest
- Verify immutability: AddNode/AddEdge return new graph instances without mutating original
- Test InvalidGraphException contains validation error details