Files
git.stella-ops.org/docs/features/unchecked/libraries/iguidprovider-determinism-abstraction-library.md

29 lines
2.6 KiB
Markdown

# 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