Skip to content

Features reference by category

1. Core Library — REslava.Result

Feature Short Description Version Docs
Result<T> type Type-safe success/failure container v1.0.0 ## REslava.Result Core Library
Result<T>.Ok(value) / Fail(error) Factory methods v1.0.0 ## REslava.Result Core Library
Result<T>.IsSuccess / IsFailure Status properties v1.0.0 ## REslava.Result Core Library
Result<T>.Value Value access (unsafe without IsSuccess guard) v1.0.0 ## REslava.Result Core Library
GetValueOr() / TryGetValue() Safe value access v1.0.0 ## 📐 REslava.Result Core Library### Complete Method Catalog
Match() Exhaustive pattern matching v1.0.0 ## REslava.Result Core Library
Bind() / BindAsync() Monadic chaining v1.0.0 ## REslava.Result Core Library
Map() / MapAsync() Value transformation v1.0.0 ## REslava.Result Core Library
Tap() / TapAsync() Side-effects without changing result v1.0.0 ## REslava.Result Core Library
TapOnFailure() Side-effect only on failure v1.20.0 ## 📐 REslava.Result Core Library### Tap on Failure
Ensure() / EnsureNotNull() Guard conditions v1.0.0 ## 📐 REslava.Result Core Library### Complete Method Catalog
WithSuccess() / WithError() / WithTag() Fluent builders v1.0.0 ## ⚠️ Error Types### Rich Error Context
Result.OkIf() / FailIf() Conditional factory (lazy + async overloads) v1.20.0 ## 📐 REslava.Result Core Library### Conditional Factories
Result.Try() / TryAsync() Exception-safe factory (wraps try-catch) v1.20.0 ## 📐 REslava.Result Core Library### Exception Wrapping
Result.Catch<TException>() / CatchAsync<TException>() Inline typed exception handling in pipelines — converts ExceptionError wrapping TException to a different IError; Task extension also catches direct throws v1.29.0 ## 📐 REslava.Result Core Library### 🪤 Inline Exception Handling
Result.WithActivity(Activity?) Enriches an existing OTel Activity span with outcome tags (result.outcome, result.error.type, etc.) and status — side-effect (Tap-style), null-safe v1.30.0 ## 📐 REslava.Result Core Library### 📡 OpenTelemetry Integration
Result.WithLogger(ILogger, string) / LogOnFailure(ILogger, string) Tap-style ILogger integration — Debug on success, Warning on domain failure, Error on ExceptionError; structured log properties; Task extensions with CancellationToken v1.31.0 ## 📐 REslava.Result Core Library### 📝 Structured Logging
Result.Recover() / RecoverAsync() Recovery from any failure — transforms failure into a new Result<T> (success or failure); error list passed to recovery func; both Result and Result<T>; Task extensions with CancellationToken v1.31.0 ## 📐 REslava.Result Core Library### 🔄 Railway Recovery
Result.Filter() / FilterAsync() Converts success to failure when predicate fails; Func<T, IError> error factory enables value-dependent contextual messages; 3 sync overloads (factory / static IError / string); async predicate variant; Task extensions v1.31.0 ## 📐 REslava.Result Core Library### 🔍 Predicate Filtering
Result.Validate() Applicative validation — runs 2/3/4 independent Result<T> validations simultaneously, accumulates ALL errors, maps heterogeneous success values to Result<TResult> via mapper func v1.32.0
Switch() / SwitchAsync() Void side-effect dispatch — routes success/failure to two actions; Task extensions enable end-of-chain dispatch after async pipelines v1.37.0
MapError() / MapErrorAsync() Transforms errors in the failure path — symmetric counterpart to Map; success passes through unchanged; Task extensions v1.37.0
Or() / OrElse() / OrElseAsync() Fallback result on failure — simpler API than Recover; Or(fallback) eager, OrElse(factory) lazy with errors; Task extensions v1.37.0
Result<T>.Deconstruct() C# 8+ tuple unpacking — (value, errors) 2-way and (isSuccess, value, errors) 3-way for Result<T>; (isSuccess, errors) for non-generic Result v1.32.0
Result.Combine() / Merge() Aggregate multiple results v1.20.0 ## 📐 REslava.Result Core Library### Complete Method Catalog
Result.WhenAll() Run concurrent async Results, aggregate errors v1.18.0 ## REslava.Result Core Library### Async Patterns
Result.Retry() Retry with delay + exponential backoff v1.18.0 ## REslava.Result Core Library### Async Patterns
.Timeout() Enforce time limit on async operation v1.18.0 ## REslava.Result Core Library### Async Patterns
CancellationToken support All async methods accept CancellationToken v1.19.0 ## 📐 REslava.Result Core Library### CancellationToken Support
LINQ integration from x in result select ..., Sequence(), Traverse() v1.12.0 ## REslava.Result Core Library### LINQ Integration
CRTP fluent chaining WithTag(), WithMessage() type-safe on all Reason types v1.9.4 ## REslava.Result Core Library### CRTP Pattern
Functional composition Compose(), higher-order functions v1.12.0 ## REslava.Result Core Library### Advanced Extensions
Maybe<T> Null-safe optional type v1.12.0 ## Advanced Patterns### Maybe<T>
Maybe<T>Result<T> interop maybe.ToResult(errorFactory/error/string) + result.ToMaybe() — bidirectional bridge; ToMaybe discards errors v1.32.0
OneOf<T1,T2> 2-type discriminated union v1.12.0 ## Advanced Patterns### OneOf
OneOf<T1,T2,T3> 3-type discriminated union v1.12.0 ## Advanced Patterns### OneOf
OneOf<T1,T2,T3,T4> 4-type discriminated union v1.12.0 ## Advanced Patterns### OneOf
OneOf<T1..T5> 5-type discriminated union v1.27.0 ## Advanced Patterns### OneOf
OneOf<T1..T6> 6-type discriminated union v1.27.0 ## Advanced Patterns### OneOf
OneOf<T1..T7> 7-type discriminated union (sealed class) v1.39.0 ## OneOf Unions### 8.1.
OneOf<T1..T8> 8-type discriminated union (sealed class) v1.39.0 ## OneOf Unions### 8.1.
OneOf sealed class All OneOf<> types converted from readonly struct to sealed class; copy → reference semantics ⚠️ breaking v1.39.0 ## OneOf Unions### 8.1.
OneOfBase<T1..T8> Abstract base class with all shared dispatch (IsT1..T8, AsT1..T8, Match, Switch, equality); inherited by OneOf and ErrorsOf v1.39.0 ## OneOf Unions
IOneOf<T1..T8> Shared interface implemented by OneOf<> and ErrorsOf<>; enables generic programming over any discriminated union v1.39.0 ## OneOf Unions
ErrorsOf<T1..T8> Typed error union; where Ti : IError; implements IError (delegates to active case); implicit conversions; factory FromT1..FromT8 v1.39.0 ## Typed Error Pipelines### 9.1.
Result<TValue, TError> Typed result with concrete error type; Ok(value) / Fail(error); IsSuccess, IsFailure, Value, Error v1.39.0 ## Typed Error Pipelines### 9.2.
Bind ×7 — typed pipeline Grows error union one slot per step: Result<TIn,T1> → Result<TOut, ErrorsOf<T1,T2>> through 7→8 slots v1.39.0 ## Typed Error Pipelines### 9.3.
Map — typed pipeline Transforms success value; TError unchanged; single generic overload v1.39.0 ## Typed Error Pipelines### 9.4.
Tap / TapOnFailure — typed pipeline Side effects on success / failure; original result returned unchanged v1.39.0 ## Typed Error Pipelines### 9.4.
Ensure ×7 — typed pipeline Guard conditions that widen the error union by one slot when predicate fails; same O(n) growth as Bind v1.39.0 ## Typed Error Pipelines### 9.5.
EnsureAsync ×7 — typed pipeline Async variant of Ensure; predicate is Func<TValue, Task<bool>> v1.39.0 ## Typed Error Pipelines### 9.5.
MapError — typed pipeline Translates error surface via Func<TErrorIn, TErrorOut>; collapse unions, adapt at layer boundaries v1.39.0 ## Typed Error Pipelines### 9.6.
OneOf chain extensions ToFourWay, ToFiveWay, ToSixWay + down-conversions across full 2↔3↔4↔5↔6 arity chain v1.27.0 ## Advanced Patterns### OneOf
Native Validation DSL 19 fluent methods on ValidatorRuleBuilder<T>: NotEmpty, MaxLength, EmailAddress, Range, Positive, NonNegative, etc. Expression<Func<T,TProperty>> auto-infers field names v1.27.0 ## Validation Rules### Validation DSL
JSON Serialization AddREslavaResultConverters() for Result, OneOf, Maybe v1.17.0 ## REslava.Result Core Library#### JSON Serialization
Performance optimizations Cached Errors/Successes, immutable design v1.20.0 ## Advanced Patterns### Performance Patterns

