v1.39.0 ✅

  • OneOf<T1..T8> sealed class — all OneOf types converted from readonly struct to sealed class; OneOf<T1..T7> and OneOf<T1..T8> added for full arity symmetry ⚠️ breaking: copy→reference semantics
  • OneOfBase<T1..T8> — unconstrained abstract class holding all shared dispatch (IsT1..T8, AsT1..T8, Match, Switch, Equals, GetHashCode, ToString); OneOf and ErrorsOf both inherit it
  • IOneOf<T1..T8> — shared interface implemented by both OneOf<> and ErrorsOf<>; enables generic programming over any discriminated union
  • ErrorsOf<T1..T8> — new error union type; where Ti : IError; implements IError (delegates Message/Tags to active case); implicit conversions from each Ti; factory methods FromT1..FromT8
  • Result<TValue, TError> — new typed result with where TError : IError; factory Ok(value) / Fail(error); IsSuccess, IsFailure, Value, Error
  • Bind ×7 — typed pipeline — grows the error union one slot per step (Result<T,T1> + T2 → Result<T, ErrorsOf<T1,T2>> … through 7→8 slot); enables compile-time exhaustive Match at callsites
  • Map, Tap, TapOnFailure — typed pipeline — value transform / side effects on Result<TValue, TError>; error type unchanged
  • Ensure ×7 + EnsureAsync ×7 — typed pipeline — guard conditions that widen the error union (same O(n) growth pattern as Bind); async variant accepts Func<TValue, Task<bool>>
  • MapError — typed pipeline — translates the error surface via Func<TErrorIn, TErrorOut>; collapse unions, adapt at layer boundaries
  • Result.Flow type-read mode — failure edges in generated Mermaid diagrams now show the exact ErrorsOf<...> type for Result<T, TError> pipelines; zero body scanning; HTML-escaped angle brackets for Mermaid compatibility
  • 153 features across 13 categories
  • 4,000 tests