# 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 single `Guid NewGuid()` method; `SystemGuidProvider` (sealed, singleton `Instance`, delegates to `Guid.NewGuid()`); `SequentialGuidProvider` (sealed, thread-safe via `Interlocked.Increment`, embeds counter in last 4 bytes of base GUID, `Reset()` method for test reuse) - **DeterminismServiceCollectionExtensions**: `src/__Libraries/StellaOps.Determinism.Abstractions/DeterminismServiceCollectionExtensions.cs` -- `AddSystemTimeProvider()` registers `TimeProvider.System` singleton; `AddSystemGuidProvider()` registers `SystemGuidProvider` as `IGuidProvider` singleton; `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 `Scheme` property (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 `SequentialGuidProvider` returns 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 `ResolverBoundaryAttribute` can be applied to methods and classes - [ ] Verify `SequentialGuidProvider` is thread-safe (concurrent calls produce unique GUIDs) - [ ] Test that `TryAddSingleton` prevents double registration when called multiple times - [ ] Verify `DeterministicOutputAttribute` captures hash algorithm and signing flag