2. Error Types — REslava.Result

Feature Short Description Version Docs
Error Generic application error, base concrete type v1.0.0 ## ⚠️ Error Types### Generic Errors
ValidationError HTTP 422, optional FieldName property v1.20.0 ## Advanced Patterns### Domain Error Hierarchy
NotFoundError HTTP 404, (entityName, id) constructor v1.20.0 ## Advanced Patterns### Domain Error Hierarchy
ConflictError HTTP 409, (entityName, conflictField, value) v1.20.0 ## Advanced Patterns### Domain Error Hierarchy
UnauthorizedError HTTP 401, default message v1.20.0 ## Advanced Patterns### Domain Error Hierarchy
ForbiddenError HTTP 403, (action, resource) constructor v1.20.0 ## Advanced Patterns### Domain Error Hierarchy
ExceptionError Wraps .NET Exception with StackTrace tag v1.0.0 ## ⚠️ Error Types### Generic Errors
ConversionError Implicit conversion failure, Severity=Warning tag v1.0.0 ## ⚠️ Error Types
Success Success reason with message v1.0.0 ## ⚠️ Error Types### Success — Success Reasons
IError.Tags dict Rich metadata: HttpStatusCode, ErrorType, custom v1.9.4 ## Advanced Patterns### Rich Error Context
WithTag(key, value) Fluent tag builder on any Reason v1.9.4 ## Advanced Patterns### Rich Error Context
HttpStatusCode convention Domain errors carry tag; read by ToIResult/ToActionResult v1.20.0 ## Complete Architecture### Error → HTTP Status Code Convention
TagKey<T> abstract record TagKey(string Name) + sealed record TagKey<T>(string Name) : TagKey(Name) — typed accessor into ImmutableDictionary<string, object> Tags v1.41.0 ## Error Types### Typed Tags
DomainTags Predefined typed domain tag keys: Entity, EntityId, Field, Value, Operation v1.41.0 ## Error Types### Typed Tags
SystemTags Predefined typed integration tag keys: HttpStatus, ErrorCode, RetryAfter, Service v1.41.0 ## Error Types### Typed Tags
WithTag<T>(TagKey<T>, T) typed overload Typed fluent tag builder on all Reason<T> subclasses v1.41.0 ## Error Types### Typed Tags
ReasonTagExtensions TryGet<T> + Has<T> — typed tag reads on any IReason v1.41.0 ## Error Types### Typed Tags
IErrorFactory<TSelf> C# 11 static abstract interface — static abstract TSelf Create(string message) v1.41.0 ## Error Types### Typed Tags
Built-in errors implement IErrorFactory<TSelf> Error, NotFoundError, ConflictError, ValidationError, ForbiddenError, UnauthorizedError v1.41.0 ## Error Types### Typed Tags
Result.Fail<TError>(string) Typed factory overload; where TError : IError, IErrorFactory<TError> v1.41.0 ## Error Types### Typed Tags
DomainTags.CorrelationId TagKey<string> — context → error tag injection key v1.42.0
DomainTags.OperationName TagKey<string> — context → error tag injection key v1.42.0
DomainTags.TenantId TagKey<string> — context → error tag injection key v1.42.0

