<?xml version="1.0"?>
<doc>
    <assembly>
        <name>Verdict.RuleEngine.Connectors</name>
    </assembly>
    <members>
        <member name="T:Verdict.RuleEngine.Connectors.Api.ApiTarget">
            <summary>Target of an API connector: <c>{ "baseUrl": "https://…/", "headers": { … } }</c>.</summary>
            <param name="BaseUrl">Base URL (path templates are resolved relative to it).</param>
            <param name="Headers">Static headers for every request (values may be <c>secret://</c> references).</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Api.ApiTarget.#ctor(System.String,System.Collections.Generic.IReadOnlyDictionary{System.String,System.String})">
            <summary>Target of an API connector: <c>{ "baseUrl": "https://…/", "headers": { … } }</c>.</summary>
            <param name="BaseUrl">Base URL (path templates are resolved relative to it).</param>
            <param name="Headers">Static headers for every request (values may be <c>secret://</c> references).</param>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.Api.ApiTarget.BaseUrl">
            <summary>Base URL (path templates are resolved relative to it).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.Api.ApiTarget.Headers">
            <summary>Static headers for every request (values may be <c>secret://</c> references).</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Api.ApiTarget.FromJson(System.Text.Json.Nodes.JsonObject)">
            <summary>Parses a target object.</summary>
            <param name="target">Target JSON.</param>
            <exception cref="T:Verdict.RuleEngine.Connectors.ConnectorException">Missing base URL.</exception>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.Api.ApiExchange">
            <summary>Raw outcome of one HTTP attempt.</summary>
            <param name="StatusCode">HTTP status.</param>
            <param name="Body">Response body.</param>
            <param name="ContentType">Media type.</param>
            <param name="RequestUri">Request URI (for diagnostics).</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Api.ApiExchange.#ctor(System.Int32,System.String,System.String,System.String)">
            <summary>Raw outcome of one HTTP attempt.</summary>
            <param name="StatusCode">HTTP status.</param>
            <param name="Body">Response body.</param>
            <param name="ContentType">Media type.</param>
            <param name="RequestUri">Request URI (for diagnostics).</param>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.Api.ApiExchange.StatusCode">
            <summary>HTTP status.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.Api.ApiExchange.Body">
            <summary>Response body.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.Api.ApiExchange.ContentType">
            <summary>Media type.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.Api.ApiExchange.RequestUri">
            <summary>Request URI (for diagnostics).</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.Api.ApiProbe">
            <summary>Outcome of one probe: the raw exchange (when a response arrived) plus the engine's interpretation of it.</summary>
            <param name="Exchange">Raw exchange; <see langword="null"/> when no HTTP response was received (connection failure, timeout, open circuit, unknown operation).</param>
            <param name="Result">Interpreted result, exactly as a ruleset run would see it.</param>
            <param name="ElapsedMs">Wall-clock time of the whole attempt sequence in milliseconds.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Api.ApiProbe.#ctor(Verdict.RuleEngine.Connectors.Api.ApiExchange,Verdict.RuleEngine.Connectors.ConnectorResult,System.Double)">
            <summary>Outcome of one probe: the raw exchange (when a response arrived) plus the engine's interpretation of it.</summary>
            <param name="Exchange">Raw exchange; <see langword="null"/> when no HTTP response was received (connection failure, timeout, open circuit, unknown operation).</param>
            <param name="Result">Interpreted result, exactly as a ruleset run would see it.</param>
            <param name="ElapsedMs">Wall-clock time of the whole attempt sequence in milliseconds.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.Api.ApiProbe.Exchange">
            <summary>Raw exchange; <see langword="null"/> when no HTTP response was received (connection failure, timeout, open circuit, unknown operation).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.Api.ApiProbe.Result">
            <summary>Interpreted result, exactly as a ruleset run would see it.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.Api.ApiProbe.ElapsedMs">
            <summary>Wall-clock time of the whole attempt sequence in milliseconds.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.Api.ApiConnector">
            <summary>
            REST API consumer: builds requests from templates, authenticates, runs the Polly pipeline (retry → circuit
            breaker → timeout) and maps the response to the declared outputs via JSONPath-lite. Failures are returned as
            <see cref="T:Verdict.RuleEngine.Connectors.ConnectorResult"/>, never thrown.
            </summary>
        </member>
        <member name="F:Verdict.RuleEngine.Connectors.Api.ApiConnector.OAuthClientName">
            <summary>Named <see cref="T:System.Net.Http.HttpClient"/> used for OAuth2 token requests.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Api.ApiConnector.#ctor(Verdict.RuleEngine.Connectors.ConnectorDefinition,Verdict.RuleEngine.Connectors.ConnectorRef,Verdict.RuleEngine.Connectors.Api.ApiTarget,System.Net.Http.IHttpClientFactory,Verdict.RuleEngine.Connectors.ISecretResolver,Verdict.RuleEngine.Connectors.Api.ApiResiliencePipelines,Verdict.RuleEngine.Connectors.Api.OAuthTokenCache,Microsoft.Extensions.Logging.ILogger{Verdict.RuleEngine.Connectors.Api.ApiConnector})">
            <summary>Initializes the connector.</summary>
            <param name="definition">Definition.</param>
            <param name="ref">Reference (used for the named HTTP client and pipeline keys).</param>
            <param name="target">Target (production or test).</param>
            <param name="httpClientFactory">HTTP client factory.</param>
            <param name="secrets">Secret resolver.</param>
            <param name="pipelines">Shared resilience pipelines (circuit-breaker state lives here).</param>
            <param name="tokens">OAuth2 token cache.</param>
            <param name="logger">Logger.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.Api.ApiConnector.Target">
            <summary>Target in use.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.Api.ApiConnector.Kind">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Api.ApiConnector.ClientName(Verdict.RuleEngine.Connectors.ConnectorRef)">
            <summary>Name of the <see cref="T:System.Net.Http.HttpClient"/> used for a connector version.</summary>
            <param name="ref">Reference.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Api.ApiConnector.InvokeAsync(System.String,System.Collections.Generic.IReadOnlyDictionary{System.String,System.Text.Json.Nodes.JsonValue},Verdict.RuleEngine.Connectors.ConnectorInvocationContext,System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Api.ApiConnector.ProbeAsync(System.String,System.Collections.Generic.IReadOnlyDictionary{System.String,System.Text.Json.Nodes.JsonValue},System.Threading.CancellationToken)">
            <summary>
            Runs an operation exactly as <see cref="M:Verdict.RuleEngine.Connectors.Api.ApiConnector.InvokeAsync(System.String,System.Collections.Generic.IReadOnlyDictionary{System.String,System.Text.Json.Nodes.JsonValue},Verdict.RuleEngine.Connectors.ConnectorInvocationContext,System.Threading.CancellationToken)"/> does and also hands back the raw HTTP exchange, so an
            authoring tool can show what the endpoint actually answered. Failures are returned, never thrown.
            </summary>
            <param name="operation">Operation name.</param>
            <param name="parameters">Parameter values.</param>
            <param name="ct">Cancellation token.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Api.ApiConnector.BuildRequestAsync(Verdict.RuleEngine.Connectors.ApiOperation,System.Collections.Generic.IReadOnlyDictionary{System.String,System.Text.Json.Nodes.JsonValue},System.Threading.CancellationToken)">
            <summary>Builds the HTTP request for an operation (templates expanded, headers and authentication applied).</summary>
            <param name="op">Operation.</param>
            <param name="parameters">Parameter values.</param>
            <param name="ct">Cancellation token.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Api.ApiConnector.PlaceholderRegex">
            <remarks>
            Pattern:<br/>
            <code>\\{([A-Za-z_][A-Za-z0-9_]*)\\}</code><br/>
            Options:<br/>
            <code>RegexOptions.CultureInvariant</code><br/>
            Explanation:<br/>
            <code>
            ○ Match '{'.<br/>
            ○ 1st capture group.<br/>
                ○ Match a character in the set [A-Z_a-z].<br/>
                ○ Match a character in the set [0-9A-Z_a-z] atomically any number of times.<br/>
            ○ Match '}'.<br/>
            </code>
            </remarks>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Api.ApiConnector.ExpandPath(System.String,System.Collections.Generic.IReadOnlyDictionary{System.String,System.Text.Json.Nodes.JsonValue})">
            <summary>Expands <c>{param}</c> placeholders with URL-encoded values.</summary>
            <param name="template">Path template.</param>
            <param name="parameters">Values.</param>
            <exception cref="T:Verdict.RuleEngine.Connectors.ConnectorException">Unknown placeholder.</exception>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Api.ApiConnector.ExpandBody(System.String,System.Collections.Generic.IReadOnlyDictionary{System.String,System.Text.Json.Nodes.JsonValue})">
            <summary>Expands <c>{param}</c> placeholders with JSON-escaped values (the template supplies the quotes).</summary>
            <param name="template">Body template.</param>
            <param name="parameters">Values.</param>
            <exception cref="T:Verdict.RuleEngine.Connectors.ConnectorException">Unknown placeholder.</exception>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Api.ApiConnector.PlainValue(System.Text.Json.Nodes.JsonValue)">
            <summary>Plain-text form of a parameter (strings raw, numbers invariant, booleans lower-case, null empty).</summary>
            <param name="value">Value.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Api.ApiConnector.Interpret(Verdict.RuleEngine.Connectors.ApiOperation,Verdict.RuleEngine.Connectors.Api.ApiExchange,System.Int32)">
            <summary>Applies the error map and response map of an operation to a raw exchange.</summary>
            <param name="op">Operation.</param>
            <param name="exchange">Exchange.</param>
            <param name="attempts">Attempts made.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Api.ApiConnector.ConvertOutput(System.Text.Json.Nodes.JsonNode,Verdict.RuleEngine.Abstractions.FieldType)">
            <summary>Converts a selected response node to the declared output type (lenient scalar coercion; mismatches become null).</summary>
            <param name="node">Selected node.</param>
            <param name="type">Declared type.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.Api.ApiResiliencePipelines">
            <summary>
            Per-operation Polly pipelines (retry → circuit breaker → per-attempt timeout), cached so circuit-breaker state is
            shared by every invocation of the same connector version and operation.
            </summary>
        </member>
        <member name="F:Verdict.RuleEngine.Connectors.Api.ApiResiliencePipelines.DefaultTimeoutMs">
            <summary>Default per-attempt timeout when the operation declares none.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Api.ApiResiliencePipelines.#ctor(System.TimeProvider)">
            <summary>Initializes the cache.</summary>
            <param name="timeProvider">Time provider for delays and breaker windows.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Api.ApiResiliencePipelines.IsTransient(Verdict.RuleEngine.Connectors.Api.ApiExchange)">
            <summary>Whether an exchange should be treated as transient (retryable / counted by the breaker).</summary>
            <param name="exchange">Exchange.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Api.ApiResiliencePipelines.Get(Verdict.RuleEngine.Connectors.ConnectorRef,Verdict.RuleEngine.Connectors.ApiOperation)">
            <summary>Returns (building on first use) the pipeline of an operation.</summary>
            <param name="ref">Connector reference.</param>
            <param name="op">Operation.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Api.ApiResiliencePipelines.Reset">
            <summary>Drops every cached pipeline (resets breakers).</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.Api.OAuthTokenCache">
            <summary>Caches OAuth2 client-credentials tokens per token endpoint + client id.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Api.OAuthTokenCache.#ctor(System.TimeProvider)">
            <summary>Initializes the cache.</summary>
            <param name="timeProvider">Time provider.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Api.OAuthTokenCache.GetTokenAsync(Verdict.RuleEngine.Connectors.ApiAuthConfig,System.Net.Http.HttpClient,Verdict.RuleEngine.Connectors.ISecretResolver,System.Threading.CancellationToken)">
            <summary>Returns a valid access token, requesting a new one when none is cached or it is about to expire.</summary>
            <param name="auth">Auth config (token URL, client id/secret, scope).</param>
            <param name="client">HTTP client for the token request.</param>
            <param name="secrets">Secret resolver.</param>
            <param name="ct">Cancellation token.</param>
            <exception cref="T:Verdict.RuleEngine.Connectors.ConnectorException">Token request failed or configuration incomplete.</exception>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Api.OAuthTokenCache.Clear">
            <summary>Clears cached tokens.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.Api.ApiConnectorFactory">
            <summary>
            Creates API connectors. Production binds <c>prodTarget</c>; sandbox wraps recorded mocks and <c>testTarget</c> —
            the sandbox path never reads <see cref="P:Verdict.RuleEngine.Connectors.ConnectorDefinition.ProdTarget"/>.
            </summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Api.ApiConnectorFactory.#ctor(Verdict.RuleEngine.Connectors.IConnectorDefinitionStore,System.Net.Http.IHttpClientFactory,Verdict.RuleEngine.Connectors.ISecretResolver,Verdict.RuleEngine.Connectors.Api.ApiResiliencePipelines,Verdict.RuleEngine.Connectors.Api.OAuthTokenCache,Microsoft.Extensions.Logging.ILoggerFactory)">
            <summary>Initializes the factory.</summary>
            <param name="store">Definition store (recorded exchanges).</param>
            <param name="httpClientFactory">HTTP client factory.</param>
            <param name="secrets">Secret resolver.</param>
            <param name="pipelines">Shared pipelines.</param>
            <param name="tokens">Token cache.</param>
            <param name="loggerFactory">Logger factory.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.Api.ApiConnectorFactory.Kind">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Api.ApiConnectorFactory.Create(Verdict.RuleEngine.Connectors.ConnectorVersionRecord,Verdict.RuleEngine.Abstractions.ExecutionMode)">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.Api.JsonPathLite">
            <summary>
            Tiny JSONPath subset used by API response mappings: <c>$</c>, <c>.name</c>, <c>['name']</c> / <c>["name"]</c> and
            <c>[index]</c>, e.g. <c>$.result.matches[0].score</c>. No wildcards, filters or recursion — by design.
            </summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Api.JsonPathLite.Parse(System.String)">
            <summary>Parses a path into segments (<see cref="T:System.String"/> for properties, <see cref="T:System.Int32"/> for indices).</summary>
            <param name="path">Path.</param>
            <exception cref="T:System.FormatException">Invalid path.</exception>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Api.JsonPathLite.Select(System.Text.Json.Nodes.JsonNode,System.String)">
            <summary>Selects a node; returns <see langword="null"/> when any segment is missing.</summary>
            <param name="root">Root node.</param>
            <param name="path">Path.</param>
            <exception cref="T:System.FormatException">Invalid path.</exception>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Api.JsonPathLite.IsTruthy(System.Text.Json.Nodes.JsonNode)">
            <summary>Whether a selected node counts as "present": not null, not <c>false</c>, not an empty string.</summary>
            <param name="node">Node.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.Db.DbConnector">
            <summary>
            Read-only, strictly parameterized DB connector. Statements are validated as single SELECTs, values travel only as
            bound parameters, connections are opened with read-only intent, and the first row is mapped to the declared outputs.
            </summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Db.DbConnector.#ctor(Verdict.RuleEngine.Connectors.ConnectorDefinition,Verdict.RuleEngine.Connectors.Db.DbTarget,Verdict.RuleEngine.Connectors.Db.IDbEngineAdapter,Verdict.RuleEngine.Connectors.ISecretResolver,Microsoft.Extensions.Logging.ILogger{Verdict.RuleEngine.Connectors.Db.DbConnector})">
            <summary>Initializes the connector.</summary>
            <param name="definition">Definition.</param>
            <param name="target">Target (production or test).</param>
            <param name="adapter">Engine adapter.</param>
            <param name="secrets">Secret resolver for <c>secret://</c> connection strings.</param>
            <param name="logger">Logger.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.Db.DbConnector.Kind">
            <inheritdoc />
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.Db.DbConnector.Target">
            <summary>Target in use.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Db.DbConnector.InvokeAsync(System.String,System.Collections.Generic.IReadOnlyDictionary{System.String,System.Text.Json.Nodes.JsonValue},Verdict.RuleEngine.Connectors.ConnectorInvocationContext,System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Db.DbConnector.BuildCommand(System.Data.Common.DbConnection,Verdict.RuleEngine.Connectors.DbOperation,System.Collections.Generic.IReadOnlyDictionary{System.String,System.Text.Json.Nodes.JsonValue},Verdict.RuleEngine.Connectors.Db.IDbEngineAdapter,System.TimeSpan)">
            <summary>Builds the parameterized command. Every declared parameter is bound (missing → NULL); nothing is concatenated.</summary>
            <param name="connection">Connection.</param>
            <param name="op">Operation.</param>
            <param name="parameters">Values.</param>
            <param name="adapter">Engine adapter.</param>
            <param name="timeout">Command timeout.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.Db.RowMapper">
            <summary>Maps the current row of a reader to the declared outputs of a DB operation.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Db.RowMapper.Map(System.Data.Common.DbDataReader,Verdict.RuleEngine.Connectors.DbOperation,System.Boolean)">
            <summary>Maps the row (or all-null outputs when <paramref name="rowFound"/> is false) and adds <c>rowFound</c>.</summary>
            <param name="reader">Reader positioned on the row.</param>
            <param name="op">Operation.</param>
            <param name="rowFound">Whether a row was read.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.Db.DbConnectorFactory">
            <summary>Creates DB connectors: production → <c>prodTarget</c>; sandbox → recorded mocks then <c>testTarget</c>, never <c>prodTarget</c>.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Db.DbConnectorFactory.#ctor(Verdict.RuleEngine.Connectors.IConnectorDefinitionStore,Verdict.RuleEngine.Connectors.Db.DbEngineAdapterRegistry,Verdict.RuleEngine.Connectors.ISecretResolver,Microsoft.Extensions.Logging.ILoggerFactory)">
            <summary>Initializes the factory.</summary>
            <param name="store">Definition store (recorded exchanges).</param>
            <param name="adapters">Engine adapters.</param>
            <param name="secrets">Secret resolver.</param>
            <param name="loggerFactory">Logger factory.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.Db.DbConnectorFactory.Kind">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Db.DbConnectorFactory.Create(Verdict.RuleEngine.Connectors.ConnectorVersionRecord,Verdict.RuleEngine.Abstractions.ExecutionMode)">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.Db.DbTarget">
            <summary>Target of a DB connector: <c>{ "engine": "sqlserver" | "postgresql", "connectionString": "…" | "secret://name" }</c>.</summary>
            <param name="Engine">Engine token.</param>
            <param name="ConnectionString">Connection string or secret reference.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Db.DbTarget.#ctor(System.String,System.String)">
            <summary>Target of a DB connector: <c>{ "engine": "sqlserver" | "postgresql", "connectionString": "…" | "secret://name" }</c>.</summary>
            <param name="Engine">Engine token.</param>
            <param name="ConnectionString">Connection string or secret reference.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.Db.DbTarget.Engine">
            <summary>Engine token.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.Db.DbTarget.ConnectionString">
            <summary>Connection string or secret reference.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Db.DbTarget.FromJson(System.Text.Json.Nodes.JsonObject)">
            <summary>Parses a target object.</summary>
            <param name="target">Target JSON.</param>
            <exception cref="T:Verdict.RuleEngine.Connectors.ConnectorException">Missing fields.</exception>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.Db.IDbEngineAdapter">
            <summary>Engine-specific behaviour of the DB connector runtime.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.Db.IDbEngineAdapter.Engine">
            <summary>Engine token (<c>sqlserver</c>, <c>postgresql</c>).</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Db.IDbEngineAdapter.CreateReadOnlyConnection(System.String)">
            <summary>Creates a connection configured for read-only access where the engine supports it.</summary>
            <param name="connectionString">Connection string.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Db.IDbEngineAdapter.PrepareSessionAsync(System.Data.Common.DbConnection,System.Threading.CancellationToken)">
            <summary>Applies session-level read-only settings after the connection is open.</summary>
            <param name="connection">Open connection.</param>
            <param name="ct">Cancellation token.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Db.IDbEngineAdapter.CreateParameter(System.Data.Common.DbCommand,System.String,System.Text.Json.Nodes.JsonValue,Verdict.RuleEngine.Abstractions.FieldType)">
            <summary>Creates a typed parameter.</summary>
            <param name="command">Command.</param>
            <param name="name">Parameter name (without prefix).</param>
            <param name="value">Value (null → DBNull).</param>
            <param name="type">Declared type.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.Db.SqlServerEngineAdapter">
            <summary>SQL Server adapter (Microsoft.Data.SqlClient) with <c>ApplicationIntent=ReadOnly</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Connectors.Db.SqlServerEngineAdapter.Token">
            <summary>Engine token.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.Db.SqlServerEngineAdapter.Engine">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Db.SqlServerEngineAdapter.CreateReadOnlyConnection(System.String)">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Db.SqlServerEngineAdapter.PrepareSessionAsync(System.Data.Common.DbConnection,System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Db.SqlServerEngineAdapter.CreateParameter(System.Data.Common.DbCommand,System.String,System.Text.Json.Nodes.JsonValue,Verdict.RuleEngine.Abstractions.FieldType)">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.Db.PostgreSqlEngineAdapter">
            <summary>PostgreSQL adapter (Npgsql) with <c>default_transaction_read_only=on</c> as a startup parameter and session setting.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Connectors.Db.PostgreSqlEngineAdapter.Token">
            <summary>Engine token.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.Db.PostgreSqlEngineAdapter.Engine">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Db.PostgreSqlEngineAdapter.CreateReadOnlyConnection(System.String)">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Db.PostgreSqlEngineAdapter.PrepareSessionAsync(System.Data.Common.DbConnection,System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Db.PostgreSqlEngineAdapter.CreateParameter(System.Data.Common.DbCommand,System.String,System.Text.Json.Nodes.JsonValue,Verdict.RuleEngine.Abstractions.FieldType)">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.Db.DbEngineAdapterRegistry">
            <summary>Registry of engine adapters by token.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Db.DbEngineAdapterRegistry.#ctor(System.Collections.Generic.IEnumerable{Verdict.RuleEngine.Connectors.Db.IDbEngineAdapter})">
            <summary>Initializes the registry.</summary>
            <param name="adapters">Adapters.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.Db.DbEngineAdapterRegistry.Default">
            <summary>Registry with the SQL Server and PostgreSQL adapters.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Db.DbEngineAdapterRegistry.Get(System.String)">
            <summary>Resolves an adapter.</summary>
            <param name="engine">Engine token (also accepts <c>postgres</c>, <c>mssql</c>).</param>
            <exception cref="T:Verdict.RuleEngine.Connectors.ConnectorException">Unknown engine.</exception>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.Db.DbValueConversion">
            <summary>Value conversions between JSON and ADO.NET.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Db.DbValueConversion.ToDb(System.Text.Json.Nodes.JsonValue,Verdict.RuleEngine.Abstractions.FieldType)">
            <summary>Converts a JSON parameter value to a CLR value for binding (null → <see cref="T:System.DBNull"/>).</summary>
            <param name="value">JSON value.</param>
            <param name="type">Declared type.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Db.DbValueConversion.ToDbType(Verdict.RuleEngine.Abstractions.FieldType,System.Object)">
            <summary>Maps a declared type to a <see cref="T:System.Data.DbType"/>.</summary>
            <param name="type">Declared type.</param>
            <param name="value">Bound value.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Db.DbValueConversion.FromDb(System.Object,Verdict.RuleEngine.Abstractions.FieldType)">
            <summary>Converts a column value to JSON according to the declared output type.</summary>
            <param name="value">Column value.</param>
            <param name="type">Declared type.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.Db.SqlValidationResult">
            <summary>Result of <see cref="M:Verdict.RuleEngine.Connectors.Db.SelectOnlyValidator.Validate(System.String,System.Collections.Generic.IEnumerable{System.String})"/>.</summary>
            <param name="IsValid">Whether the statement is an acceptable single SELECT.</param>
            <param name="Errors">Violations.</param>
            <param name="ParameterNames">Parameters referenced as <c>@name</c>, in order of first appearance.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Db.SqlValidationResult.#ctor(System.Boolean,System.Collections.Generic.IReadOnlyList{System.String},System.Collections.Generic.IReadOnlyList{System.String})">
            <summary>Result of <see cref="M:Verdict.RuleEngine.Connectors.Db.SelectOnlyValidator.Validate(System.String,System.Collections.Generic.IEnumerable{System.String})"/>.</summary>
            <param name="IsValid">Whether the statement is an acceptable single SELECT.</param>
            <param name="Errors">Violations.</param>
            <param name="ParameterNames">Parameters referenced as <c>@name</c>, in order of first appearance.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.Db.SqlValidationResult.IsValid">
            <summary>Whether the statement is an acceptable single SELECT.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.Db.SqlValidationResult.Errors">
            <summary>Violations.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.Db.SqlValidationResult.ParameterNames">
            <summary>Parameters referenced as <c>@name</c>, in order of first appearance.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.Db.SelectOnlyValidator">
            <summary>
            Conservative validator for DB connector statements: exactly one <c>SELECT</c> (optionally introduced by a
            <c>WITH</c> CTE), no statement separators, no data-modifying / DDL / procedural keywords, no <c>xp_</c>/<c>sp_</c>
            procedures, and every <c>@parameter</c> must be declared. String literals and comments are ignored for keyword
            scanning but are themselves harmless: values only ever travel as bound parameters.
            </summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Db.SelectOnlyValidator.WordRegex">
            <remarks>
            Pattern:<br/>
            <code>[A-Za-z_][A-Za-z0-9_]*</code><br/>
            Options:<br/>
            <code>RegexOptions.CultureInvariant</code><br/>
            Explanation:<br/>
            <code>
            ○ Match a character in the set [A-Z_a-z].<br/>
            ○ Match a character in the set [0-9A-Z_a-z] atomically any number of times.<br/>
            </code>
            </remarks>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Db.SelectOnlyValidator.ParameterRegex">
            <remarks>
            Pattern:<br/>
            <code>(?&lt;!@)@([A-Za-z_][A-Za-z0-9_]*)</code><br/>
            Options:<br/>
            <code>RegexOptions.CultureInvariant</code><br/>
            Explanation:<br/>
            <code>
            ○ Zero-width negative lookbehind.<br/>
                ○ Match '@' right-to-left.<br/>
            ○ Match '@'.<br/>
            ○ 1st capture group.<br/>
                ○ Match a character in the set [A-Z_a-z].<br/>
                ○ Match a character in the set [0-9A-Z_a-z] atomically any number of times.<br/>
            </code>
            </remarks>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Db.SelectOnlyValidator.Validate(System.String,System.Collections.Generic.IEnumerable{System.String})">
            <summary>Validates a statement.</summary>
            <param name="commandText">Statement.</param>
            <param name="declaredParameters">Parameter names declared by the operation.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Db.SelectOnlyValidator.EnsureValid(System.String,System.Collections.Generic.IEnumerable{System.String})">
            <summary>Validates and throws on violation.</summary>
            <param name="commandText">Statement.</param>
            <param name="declaredParameters">Declared parameter names.</param>
            <exception cref="T:Verdict.RuleEngine.Connectors.ConnectorException">The statement is not an acceptable SELECT.</exception>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.Db.SelectOnlyValidator.StripLiteralsAndComments(System.String)">
            <summary>Removes comments and blanks the contents of single-quoted string literals (keeping the quotes).</summary>
            <param name="sql">Statement.</param>
        </member>
        <member name="T:System.Text.RegularExpressions.Generated.PlaceholderRegex_0">
            <summary>Custom <see cref="T:System.Text.RegularExpressions.Regex"/>-derived type for the PlaceholderRegex method.</summary>
        </member>
        <member name="F:System.Text.RegularExpressions.Generated.PlaceholderRegex_0.Instance">
            <summary>Cached, thread-safe singleton instance.</summary>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.PlaceholderRegex_0.#ctor">
            <summary>Initializes the instance.</summary>
        </member>
        <member name="T:System.Text.RegularExpressions.Generated.PlaceholderRegex_0.RunnerFactory">
            <summary>Provides a factory for creating <see cref="T:System.Text.RegularExpressions.RegexRunner"/> instances to be used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.PlaceholderRegex_0.RunnerFactory.CreateInstance">
            <summary>Creates an instance of a <see cref="T:System.Text.RegularExpressions.RegexRunner"/> used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
        </member>
        <member name="T:System.Text.RegularExpressions.Generated.PlaceholderRegex_0.RunnerFactory.Runner">
            <summary>Provides the runner that contains the custom logic implementing the specified regular expression.</summary>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.PlaceholderRegex_0.RunnerFactory.Runner.Scan(System.ReadOnlySpan{System.Char})">
            <summary>Scan the <paramref name="inputSpan"/> starting from base.runtextstart for the next match.</summary>
            <param name="inputSpan">The text being scanned by the regular expression.</param>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.PlaceholderRegex_0.RunnerFactory.Runner.TryFindNextPossibleStartingPosition(System.ReadOnlySpan{System.Char})">
            <summary>Search <paramref name="inputSpan"/> starting from base.runtextpos for the next location a match could possibly start.</summary>
            <param name="inputSpan">The text being scanned by the regular expression.</param>
            <returns>true if a possible match was found; false if no more matches are possible.</returns>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.PlaceholderRegex_0.RunnerFactory.Runner.TryMatchAtCurrentPosition(System.ReadOnlySpan{System.Char})">
            <summary>Determine whether <paramref name="inputSpan"/> at base.runtextpos is a match for the regular expression.</summary>
            <param name="inputSpan">The text being scanned by the regular expression.</param>
            <returns>true if the regular expression matches at the current position; otherwise, false.</returns>
        </member>
        <member name="T:System.Text.RegularExpressions.Generated.WordRegex_1">
            <summary>Custom <see cref="T:System.Text.RegularExpressions.Regex"/>-derived type for the WordRegex method.</summary>
        </member>
        <member name="F:System.Text.RegularExpressions.Generated.WordRegex_1.Instance">
            <summary>Cached, thread-safe singleton instance.</summary>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.WordRegex_1.#ctor">
            <summary>Initializes the instance.</summary>
        </member>
        <member name="T:System.Text.RegularExpressions.Generated.WordRegex_1.RunnerFactory">
            <summary>Provides a factory for creating <see cref="T:System.Text.RegularExpressions.RegexRunner"/> instances to be used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.WordRegex_1.RunnerFactory.CreateInstance">
            <summary>Creates an instance of a <see cref="T:System.Text.RegularExpressions.RegexRunner"/> used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
        </member>
        <member name="T:System.Text.RegularExpressions.Generated.WordRegex_1.RunnerFactory.Runner">
            <summary>Provides the runner that contains the custom logic implementing the specified regular expression.</summary>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.WordRegex_1.RunnerFactory.Runner.Scan(System.ReadOnlySpan{System.Char})">
            <summary>Scan the <paramref name="inputSpan"/> starting from base.runtextstart for the next match.</summary>
            <param name="inputSpan">The text being scanned by the regular expression.</param>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.WordRegex_1.RunnerFactory.Runner.TryFindNextPossibleStartingPosition(System.ReadOnlySpan{System.Char})">
            <summary>Search <paramref name="inputSpan"/> starting from base.runtextpos for the next location a match could possibly start.</summary>
            <param name="inputSpan">The text being scanned by the regular expression.</param>
            <returns>true if a possible match was found; false if no more matches are possible.</returns>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.WordRegex_1.RunnerFactory.Runner.TryMatchAtCurrentPosition(System.ReadOnlySpan{System.Char})">
            <summary>Determine whether <paramref name="inputSpan"/> at base.runtextpos is a match for the regular expression.</summary>
            <param name="inputSpan">The text being scanned by the regular expression.</param>
            <returns>true if the regular expression matches at the current position; otherwise, false.</returns>
        </member>
        <member name="T:System.Text.RegularExpressions.Generated.ParameterRegex_2">
            <summary>Custom <see cref="T:System.Text.RegularExpressions.Regex"/>-derived type for the ParameterRegex method.</summary>
        </member>
        <member name="F:System.Text.RegularExpressions.Generated.ParameterRegex_2.Instance">
            <summary>Cached, thread-safe singleton instance.</summary>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.ParameterRegex_2.#ctor">
            <summary>Initializes the instance.</summary>
        </member>
        <member name="T:System.Text.RegularExpressions.Generated.ParameterRegex_2.RunnerFactory">
            <summary>Provides a factory for creating <see cref="T:System.Text.RegularExpressions.RegexRunner"/> instances to be used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.ParameterRegex_2.RunnerFactory.CreateInstance">
            <summary>Creates an instance of a <see cref="T:System.Text.RegularExpressions.RegexRunner"/> used by methods on <see cref="T:System.Text.RegularExpressions.Regex"/>.</summary>
        </member>
        <member name="T:System.Text.RegularExpressions.Generated.ParameterRegex_2.RunnerFactory.Runner">
            <summary>Provides the runner that contains the custom logic implementing the specified regular expression.</summary>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.ParameterRegex_2.RunnerFactory.Runner.Scan(System.ReadOnlySpan{System.Char})">
            <summary>Scan the <paramref name="inputSpan"/> starting from base.runtextstart for the next match.</summary>
            <param name="inputSpan">The text being scanned by the regular expression.</param>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.ParameterRegex_2.RunnerFactory.Runner.TryFindNextPossibleStartingPosition(System.ReadOnlySpan{System.Char})">
            <summary>Search <paramref name="inputSpan"/> starting from base.runtextpos for the next location a match could possibly start.</summary>
            <param name="inputSpan">The text being scanned by the regular expression.</param>
            <returns>true if a possible match was found; false if no more matches are possible.</returns>
        </member>
        <member name="M:System.Text.RegularExpressions.Generated.ParameterRegex_2.RunnerFactory.Runner.TryMatchAtCurrentPosition(System.ReadOnlySpan{System.Char})">
            <summary>Determine whether <paramref name="inputSpan"/> at base.runtextpos is a match for the regular expression.</summary>
            <param name="inputSpan">The text being scanned by the regular expression.</param>
            <returns>true if the regular expression matches at the current position; otherwise, false.</returns>
        </member>
        <member name="T:System.Text.RegularExpressions.Generated.Utilities">
            <summary>Helper methods used by generated <see cref="T:System.Text.RegularExpressions.Regex"/>-derived implementations.</summary>
        </member>
        <member name="F:System.Text.RegularExpressions.Generated.Utilities.s_defaultTimeout">
            <summary>Default timeout value set in <see cref="T:System.AppContext"/>, or <see cref="F:System.Text.RegularExpressions.Regex.InfiniteMatchTimeout"/> if none was set.</summary>
        </member>
        <member name="F:System.Text.RegularExpressions.Generated.Utilities.s_hasTimeout">
            <summary>Whether <see cref="F:System.Text.RegularExpressions.Generated.Utilities.s_defaultTimeout"/> is non-infinite.</summary>
        </member>
        <member name="F:System.Text.RegularExpressions.Generated.Utilities.s_asciiLettersAndUnderscore">
            <summary>Supports searching for characters in or not in "ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz".</summary>
        </member>
        <member name="F:System.Text.RegularExpressions.Generated.Utilities.s_asciiWordChars">
            <summary>Supports searching for characters in or not in "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz".</summary>
        </member>
    </members>
</doc>
