2.6 KiB
2.6 KiB
IGuidProvider Determinism Abstraction Library
Module
__Libraries
Status
IMPLEMENTED
Description
New StellaOps.Determinism.Abstractions library providing IGuidProvider and SystemGuidProvider/SequentialGuidProvider for deterministic GUID generation. Includes DI extensions and ResolverBoundaryAttribute. Sprint completed systematic refactoring across 21 tasks injecting TimeProvider and IGuidProvider into all modules (~1526+ instances replaced).
Implementation Details
- IGuidProvider:
src/__Libraries/StellaOps.Determinism.Abstractions/IGuidProvider.cs-- interface with singleGuid NewGuid()method;SystemGuidProvider(sealed, singletonInstance, delegates toGuid.NewGuid());SequentialGuidProvider(sealed, thread-safe viaInterlocked.Increment, embeds counter in last 4 bytes of base GUID,Reset()method for test reuse) - DeterminismServiceCollectionExtensions:
src/__Libraries/StellaOps.Determinism.Abstractions/DeterminismServiceCollectionExtensions.cs--AddSystemTimeProvider()registersTimeProvider.Systemsingleton;AddSystemGuidProvider()registersSystemGuidProviderasIGuidProvidersingleton;AddDeterminismDefaults()registers both (recommended for production) - ResolverBoundaryAttribute:
src/__Libraries/StellaOps.Determinism.Abstractions/ResolverBoundaryAttribute.cs--[ResolverBoundary]marks methods/classes as resolver boundaries requiring canonicalization; properties:RequireNfc(NFC normalization),RequireOrdering(collection ordering, default true),Description; STELLA0100 analyzer enforces RFC 8785 JCS within marked scopes - RequiresCanonicalizationAttribute: same file -- alias attribute with
Schemeproperty (default "RFC8785") - DeterministicOutputAttribute: same file -- marks methods producing deterministic output; properties:
HashAlgorithm(default "SHA256"),IsSigned - Source: batch_51/file_13.md
E2E Test Plan
- Verify
SystemGuidProvider.NewGuid()returns unique GUIDs (non-deterministic, for production) - Verify
SequentialGuidProviderreturns predictable sequence with counter in last 4 bytes - Test
SequentialGuidProvider.Reset()restarts counter from zero - Verify
AddDeterminismDefaults()registers both TimeProvider and IGuidProvider in DI container - Test
ResolverBoundaryAttributecan be applied to methods and classes - Verify
SequentialGuidProvideris thread-safe (concurrent calls produce unique GUIDs) - Test that
TryAddSingletonprevents double registration when called multiple times - Verify
DeterministicOutputAttributecaptures hash algorithm and signing flag