3. Source Generators — SmartEndpoints

Feature Short Description Version Docs
[AutoGenerateEndpoints] Class-level: auto-generates Minimal API endpoints for all Result/OneOf methods v1.9.4 ## 🚀 SmartEndpoints### [AutoGenerateEndpoints]
RoutePrefix property Override route prefix; default derived from class name v1.20.0 ## 🚀 SmartEndpoints### [AutoGenerateEndpoints] property table
[AutoMapEndpoint(route)] Method-level: explicit route/method/name/tags override v1.9.4 ## 🚀 SmartEndpoints### [AutoMapEndpoint] with full property table
[SmartAllowAnonymous] Per-method: override class RequiresAuth, allow anonymous v1.13.0 ## 🚀 SmartEndpoints### Authorization
[SmartFilter(typeof(T))] Per-method: generates .AddEndpointFilter<T>(), stackable v1.23.0 ## 🚀 SmartEndpoints### Endpoint Filters
RequiresAuth / Policies / Roles Class-level auth: .RequireAuthorization() / policies / roles v1.13.0 ## 🚀 SmartEndpoints### Authorization
AllowAnonymous on [AutoMapEndpoint] Method-level auth override v1.13.0 ## 🚀 SmartEndpoints### Authorization
CacheSeconds (class + method) Output caching for GET endpoints; -1 = opt-out v1.23.0 ## 🚀 SmartEndpoints### Output Caching & Rate Limiting
RateLimitPolicy (class + method) .RequireRateLimiting("policy"); "none" = opt-out v1.23.0 ## 🚀 SmartEndpoints### Output Caching & Rate Limiting
EndpointMappingStrategy enum Convention / Explicit / All — controls which methods are mapped v1.9.4 ## 🚀 SmartEndpoints### Mapping Strategy
Convention-based HTTP verb Get* → GET, Create*/Add* → POST, Update* → PUT, Delete* → DELETE v1.9.4 ## 🚀 SmartEndpoints### HTTP Verb Convention
Convention-based route Get*(int id)/{id}, no-id variants → base route v1.9.4 ## 🚀 SmartEndpoints### HTTP Verb Convention
OpenAPI auto-generation .Produces<T>(), .WithSummary(), .WithTags(), .WithName() from return types v1.12.0 ## 🚀 SmartEndpoints### OpenAPI Auto-Generation
SmartEndpoints + [Validate] auto-validation Inject .Validate() for body params with [Validate] type v1.26.0 ## 🚀 SmartEndpoints### Auto-Validation
CancellationToken in SmartEndpoints Service methods with CancellationToken param → auto-injected in generated lambda v1.27.0 ## 🚀 SmartEndpoints### CancellationToken
SmartEndpoints + [FluentValidate] auto-injection Body param with [FluentValidate]IValidator<T> injected + guard emitted v1.28.0 ## 🚀 SmartEndpoints### FluentValidation Bridge
SmartEndpoints — ProducesResponseType for ErrorsOf<T1..Tn> When method returns Result<T, ErrorsOf<T1..Tn>>, generator emits .Produces<Ti>(status) per error type in OpenAPI metadata v1.43.0 ## 🚀 SmartEndpoints### OpenAPI Auto-Generation table

4. Source Generators — Result → IResult (Minimal API)

Feature Short Description Version Docs
[GenerateResultExtensions] Trigger attribute (assembly-level) to enable ResultToIResult v1.9.4 ## 🚀 ASP.NET Integration### ResultToIResult
ToIResult() Result<T> → HTTP response; reads HttpStatusCode tag v1.9.4 ## ASP.NET Integration### ResultToIResult Extensions
ToPostResult() → 201 Created on success v1.9.4 ## ASP.NET Integration### ResultToIResult Extensions
ToPutResult() / ToPatchResult() → 200 on success v1.9.4 ## ASP.NET Integration### ResultToIResult Extensions
ToDeleteResult() → 204 No Content on success v1.9.4 ## ASP.NET Integration### ResultToIResult Extensions
Smart HTTP mapping Reads HttpStatusCode tag; 404→NotFound, 401→Unauthorized, etc. v1.20.0 ## ASP.NET Integration### Smart HTTP Mapping
[GenerateOneOf2ExtensionsAttribute] Trigger for OneOf2 → IResult v1.9.4 ## 🔀 OneOf to IResult
[GenerateOneOf3ExtensionsAttribute] Trigger for OneOf3 → IResult v1.9.4 ## 🔀 OneOf to IResult
[GenerateOneOf4ExtensionsAttribute] Trigger for OneOf4 → IResult v1.12.0 ## 🔀 OneOf to IResult
OneOf<T1,T2>.ToIResult() One-liner HTTP response for 2-type unions v1.9.4 ## 🔀 OneOf to IResult### OneOf<T1,T2>.ToIResult()
OneOf<T1,T2,T3>.ToIResult() One-liner HTTP response for 3-type unions v1.9.4 ## 🔀 OneOf to IResult### OneOf<T1,T2,T3>.ToIResult()
OneOf<T1,T2,T3,T4>.ToIResult() One-liner HTTP response for 4-type unions v1.12.0 ## 🔀 OneOf to IResult### OneOf<T1,T2,T3,T4>.ToIResult()
OneOf HTTP method variants ToPostResult(), ToPutResult(), etc. for OneOf v1.9.4 ## 🔀 OneOf to IResult### HTTP Method Variants

