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

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 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