5. Source Generators — Result/OneOf → ActionResult (MVC)

Feature Short Description Version Docs
[GenerateActionResultExtensions] Trigger attribute (assembly-level) for ResultToActionResult v1.21.0 ## 🚀 ASP.NET Integration### ResultToActionResult
ToActionResult() Result<T>IActionResult; reads HttpStatusCode tag v1.21.0 ## ASP.NET Integration### ResultToActionResult Extensions
ToPostActionResult() → 201 Created v1.21.0 ## ASP.NET Integration### ResultToActionResult Extensions
ToPutActionResult() / ToPatchActionResult() → 200 v1.21.0 ## ASP.NET Integration### ResultToActionResult Extensions
ToDeleteActionResult() → 204 No Content v1.21.0 ## ASP.NET Integration### ResultToActionResult Extensions
ToActionResult(onSuccess, onFailure) Explicit overload — escape hatch v1.21.0 ## ASP.NET Integration### ResultToActionResult Extensions
OneOf.ToActionResult() (2/3/4 arities) MVC one-liner for discriminated unions v1.22.0 ## ASP.NET Integration### OneOfToActionResult Extensions
MVC error auto-mapping table NotFoundError→NotFoundObjectResult, etc. v1.21.0 ## ASP.NET Integration### ResultToActionResult Extensions

6. Source Generators — Validate

Feature Short Description Version Docs
[Validate] attribute Marker for .Validate() extension method generation v1.24.0 ## Validation Attributes
Generated .Validate() extension Delegates to Validator.TryValidateObject, returns Result<T> v1.24.0 ## Validation Attributes
All 20+ DataAnnotations supported [Required], [Range], [StringLength], etc. v1.24.0 ## Validation Attributes
ValidationError.FieldName populated Per-field errors from MemberNames.FirstOrDefault() v1.24.0 ## Validation Attributes
Pipeline: .Validate().ToIResult() One-liner validate + respond v1.24.0 ## Validation Attributes

7. Source Generators — Problem Details

Feature Short Description Version Docs
[MapToProblemDetails] Maps error class to RFC 7807 ProblemDetails response v1.12.0 ## 🚀 ASP.NET Integration### Problem Details Integration
StatusCode property HTTP status override v1.12.0 ## 🚀 ASP.NET Integration### Problem Details Integration
Type property RFC 7807 type URI v1.12.0 ## 🚀 ASP.NET Integration### Problem Details Integration
Title property Human-readable error title v1.12.0 ## 🚀 ASP.NET Integration### Problem Details Integration
IncludeTags property Include error Tags in ProblemDetails.Extensions v1.12.0 ## 🚀 ASP.NET Integration### Problem Details Integration

8. Analyzers — REslava.Result.Analyzers

Feature Short Description Version Docs

| RESL1001 | Unsafe .Value access without IsSuccess guard — Warning + Code Fix | v1.14.0 | ## 🛡️ Safety Analyzers### RESL1001 |

| RESL1002 | Discarded Result<T> return value — Warning | v1.14.0 | ## 🛡️ Safety Analyzers### RESL1002 |

| RESL1003 | Prefer Match() over if-check — Info suggestion | v1.14.2 | ## 🛡️ Safety Analyzers### RESL1003 |

| RESL1004 | Task<Result<T>> not awaited — Warning + Code Fix | v1.19.0 | ## 🛡️ Safety Analyzers### RESL1004 |

| RESL1005 | Suggest domain-specific error type — Info | v1.26.0 | ## 🛡️ Safety Analyzers### RESL1005 |

| RESL1006 | Both [Validate] and [FluentValidate] on same type — Error | v1.28.0 | ## 🛡️ Safety Analyzers### RESL1006 |

| RESL1009 | Replace try/catch with Result<T>.Try() — Info + Code Fix | v1.38.0 | ## 🛡️ Safety Analyzers### RESL1009 |

| RESL2001 | Unsafe OneOf.AsT* without IsT* guard — Warning + Code Fix | v1.14.2 | ## 🛡️ Safety Analyzers### RESL2001 |

| Code Fix: RESL1001 | Wrap in if (IsSuccess) guard or replace with .Match() | v1.14.2 | ## 🛡️ Safety Analyzers### RESL1001 |

| Code Fix: RESL1004 | Add await keyword | v1.19.0 | ## 🛡️ Safety Analyzers### RESL1004 |

| Code Fix: RESL1009 | Replace try/catch with Result<T>.Try(() => ...) or Result<T>.Try(() => ..., ex => ...) | v1.38.0 | ## 🛡️ Safety Analyzers### RESL1009 |

| Code Fix: RESL2001 | Replace .AsT* with exhaustive .Match() | v1.14.2 | ## 🛡️ Safety Analyzers### RESL2001 |

| [DomainBoundary] attribute | In REslava.Result core; marks methods/constructors as domain boundary entry points — companion to RESL1030 | v1.43.0 | ### 18.12. RESL1030 | | RESL1030 | Typed error Result<T, TError> passed directly to a [DomainBoundary] method without .MapError() — Warning | v1.43.0 | ### 18.12. RESL1030 |


9. Http Extensions — REslava.Result.Http

Feature Short Description Version Docs
GetResult<T>(string) / GetResult<T>(Uri) GET → Result<T>; auto-deserializes on 2xx, maps 4xx/5xx to typed errors v1.33.0
PostResult<TBody, TResponse> POST with JSON body → Result<TResponse> v1.33.0
PutResult<TBody, TResponse> PUT with JSON body → Result<TResponse> v1.33.0
DeleteResult(string) DELETE → Result (non-generic); 2xx = Result.Ok() v1.33.0
DeleteResult<T>(string) DELETE → Result<T> with deserialized body v1.33.0
HttpResultOptions Configurable JSON options + complete status-code-to-error override v1.33.0

10. Source Generators — ResultFlow

Feature Short Description Version Docs
[ResultFlow] attribute Method-level: marks a method for automatic Mermaid pipeline diagram generation v1.35.0 ## 🗺️ Pipeline Visualization### [ResultFlow]
Fluent chain extraction Walks InvocationExpressionSyntax tree; classifies each call by NodeKind (9 kinds) v1.35.0 ## 🗺️ Pipeline Visualization### How it works
Mermaid flowchart LR rendering Converts NodeKind semantics to Mermaid nodes; pastel classDef colors, \|fail\| edges for Gatekeeper/TransformWithRisk, no outbound edge for Terminal v1.35.0 ## 🗺️ Pipeline Visualization### Diagram Example
Generated.ResultFlow.{Class}_Flows One public const string {MethodName} per [ResultFlow] method — zero runtime overhead v1.35.0 ## 🗺️ Pipeline Visualization### Generated Output
REF001 diagnostic Info diagnostic when [ResultFlow] method body cannot be parsed as a fluent chain v1.35.0 ## 🗺️ Pipeline Visualization### REF001
REF002 diagnostic + Code Action Warning when diagram comment is missing; one-click code fix inserts the Mermaid diagram above the method body v1.36.0 ## 🗺️ Pipeline Visualization### REF002 & Code Action
Multi-library convention dictionary Built-in support for ErrorOr (Then/Switch) and LanguageExt (Filter/Do/DoLeft) alongside REslava.Result v1.36.0 ## 🗺️ Pipeline Visualization### Supported Libraries
resultflow.json custom classification AdditionalFile escape hatch — override or extend the built-in dictionary for any library v1.36.0 ## 🗺️ Pipeline Visualization### resultflow.json
REF003 diagnostic Warning when resultflow.json is malformed — falls back to built-in convention v1.36.0 ## 🗺️ Pipeline Visualization### REF003
REslava.ResultFlow standalone package Independent NuGet package — works with any Result library v1.36.0 ## 🗺️ Pipeline Visualization### Installation
Async step annotation () *Async nodes automatically get a label suffix — identifies async I/O steps at a glance v1.38.0 ## 🗺️ Pipeline Visualization### Async Annotation
REslava.ResultFlow — success type travel Library-agnostic type travel: first generic type arg of each step's return type rendered as "Bind<br/>User" or "Map<br/>User → UserDto" labels; falls back to method name for non-generic types v1.38.0 ## 🗺️ Pipeline Visualization### Type Travel
REslava.Result.Flow — success type travel New native package: [ResultFlow] infers T in Result<T> at each step via IResultBase; renders "Bind<br/>User" or "Map<br/>User → UserDto" labels v1.38.0 ## 🗺️ Pipeline Visualization### Type Travel
REslava.Result.Flow — error type surface Scans step method bodies for new XxxError(...) where XxxError implements IError; renders typed -->|DatabaseError| FAIL edges with shared FAIL terminal v1.38.0 ## 🗺️ Pipeline Visualization### Error Surface
IInvocationOperation chain walker Syntax-walk + per-node GetOperation() chain extraction (fixed in v1.38.1 to handle static roots + async extension methods); IsPipelineRoot prevents duplicate processing v1.38.0
REslava.Result.Flow — REF002 + Code Action REslava.Result-native counterpart: REF002 info diagnostic on every [ResultFlow] method; one-click code fix inserts full-fidelity diagram (type travel + typed error edges) as a mermaid fence comment v1.38.1 ## 🗺️ Pipeline Visualization### REF002 & Code Action
mermaid fence comment format Both REslava.ResultFlow and REslava.Result.Flow code actions now wrap the inserted diagram in a \``mermaid … ```` fence — renders inline in VS Code, GitHub, Rider v1.38.1
Result.Flow — type-read mode When method returns Result<T, TError>, failure edges show exact error type (reads TypeArguments[1]); e.g. fail: ErrorsOf<ValidationError, InventoryError>; zero body scanning; HTML-escaped angle brackets for Mermaid v1.39.0 ## 🗺️ Pipeline Visualization### Type-Read Mode
Gap 1: lambda body method name .Bind(x => SaveUser(x)) → step label "SaveUser" v1.41.0
Gap 3: variable initializer resolution var r = FindUser(); return r.Bind(...) correctly seeds chain root v1.41.0
PipelineNode.NodeId Stable node identifier ("N{i}_{MethodName}") for runtime→diagram correlation via ReasonMetadata.NodeId v1.41.0
Mermaid node correlation block %% --- Node correlation --- block at end of every diagram v1.41.0
WithContext — Invisible node .WithContext(...) classified as NodeKind.Invisible in both extractors — not rendered as a pipeline step v1.42.0
TryExtractContextHints + diagram footer REslava.Result.Flow: extracts operationName/correlationId literal args; emits %% footer comment block in Mermaid output v1.42.0
PipelineNode.SourceFile / SourceLine Source location per pipeline step from SyntaxNode.GetLocation(); null for in-memory compilations v1.43.0 ### 3.10. Clickable Mermaid Nodes
ResultFlowLinkMode — clickable nodes MSBuild property / resultflow.json key; vscode mode emits click directives with vscode://file/ URI per node v1.43.0 ### 3.10. Clickable Mermaid Nodes
{MethodName}_Sidecar constant Always-generated companion constant — Mermaid diagram wrapped in fenced # Pipeline — {name} markdown block v1.43.0 ### 3.11. Sidecar Markdown Constant
Cross-method pipeline tracing (_Cross) REslava.Result.Flow: follows [ResultFlow] chains across method boundaries; emits a {MethodName}_Cross constant stitching together all called sub-methods into one unified Mermaid diagram v1.45.0 ## 🗺️ Pipeline Visualization### Cross-Method Tracing
_LayerView constant Layer-segregated subgraph Mermaid diagram — groups pipeline nodes by architectural layer (Domain, Application, Infrastructure, Presentation, CrossCutting); one subgraph per layer; layer colors match classDef palette v1.45.0 ## 🗺️ Pipeline Visualization### Domain Boundary Diagrams
_Stats constant Pipeline statistics Mermaid diagram — node count, async step ratio, gatekeeper/bind ratios; rendered as a %% metadata block + info table v1.45.0 ## 🗺️ Pipeline Visualization### Domain Boundary Diagrams
_ErrorSurface constant Error surface Mermaid diagram (flowchart LR) — highlights which steps can produce failures and what error types surface from each gatekeeper v1.45.0 ## 🗺️ Pipeline Visualization### Domain Boundary Diagrams
_ErrorPropagation constant Error propagation Mermaid diagram (flowchart TD) — traces how each failure kind propagates end-to-end through the pipeline toward the terminal exit v1.45.0 ## 🗺️ Pipeline Visualization### Domain Boundary Diagrams
LayerDetector Internal component that auto-detects the architectural layer of each PipelineNode from its declaring type's namespace segments and [DomainBoundary] markers; drives _LayerView subgraph grouping v1.45.0
Layer subgraph coloring Each detected layer in _LayerView gets a distinct Mermaid subgraph with its own border/background color — Domain (purple), Application (blue), Infrastructure (orange), Presentation (green), CrossCutting (grey) v1.45.0
Match hexagon + ok/fail edges Match/MatchAsync now renders as a Mermaid hexagon {{"Match"}}:::terminal with explicit -->|ok| SUCCESS and -->|fail| FAIL exits — replaces the dead-end rectangle; applies to both REslava.Result.Flow and REslava.ResultFlow v1.46.0 ## 🗺️ Pipeline Visualization### Match — Multi-Branch Fan-Out
PipelineNode.MatchBranchLabels IReadOnlyList<string>? — when Match is called with N fail-branch lambdas (typed ErrorsOf<T1..Tn>), extracts each lambda's explicit parameter type name; drives N typed fail edges in the renderer v1.46.0 ## 🗺️ Pipeline Visualization### Match — Multi-Branch Fan-Out
Typed N-branch Match fan-out REslava.Result.Flow only: when MatchBranchLabels.Count > 0, emits N distinct -->|TypeName| FAIL edges per error type instead of the generic -->|fail| FAIL; semantic model resolution with raw-syntax fallback v1.46.0 ## 🗺️ Pipeline Visualization### Match — Multi-Branch Fan-Out
Subgraph entry arrow Cross-method subgraph blocks open with ENTRY_{nodeId}[ ]:::entry ==> (invisible thick arrow) to the first inner node; makes execution entry point visible in expanded pipelines; flat pipelines unchanged; both packages v1.46.3
generate_flow_catalog.py Post-build script that scans obj/Generated/**/*_Flows.g.cs and publishes all diagram constants as a browsable MkDocs catalog page; groups by class → method → view type; --project / --output flags v1.47.0
Demo Project MkDocs section mkdocs/demo/ — dedicated docs section for REslava.Result.Flow.Demo; includes feature overview and live flow catalog; CI auto-rebuilds on every MkDocs deploy v1.47.0
Diagram frontmatter title Every [ResultFlow] diagram opens with ---\ntitle: MethodName\n---; renders as a native heading above the diagram in VS Code preview, GitHub, and all Mermaid viewers; both packages v1.47.1
ENTRY_ROOT root entry node Chain seed call (e.g. FindUser) rendered as amber ENTRY_ROOT["Method<br/>→ Type"]:::operation ==> before the first pipeline step; async calls get ; both packages v1.47.1
Code action: insert/refresh parity REslava.ResultFlow code action now replaces existing diagram comment in-place (was inserting duplicates); shows "Refresh" title when block exists; CRLF-normalised content; both packages now fully equivalent v1.47.1
Async suffix strip Node labels and frontmatter title strip Async suffix — already signals async; FindProductAsync ⚡FindProduct⚡; both packages v1.47.2
:::bind / :::map classDef split Bind/Or/MapError:::bind (thick dark-green border); Map:::map (plain green); subgraph borders keep :::transform; both packages v1.47.2
Title type annotation Frontmatter title includes output type: PlaceOrder⚡ → ⟨Order⟩; non-generic: → ⟨⟩; Result<T,TError> shows T only; both packages v1.47.2
Legend constant One Legend Mermaid mini-diagram per *_Flows class; horizontal row showing all 9 node types with shapes and colors; access via OrderService_Flows.Legend; both packages v1.47.2 ### 🗺️ Node Type Legend — Legend constant
PipelineNode.PredicateText + Gatekeeper tooltip string? property set when Ensure/Filter first arg is a lambda; renderer wraps label in <span title='p.Stock > 0'>Ensure</span>; visible on hover in VS Code, silently dropped on GitHub; both packages v1.47.2
Legend Guard tooltip + note update Legend constant Guard node uses <span title='hover shows condition'>Guard</span>; note updated to ⚡ = async \| Guard: condition shown on hover; makes tooltip self-documenting in the legend; both packages v1.47.3 ### 3.11. Node Type Legend
scripts/svg.sh — SVG pipeline orchestrator New local script: build Demo → export .mmd → convert to .svg; re-run whenever generator rendering changes; images/*.mmd transient (gitignored); local only (mmdc/Puppeteer not in CI) v1.47.3
generate_flow_catalog.py --export-mmd DIR New export mode: {ClassName}_{ConstantName}.mmd naming avoids collisions; Legend.mmd exported once; auto TD→450/LR→900 width via SVGO_WIDTH env var; Stats/Sidecar skipped v1.47.3
ResultFlowTheme enum New enum: Light = 0 (default), Dark = 1; emitted by the attribute generator in both packages; attribute usage: [ResultFlow(Theme = ResultFlowTheme.Dark)] v1.47.4
ResultFlowThemes.cs — Single Source of Truth New internal static class in both generator packages; contains MermaidInit, MermaidInitDark, Light classDef block, Dark classDef block, Layer0_StyleLayer4_Style per theme — renderers emit zero hardcoded colour strings v1.47.4
MermaidInitDark — dark Mermaid init Dark diagrams emit %%{init: {'themeVariables': {'primaryTextColor': '#fff', 'titleColor': '#fff', 'edgeLabelBackground': '#2a2a2a'}}}%%; fixes black title text and subgraph labels invisible on dark backgrounds; both packages v1.47.4
Dark classDef palette Full dark colour set for all 9 node kinds matching MkDocs slate scheme; e.g. operation#3a2b1f/#f2c2a0, bind#1f3a2d/#9fe0c0, failure#3a1f1f/#f2b8b8; both packages v1.47.4
Depth-indexed layer subgraphs _LayerView and _ErrorPropagation renderers emit subgraph Layer{depth}["ActualLayerName"] IDs; class Layer{depth} Layer{depth}_Style directives for theming; no more hardcoded layer colour strings in renderers; both packages v1.47.4
Layer{n}_Style classDefs (0–4) 5 depth-indexed layer classDefs in both Light and Dark themes; alternating 2-colour: even = blue-lavender, odd = mint; applied via class Layer{depth} Layer{depth}_Style after subgraph emit v1.47.4
FulfillmentService dark demo New demo class in REslava.Result.Flow.Demo: [DomainBoundary("Application")] + [ResultFlow(MaxDepth=2, Theme=Dark)]; calls WarehouseService.ReserveStock (Domain) — Application→Domain cross-layer dark theme showcase v1.47.4
ResultFlowDefaultTheme MSBuild property <ResultFlowDefaultTheme>Dark</ResultFlowDefaultTheme> in Directory.Build.props; solution-wide default; method-level Theme attribute wins; case-insensitive; both packages v1.48.0 §3.17
CodeLens ▶ Open diagram preview VS Code extension reslava.reslava-result-extensions (Marketplace v1.0.0); 4-step fallback chain; orange R gutter icon on [ResultFlow] lines v1.48.0 §3.16
NuGet README images → transparent PNGs mermaid-to-svg.sh emits .png with --backgroundColor transparent; 27 PNGs at images/*.png; NuGet READMEs use raw.githubusercontent.com URLs v1.48.0
VSIX v1.1.0 — WebviewPanel renderer Replaces sidecar .md preview; custom vscode.WebviewPanel with bundled Mermaid v10.9.5 (offline); one-panel-per-method; vscode:// node-click navigation; theme-aware background v1.49.0
VSIX v1.1.0 — toolbar Source panel (Mermaid DSL + Copy); Legend panel (node colour swatches + hints); SVG export; PNG export (2× canvas) v1.49.0
ResultFlowRegistryGenerator_PipelineRegistry.g.cs Always-on incremental generator (both packages); emits _Methods + {MethodName}_Info JSON constants per class; fields: sourceLine, returnType, returnTypeFullName, isAsync, hasDiagram, nodeCount, errorTypes, nodeKindFlags; opt-out via ResultFlowRegistry=false v1.50.0
ResultFlowRegistry=false MSBuild property Suppresses all _PipelineRegistry.g.cs generation for both packages v1.50.0
VSIX v1.2.0 — Flow Catalog sidebar ⚡ Flow Catalog activity bar panel; groups all [ResultFlow] methods by project and class; green/red project build status; method async labels, return type, node count; error types tooltip; reslava.buildProject with auto-refresh; stats bar v1.50.0
VSIX v1.2.0 — single/multiple window mode reslava.diagramWindowMode VS Code setting ("single" default); sidebar toolbar + webview toolbar toggle buttons v1.50.0
pipelineId + nodeIds + namespace in _Info Deterministic FNV-1a 8-hex pipelineId; nodeIds ordered array (format "{pipelineId}_{4-hex}"); namespace — all in registry _Info JSON; both packages v1.51.0
_TypeFlow constant Second Mermaid diagram per [ResultFlow] method; success edge labels carry Result<T> type names; %% pipelineId: comment; VSIX "Types" toolbar button; both packages v1.51.0
errorTypes depth-2 scan Unconditional depth-2 body descent into called Result<T> methods; catches errors in helpers/repositories; Result.Flow only v1.51.0
FAIL node error annotation 0 errors → [fail]; 1–3 → inline type names; 4+ → ℹ️ tooltip span; Error suffix stripped; both packages v1.51.0
%% pipelineId: comment in Mermaid After flowchart LR in _Diagram + _TypeFlow; inside subgraphs in _LayerView/_ErrorSurface/_ErrorPropagation; pipelineId column in _Stats v1.51.0
Node sourceLine fix MemberAccessExpressionSyntax.Name.GetLocation() — fixes off-by-one on vertical fluent chains; both packages v1.51.0
VSIX v1.2.2 — health icons (revised) ✅ errors found · ⚠️ risk paths, no errors · ⚪ terminal-only · ❌ no diagram v1.51.0
VSIX v1.2.2 — namespace grouping Tree groups classes under intermediate namespace nodes; uses namespace field from _Info v1.51.0
VSIX v1.2.2 — loading spinner + empty state $(loading~spin) during build; empty-state tree item with install instructions + demo link v1.51.0
VSIX v1.2.2 — error children in sidebar Expand method → one child per error type; click → navigate to error class definition v1.51.0
VSIX v1.2.2 — layer diagram tabs Webview toolbar tabs for all 6 constant types; absent tabs hidden v1.51.0
VSIX v1.2.2 — first-run walkthrough + missing-package detection VS Code walkthrough (Install → Attribute → Preview); checkForResultFlowPackages() with Track A/B install buttons; findProjectForInstall() Quick Pick v1.51.0
Two-track messaging Track A / Track B install table in README, NuGet READMEs, MkDocs, VSIX README v1.51.0
NuGet transitive dependency fix REslava.Result.Flow, Analyzers, AspNetCore now declare REslava.Result as proper NuGet transitive dependency v1.51.0

11. OpenTelemetry Integration — REslava.Result.OpenTelemetry

Feature Short Description Version Docs
REslava.Result.OpenTelemetry package New NuGet package — zero-cost OTel integration; no-op when no active span v1.42.0
.WithOpenTelemetry() Seeds ResultContext.CorrelationId from Activity.Current.TraceId and OperationName from DisplayName; 3 overloads: Result<T>, Result, Result<T,TError> v1.42.0
.WriteErrorTagsToSpan() On failure, writes all error tags as span attributes on Activity.Current; passes through on success or no span; 3 overloads v1.42.0

12. ResultContext — REslava.Result

Feature Short Description Version Docs
ResultContext sealed record Pipeline context carrier: Entity, EntityId, CorrelationId, OperationName, TenantId (all nullable strings) v1.42.0
Result<T>.Context / Result<T,TError>.Context Auto-seeded from typeof(T).Name on Ok()/Fail(); public readable, internal settable v1.42.0
Result.Context (non-generic) Null by default; set explicitly via .WithContext(entity: ...) v1.42.0
WithContext(...) Fluent merge of entityId, correlationId, operationName, tenantId into existing Context v1.42.0
Context propagation — parent-wins All pipeline operators copy incoming Context to outgoing; Map additionally updates Entity = typeof(TOut).Name v1.42.0
Error auto-enrichment On failure, injects ResultContext fields as error tags — non-overwriting (factory-set tags win) v1.42.0

13. Pipeline Runtime Observation — REslava.Result (v1.52.0–v1.53.0)

Feature Short Description Version Docs
ResultFlowObserver Abstract base class for pipeline observers; OnNodeExecuted + OnPipelineCompleted hooks v1.52.0 ### 🔬 Pipeline Runtime Observation
RingBufferObserver Bounded in-memory ring buffer; capacity ctor; GetTraces() snapshot; Clear() v1.52.0 ### 🔬 Pipeline Runtime Observation
PipelineObserver static hub Register / Unregister / RegisterScoped / BeginPipeline / Current; AsyncLocal isolation v1.52.0 ### 🔬 Pipeline Runtime Observation
PipelineTrace / NodeTrace Data models; NodeId correlates to Mermaid diagram node; ElapsedMs, OutputValue, ErrorType per node v1.52.0 ### 🔬 Pipeline Runtime Observation
REslava.Result.Diagnostics PipelineTraceHost.Start (Kestrel) + MapResultFlowTraces (ASP.NET Core); GET /reslava/traces JSON v1.52.0 ### 🔬 Pipeline Runtime Observation
FlowProxy Generated for partial classes; svc.Flow.Process() seeds exact pipelineId+nodeIds; instance + static; both packages v1.53.0 ### 🔬 Pipeline Runtime Observation
DebugProxy svc.Flow.Debug.Process() — captures 1 trace + auto-saves reslava-debug-{method}.json; VSIX Debug panel auto-opens v1.53.0 ### 🔬 Pipeline Runtime Observation
RingBufferObserver.Save(path?) Persists traces to BOM-free JSON; auto-prefix reslava- for short names; full-path escape hatch v1.53.0 ### 🔬 Pipeline Runtime Observation
REF004 + code fix Warning + one-click fix when [ResultFlow] class missing partial; both packages v1.53.0
VSIX Debug Panel v1.4.0 File watcher **/reslava-*.json; source badge; multi-file picker; ▶ Debug CodeLens on .Flow.Debug. lines v1.53.0 ### 🔬 Pipeline Runtime Observation
_ErrorTaxonomy constant Compile-time markdown table of error types per method; certain (from Result<T,TError> return type) + inferred (body scan); Generated.ErrorTaxonomy.{Class}_ErrorTaxonomy; both packages v1.54.0 ### 🔍 Error Taxonomy Map
VSIX v1.4.1 Debug Panel fixes nodeId subchain fix for cross-method pipelines; subgraph ENTRY highlight; node sort by index; output word-wrap v1.54.0 ### 🔬 Pipeline Runtime Observation
VSIX v1.4.2 GIF showcase result-flow.gif in VSIX images; README.md + mkdocs/index.md 3-layer pitch (Write → Run → Debug) v1.54.0
VSIX v1.5.0 — 🧪 Generate Test Debug Panel stepper button; generates MSTest [TestMethod] from real trace data; claude -p CLI-first + Anthropic API fallback v1.55.0 ### 🤖 AI Pipeline Intelligence
VSIX v1.5.0 — 🔍 Explain Failure Debug Panel stepper button (failing traces only); 3–5 sentence root-cause explanation; reuses same AI client + result panel v1.55.0 ### 🤖 AI Pipeline Intelligence

Summary

v1.55.0 — 252 features across 16 categories (VSIX only — NuGet packages at v1.54.0).

Category Total Features
Core Library 42
Error Types 23
SmartEndpoints 19
Result/OneOf → IResult 14
Result/OneOf → ActionResult 8
Validate 5
Problem Details 5
Analyzers 14
OneOf (incl. OneOf5/6/7/8 + chains + ErrorsOf) 10
Validation DSL 1
FluentValidation Bridge 2
Http Extensions 6
ResultFlow 82
OpenTelemetry 3
ResultContext 6
Pipeline Runtime Observation 10
Total 250

See also - API Documentation - API Reference