<?xml version="1.0"?>
<doc>
    <assembly>
        <name>Verdict.RuleEngine</name>
    </assembly>
    <members>
        <member name="T:Verdict.RuleEngine.Abstractions.FieldType">
            <summary>Static type of a contract field / connector parameter / connector output.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Abstractions.FieldType.String">
            <summary>String.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Abstractions.FieldType.Number">
            <summary>Decimal number.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Abstractions.FieldType.Bool">
            <summary>Boolean.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Abstractions.FieldType.Date">
            <summary>ISO-8601 date or date-time (carried as a string in JSON).</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Abstractions.FieldType.Array">
            <summary>Array.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Abstractions.FieldType.Object">
            <summary>Object.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Abstractions.FieldTypeJsonConverter">
            <summary>JSON converter for <see cref="T:Verdict.RuleEngine.Abstractions.FieldType"/> (<c>string|number|bool|date|array|object</c>).</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Abstractions.FieldTypeJsonConverter.Instance">
            <summary>Shared instance.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.FieldTypeJsonConverter.#ctor">
            <summary>Initializes the converter.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Abstractions.FieldTypeExtensions">
            <summary>Helpers for <see cref="T:Verdict.RuleEngine.Abstractions.FieldType"/>.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.FieldTypeExtensions.ToRuleValueType(Verdict.RuleEngine.Abstractions.FieldType)">
            <summary>Maps a static field type to the runtime value type.</summary>
            <param name="type">Field type.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.FieldTypeExtensions.ToToken(Verdict.RuleEngine.Abstractions.FieldType)">
            <summary>DSL token of a field type.</summary>
            <param name="type">Field type.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Abstractions.ContractField">
            <summary>A field of the application data contract.</summary>
            <param name="Path">Dotted path (e.g. <c>applicant.dob</c>).</param>
            <param name="Type">Static type.</param>
            <param name="Nullable">Whether the field may be null or absent at runtime.</param>
            <param name="AllowedValues">Optional closed set of allowed values (strings).</param>
            <param name="MaxLength">Optional maximum string length.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.ContractField.#ctor(System.String,Verdict.RuleEngine.Abstractions.FieldType,System.Boolean,System.String[],System.Nullable{System.Int32})">
            <summary>A field of the application data contract.</summary>
            <param name="Path">Dotted path (e.g. <c>applicant.dob</c>).</param>
            <param name="Type">Static type.</param>
            <param name="Nullable">Whether the field may be null or absent at runtime.</param>
            <param name="AllowedValues">Optional closed set of allowed values (strings).</param>
            <param name="MaxLength">Optional maximum string length.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.ContractField.Path">
            <summary>Dotted path (e.g. <c>applicant.dob</c>).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.ContractField.Type">
            <summary>Static type.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.ContractField.Nullable">
            <summary>Whether the field may be null or absent at runtime.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.ContractField.AllowedValues">
            <summary>Optional closed set of allowed values (strings).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.ContractField.MaxLength">
            <summary>Optional maximum string length.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.ContractField.Equals(Verdict.RuleEngine.Abstractions.ContractField)">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.ContractField.GetHashCode">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Abstractions.ContractSchema">
            <summary>
            Versioned dictionary of contract fields supplied by the host (the host owns the Application Data Contract).
            Validation type-checks every field reference of a ruleset against it.
            </summary>
            <param name="Id">Contract id (e.g. <c>app-contract</c>).</param>
            <param name="Version">Contract version (≥ 1).</param>
            <param name="Fields">Fields keyed by path.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.ContractSchema.#ctor(System.String,System.Int32,System.Collections.Generic.IReadOnlyDictionary{System.String,Verdict.RuleEngine.Abstractions.ContractField})">
            <summary>
            Versioned dictionary of contract fields supplied by the host (the host owns the Application Data Contract).
            Validation type-checks every field reference of a ruleset against it.
            </summary>
            <param name="Id">Contract id (e.g. <c>app-contract</c>).</param>
            <param name="Version">Contract version (≥ 1).</param>
            <param name="Fields">Fields keyed by path.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.ContractSchema.Id">
            <summary>Contract id (e.g. <c>app-contract</c>).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.ContractSchema.Version">
            <summary>Contract version (≥ 1).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.ContractSchema.Fields">
            <summary>Fields keyed by path.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Abstractions.ContractSchema.ReferenceIdPath">
            <summary>Path of the reference id inherited by every contract.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Abstractions.ContractSchema.ReferenceIdMaxLength">
            <summary>Maximum supported length of the inherited reference id.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.ContractSchema.ReferenceIdField">
            <summary>Mandatory field inherited by every contract.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.ContractSchema.Ref">
            <summary>Reference of this contract (<c>{id}@v{version}</c>).</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.ContractSchema.Create(System.String,System.Int32,System.Collections.Generic.IEnumerable{Verdict.RuleEngine.Abstractions.ContractField})">
            <summary>Creates a contract from a list of fields.</summary>
            <param name="id">Contract id.</param>
            <param name="version">Version.</param>
            <param name="fields">Fields.</param>
            <exception cref="T:System.ArgumentException">A field is invalid, duplicated, or conflicts with a base field.</exception>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.ContractSchema.TryGetField(System.String,Verdict.RuleEngine.Abstractions.ContractField@)">
            <summary>Attempts to resolve a field by exact path.</summary>
            <param name="path">Path.</param>
            <param name="field">Field.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.ContractSchema.Match(System.String)">
            <summary>
            Returns the fields matching an input declaration: an exact path, or a glob ending in <c>.*</c> (all fields under
            the prefix) or the bare <c>*</c> (all fields).
            </summary>
            <param name="pathOrGlob">Path or glob.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.ContractSchema.IsCovered(System.String,System.Collections.Generic.IEnumerable{System.String})">
            <summary>Whether a field path is covered by any of the given input declarations.</summary>
            <param name="path">Field path.</param>
            <param name="inputs">Input declarations (paths or globs).</param>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.ContractSchema.ToJson">
            <summary>Serializes the contract to its JSON document form.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.ContractSchema.ToCanonicalJson">
            <summary>Serializes the contract canonically (for hashing / persistence).</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.ContractSchema.FromJson(System.String)">
            <summary>Parses the JSON document form (<c>{ "id", "version", "fields": [ ... ] }</c>).</summary>
            <param name="json">JSON text.</param>
            <exception cref="T:Verdict.RuleEngine.Dsl.DslParseException">Invalid document.</exception>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.ContractSchema.Equals(Verdict.RuleEngine.Abstractions.ContractSchema)">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.ContractSchema.GetHashCode">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Abstractions.ContractSchemaDocument">
            <summary>JSON document form of a contract schema.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.ContractSchemaDocument.Id">
            <summary>Contract id.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.ContractSchemaDocument.Version">
            <summary>Version.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.ContractSchemaDocument.Fields">
            <summary>Fields.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.ContractSchemaDocument.From(Verdict.RuleEngine.Abstractions.ContractSchema)">
            <summary>Creates the document form of a schema (fields sorted by path).</summary>
            <param name="schema">Schema.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Abstractions.ExecutionMode">
            <summary>Execution mode: production uses production connector targets; sandbox never does.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Abstractions.ExecutionMode.Production">
            <summary>Live execution: production connector targets, trace persisted.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Abstractions.ExecutionMode.Sandbox">
            <summary>Test execution: recorded mocks / test targets only; may execute non-published versions.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Abstractions.RuleOutcome">
            <summary>Final outcome of a ruleset execution.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Abstractions.RuleOutcome.Pass">
            <summary>All checks passed.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Abstractions.RuleOutcome.Fail">
            <summary>At least one check failed.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Abstractions.RuleOutcome.Flag">
            <summary>Human review required.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Abstractions.RuleOutcomeExtensions">
            <summary>Helpers for <see cref="T:Verdict.RuleEngine.Abstractions.RuleOutcome"/>.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.RuleOutcomeExtensions.ToRuleOutcome(Verdict.RuleEngine.Dsl.OutcomeKind)">
            <summary>Maps a DSL outcome kind to the result outcome.</summary>
            <param name="kind">Kind.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.RuleOutcomeExtensions.ToToken(Verdict.RuleEngine.Abstractions.RuleOutcome)">
            <summary>DSL token (<c>PASS</c>/<c>FAIL</c>/<c>FLAG</c>).</summary>
            <param name="outcome">Outcome.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Abstractions.FiredOutcome">
            <summary>An <c>outcome</c> node that fired during execution.</summary>
            <param name="NodeId">Node id.</param>
            <param name="Outcome">Outcome kind.</param>
            <param name="Hard">Whether the outcome is hard (only meaningful for <see cref="F:Verdict.RuleEngine.Abstractions.RuleOutcome.Fail"/>).</param>
            <param name="ReasonCode">Stable reason code.</param>
            <param name="ReasonText">Rendered reason text.</param>
            <param name="Severity">Severity annotation.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.FiredOutcome.#ctor(System.String,Verdict.RuleEngine.Abstractions.RuleOutcome,System.Boolean,System.String,System.String,System.Nullable{Verdict.RuleEngine.Dsl.OutcomeSeverity})">
            <summary>An <c>outcome</c> node that fired during execution.</summary>
            <param name="NodeId">Node id.</param>
            <param name="Outcome">Outcome kind.</param>
            <param name="Hard">Whether the outcome is hard (only meaningful for <see cref="F:Verdict.RuleEngine.Abstractions.RuleOutcome.Fail"/>).</param>
            <param name="ReasonCode">Stable reason code.</param>
            <param name="ReasonText">Rendered reason text.</param>
            <param name="Severity">Severity annotation.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.FiredOutcome.NodeId">
            <summary>Node id.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.FiredOutcome.Outcome">
            <summary>Outcome kind.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.FiredOutcome.Hard">
            <summary>Whether the outcome is hard (only meaningful for <see cref="F:Verdict.RuleEngine.Abstractions.RuleOutcome.Fail"/>).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.FiredOutcome.ReasonCode">
            <summary>Stable reason code.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.FiredOutcome.ReasonText">
            <summary>Rendered reason text.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.FiredOutcome.Severity">
            <summary>Severity annotation.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Abstractions.RulesetExecutionRequest">
            <summary>Request to execute a ruleset.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetExecutionRequest.RulesetId">
            <summary>Ruleset id.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetExecutionRequest.Version">
            <summary>Version to execute (<see cref="T:Verdict.RuleEngine.Abstractions.VersionSelector.Pinned"/> or <see cref="T:Verdict.RuleEngine.Abstractions.VersionSelector.LatestPublished"/>).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetExecutionRequest.Input">
            <summary>Application payload.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetExecutionRequest.Mode">
            <summary>Execution mode.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetExecutionRequest.CorrelationId">
            <summary>Host correlation id, recorded with the persisted trace.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetExecutionRequest.Redaction">
            <summary>Trace redaction overrides (merged with <see cref="P:Verdict.RuleEngine.Abstractions.RuleEngineOptions.DefaultRedaction"/>).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetExecutionRequest.Actor">
            <summary>Actor recorded for sandbox test runs.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Abstractions.RulesetExecutionResult">
            <summary>
            Result of a ruleset execution.
            <para>
            <b>Non-negotiable:</b> <see cref="P:Verdict.RuleEngine.Abstractions.RulesetExecutionResult.HardFail"/> is authoritative. When it is <see langword="true"/> a hard
            <c>FAIL</c> outcome fired and no host, ML or downstream component may turn the decision into a pass.
            <see cref="P:Verdict.RuleEngine.Abstractions.RulesetExecutionResult.Trace"/> is never null and never empty: an execution without an explanation is a bug.
            </para>
            </summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetExecutionResult.RulesetId">
            <summary>Ruleset id.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetExecutionResult.Version">
            <summary>Version executed.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetExecutionResult.Outcome">
            <summary>Final outcome (<c>FAIL</c> if any FAIL fired, else <c>FLAG</c> if any FLAG fired, else <c>PASS</c>).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetExecutionResult.HardFail">
            <summary>True when any fired outcome is a hard <c>FAIL</c>. Must never be overridden by the host.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetExecutionResult.FiredOutcomes">
            <summary>All outcomes that fired, in visit order.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetExecutionResult.Score">
            <summary>Sum of all accumulators, or <see langword="null"/> when the ruleset used none.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetExecutionResult.Trace">
            <summary>Complete explanation. Never null, never empty.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetExecutionResult.Elapsed">
            <summary>Wall-clock duration.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetExecutionResult.RouteHints">
            <summary>Route hints collected from <c>routeHint</c> nodes, in visit order.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetExecutionResult.Accumulators">
            <summary>Per-accumulator totals.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetExecutionResult.Mode">
            <summary>Execution mode.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetExecutionResult.CorrelationId">
            <summary>Correlation id echoed from the request.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Abstractions.RedactionStrategy">
            <summary>How a redacted value is represented in traces.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Abstractions.RedactionStrategy.Mask">
            <summary>Replace with <c>***</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Abstractions.RedactionStrategy.Hash">
            <summary>Replace with a SHA-256 hex digest of the canonical value.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Abstractions.RedactionStrategy.Omit">
            <summary>Omit the value entirely (<c>⟨omitted⟩</c>).</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Abstractions.RedactionRule">
            <summary>One redaction rule.</summary>
            <param name="Path">
            Scope field path (e.g. <c>applicant.dob</c>), a glob (<c>applicant.*</c>), or a connector parameter selector of the
            form <c>connector:{ref}:{param}</c> (e.g. <c>connector:conn-interpol-api@v2:passportNo</c>; <c>*</c> allowed for ref or param).
            </param>
            <param name="Strategy">Strategy.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.RedactionRule.#ctor(System.String,Verdict.RuleEngine.Abstractions.RedactionStrategy)">
            <summary>One redaction rule.</summary>
            <param name="Path">
            Scope field path (e.g. <c>applicant.dob</c>), a glob (<c>applicant.*</c>), or a connector parameter selector of the
            form <c>connector:{ref}:{param}</c> (e.g. <c>connector:conn-interpol-api@v2:passportNo</c>; <c>*</c> allowed for ref or param).
            </param>
            <param name="Strategy">Strategy.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RedactionRule.Path">
            <summary>
            Scope field path (e.g. <c>applicant.dob</c>), a glob (<c>applicant.*</c>), or a connector parameter selector of the
            form <c>connector:{ref}:{param}</c> (e.g. <c>connector:conn-interpol-api@v2:passportNo</c>; <c>*</c> allowed for ref or param).
            </summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RedactionRule.Strategy">
            <summary>Strategy.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Abstractions.RedactionProfile">
            <summary>A set of redaction rules. Unredacted values of matched paths are never written to traces.</summary>
            <param name="Rules">Rules.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.RedactionProfile.#ctor(System.Collections.Generic.IReadOnlyList{Verdict.RuleEngine.Abstractions.RedactionRule})">
            <summary>A set of redaction rules. Unredacted values of matched paths are never written to traces.</summary>
            <param name="Rules">Rules.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RedactionProfile.Rules">
            <summary>Rules.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Abstractions.RedactionProfile.Empty">
            <summary>No redaction.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.RedactionProfile.Merge(Verdict.RuleEngine.Abstractions.RedactionProfile)">
            <summary>Concatenates two profiles (later rules take precedence).</summary>
            <param name="other">Profile whose rules are appended.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Abstractions.RuleEngineOptions">
            <summary>Engine-wide options (configure via <c>AddRuleEngine(cfg =&gt; cfg.Options...)</c>).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RuleEngineOptions.MaxSubRulesetDepth">
            <summary>Maximum <c>subRuleset</c> nesting depth (default 3).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RuleEngineOptions.DefaultConnectorTimeout">
            <summary>Connector timeout used when a node does not specify <c>timeoutMs</c> (default 5 s).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RuleEngineOptions.MaxConnectorTimeout">
            <summary>Upper bound for any connector timeout, including per-node overrides (default 30 s).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RuleEngineOptions.RequireFourEyesPublish">
            <summary>Require the publishing approver to differ from the draft author (default true).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RuleEngineOptions.NodeBudget">
            <summary>Maximum visited nodes per execution, including sub-rulesets (default 500).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RuleEngineOptions.PersistProductionTraces">
            <summary>Persist production traces through <see cref="M:Verdict.RuleEngine.Abstractions.IRulesetStore.SaveExecutionTraceAsync(Verdict.RuleEngine.Abstractions.PersistedTrace,System.Threading.CancellationToken)"/> (default true).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RuleEngineOptions.PersistSandboxTestRuns">
            <summary>Persist sandbox executions as test runs through <see cref="M:Verdict.RuleEngine.Abstractions.IRulesetStore.SaveTestRunAsync(Verdict.RuleEngine.Abstractions.RulesetTestRun,System.Threading.CancellationToken)"/> (default true).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RuleEngineOptions.DefaultRedaction">
            <summary>Redaction applied to every execution (request profiles are merged on top).</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.RuleEngineOptions.Validate">
            <summary>Validates option values.</summary>
            <exception cref="T:System.ArgumentOutOfRangeException">An option is out of range.</exception>
        </member>
        <member name="T:Verdict.RuleEngine.Abstractions.IRuleEngine">
            <summary>The rule engine facade.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.IRuleEngine.ExecuteAsync(Verdict.RuleEngine.Abstractions.RulesetExecutionRequest,System.Threading.CancellationToken)">
            <summary>
            Executes a published (or, in <see cref="F:Verdict.RuleEngine.Abstractions.ExecutionMode.Sandbox"/>, any non-archived) ruleset version against an
            input payload. Never throws for rule-level problems: evaluation errors, connector failures and budget overruns
            surface as outcomes with a full trace: connector failures follow the node's <c>onErrorBehavior</c>, while
            engine-level errors (evaluation error, unknown node, sub-ruleset resolution, node budget) fail the whole cycle
            as a hard <c>FAIL</c> and abort traversal.
            </summary>
            <param name="request">Request.</param>
            <param name="ct">Cancellation token.</param>
            <exception cref="T:Verdict.RuleEngine.Abstractions.RulesetNotFoundException">The ruleset / version does not exist or is not executable in the requested mode.</exception>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.IRuleEngine.Validate(Verdict.RuleEngine.Dsl.RulesetDocument,Verdict.RuleEngine.Abstractions.ContractSchema)">
            <summary>
            Static validation of a DSL document without execution. Performs all local checks (shape, graph, scope flow,
            typing). Referential checks against connector and sub-ruleset stores require <see cref="M:Verdict.RuleEngine.Abstractions.IRuleEngine.ValidateAsync(Verdict.RuleEngine.Dsl.RulesetDocument,Verdict.RuleEngine.Abstractions.ContractSchema,System.Threading.CancellationToken)"/>; this
            overload reports them as skipped (<c>RS900</c> warning).
            </summary>
            <param name="document">Document.</param>
            <param name="contract">Contract schema the document is validated against.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.IRuleEngine.ValidateAsync(Verdict.RuleEngine.Dsl.RulesetDocument,Verdict.RuleEngine.Abstractions.ContractSchema,System.Threading.CancellationToken)">
            <summary>Full static validation including connector and sub-ruleset referential checks.</summary>
            <param name="document">Document.</param>
            <param name="contract">Contract schema.</param>
            <param name="ct">Cancellation token.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Abstractions.RulesetNotFoundException">
            <summary>Thrown when a ruleset version cannot be resolved for execution.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.RulesetNotFoundException.#ctor">
            <summary>Initializes the exception.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.RulesetNotFoundException.#ctor(System.String)">
            <summary>Initializes the exception.</summary>
            <param name="message">Message.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.RulesetNotFoundException.#ctor(System.String,System.Exception)">
            <summary>Initializes the exception.</summary>
            <param name="message">Message.</param>
            <param name="innerException">Inner exception.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Abstractions.VersionSelector">
            <summary>Selects which version of a ruleset to load: a pinned number or the latest published one.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.VersionSelector.Latest">
            <summary>The latest <see cref="F:Verdict.RuleEngine.Versioning.RulesetState.Published"/> version.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.VersionSelector.Pin(System.Int32)">
            <summary>Selects a specific version number.</summary>
            <param name="version">Version (≥ 1).</param>
        </member>
        <member name="T:Verdict.RuleEngine.Abstractions.VersionSelector.Pinned">
            <summary>A specific version number.</summary>
            <param name="Version">Version (≥ 1).</param>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.VersionSelector.Pinned.#ctor(System.Int32)">
            <summary>A specific version number.</summary>
            <param name="Version">Version (≥ 1).</param>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.VersionSelector.Pinned.Version">
            <summary>Version (≥ 1).</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.VersionSelector.Pinned.ToString">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Abstractions.VersionSelector.LatestPublished">
            <summary>The latest published version.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.VersionSelector.LatestPublished.ToString">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Abstractions.RulesetVersionRecord">
            <summary>A stored ruleset version: the document plus lifecycle metadata.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetVersionRecord.RulesetId">
            <summary>Ruleset id.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetVersionRecord.Version">
            <summary>Version number (≥ 1, monotonically increasing per ruleset).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetVersionRecord.State">
            <summary>Lifecycle state.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetVersionRecord.Document">
            <summary>The DSL document.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetVersionRecord.DocumentHash">
            <summary>SHA-256 (hex) of the canonical document, computed on save.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetVersionRecord.ContractId">
            <summary>Contract id referenced by the document.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetVersionRecord.ContractVersion">
            <summary>Contract version referenced by the document.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetVersionRecord.ChangeNotes">
            <summary>Free-text change notes.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetVersionRecord.Author">
            <summary>Author of the draft.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetVersionRecord.ApprovedBy">
            <summary>Approver who published (must differ from <see cref="P:Verdict.RuleEngine.Abstractions.RulesetVersionRecord.Author"/> under four-eyes).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetVersionRecord.CreatedAt">
            <summary>Creation timestamp (UTC).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetVersionRecord.UpdatedAt">
            <summary>Last update timestamp (UTC).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetVersionRecord.PublishedAt">
            <summary>Publication timestamp (UTC).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetVersionRecord.DeprecatedAt">
            <summary>Deprecation timestamp (UTC).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetVersionRecord.Ref">
            <summary>Reference of this version.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Abstractions.TransitionContext">
            <summary>Who performs a lifecycle transition and why.</summary>
            <param name="Actor">User / service performing the transition (the approver for publishing).</param>
            <param name="Notes">Optional notes recorded in the audit log.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.TransitionContext.#ctor(System.String,System.String)">
            <summary>Who performs a lifecycle transition and why.</summary>
            <param name="Actor">User / service performing the transition (the approver for publishing).</param>
            <param name="Notes">Optional notes recorded in the audit log.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.TransitionContext.Actor">
            <summary>User / service performing the transition (the approver for publishing).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.TransitionContext.Notes">
            <summary>Optional notes recorded in the audit log.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Abstractions.RulesetTestRun">
            <summary>A sandbox test run persisted for audit / regression purposes.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetTestRun.Id">
            <summary>Run id.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetTestRun.RulesetId">
            <summary>Ruleset id.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetTestRun.Version">
            <summary>Version executed.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetTestRun.Input">
            <summary>Input payload.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetTestRun.Result">
            <summary>Serialized <see cref="T:Verdict.RuleEngine.Abstractions.RulesetExecutionResult"/>.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetTestRun.CreatedBy">
            <summary>Who ran the test.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.RulesetTestRun.CreatedAt">
            <summary>When (UTC).</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Abstractions.PersistedTrace">
            <summary>A production execution trace persisted append-only.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.PersistedTrace.Id">
            <summary>Trace id.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.PersistedTrace.RulesetId">
            <summary>Ruleset id.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.PersistedTrace.Version">
            <summary>Version executed.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.PersistedTrace.CorrelationId">
            <summary>Host correlation id.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.PersistedTrace.Mode">
            <summary>Execution mode.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.PersistedTrace.Outcome">
            <summary>Final outcome.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.PersistedTrace.HardFail">
            <summary>Whether a hard failure fired.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.PersistedTrace.Score">
            <summary>Accumulated score, if any.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.PersistedTrace.Trace">
            <summary>The trace.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.PersistedTrace.ElapsedMs">
            <summary>Elapsed milliseconds.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.PersistedTrace.CreatedAt">
            <summary>When (UTC).</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Abstractions.IRulesetStore">
            <summary>Persistence of rulesets, their versions, test runs and production traces. Implemented by the EF Core package.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.IRulesetStore.GetAsync(System.String,Verdict.RuleEngine.Abstractions.VersionSelector,System.Threading.CancellationToken)">
            <summary>Loads a version (pinned or latest published). Returns <see langword="null"/> when not found.</summary>
            <param name="rulesetId">Ruleset id.</param>
            <param name="v">Version selector.</param>
            <param name="ct">Cancellation token.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.IRulesetStore.SaveDraftAsync(Verdict.RuleEngine.Dsl.RulesetDocument,System.String,System.Threading.CancellationToken)">
            <summary>Saves a document as a new <see cref="F:Verdict.RuleEngine.Versioning.RulesetState.Draft"/> version (version = max + 1) and computes its hash.</summary>
            <param name="doc">Document.</param>
            <param name="author">Author.</param>
            <param name="ct">Cancellation token.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.IRulesetStore.TransitionAsync(System.String,System.Int32,Verdict.RuleEngine.Versioning.RulesetState,Verdict.RuleEngine.Abstractions.TransitionContext,System.Threading.CancellationToken)">
            <summary>
            Performs a lifecycle transition, enforcing the state machine and (when configured) four-eyes approval:
            publishing requires <c>ctx.Actor != Author</c>. Publishing also re-runs validation and refuses on any error.
            Every transition writes an audit row.
            </summary>
            <param name="rulesetId">Ruleset id.</param>
            <param name="version">Version.</param>
            <param name="toState">Target state.</param>
            <param name="ctx">Actor and notes.</param>
            <param name="ct">Cancellation token.</param>
            <exception cref="T:Verdict.RuleEngine.Versioning.InvalidStateTransitionException">Transition not allowed.</exception>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.IRulesetStore.CreateDraftFromVersionAsync(System.String,System.Int32,System.String,System.String,System.Threading.CancellationToken)">
            <summary>
            Creates a new draft version by copying the content of an existing version (the "re-publish" / rollback flow:
            published rows never change, a new row is published instead).
            </summary>
            <param name="rulesetId">Ruleset id.</param>
            <param name="sourceVersion">Version to copy.</param>
            <param name="author">Author of the new draft.</param>
            <param name="changeNotes">Change notes.</param>
            <param name="ct">Cancellation token.</param>
            <exception cref="T:Verdict.RuleEngine.Abstractions.RulesetNotFoundException">The source version does not exist.</exception>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.IRulesetStore.UpdateDraftAsync(System.String,System.Int32,Verdict.RuleEngine.Dsl.RulesetDocument,System.String,System.String,System.Threading.CancellationToken)">
            <summary>
            Replaces the document of an existing <see cref="F:Verdict.RuleEngine.Versioning.RulesetState.Draft"/> version in place. Published (and any
            other non-draft) versions are immutable — edit them by creating a new draft instead
            (<see cref="M:Verdict.RuleEngine.Abstractions.IRulesetStore.CreateDraftFromVersionAsync(System.String,System.Int32,System.String,System.String,System.Threading.CancellationToken)"/>).
            </summary>
            <param name="rulesetId">Ruleset id (must match <paramref name="doc"/>).</param>
            <param name="version">Draft version number.</param>
            <param name="doc">New document content.</param>
            <param name="actor">Who edited.</param>
            <param name="changeNotes">Optional change notes (kept unchanged when <see langword="null"/>).</param>
            <param name="ct">Cancellation token.</param>
            <exception cref="T:Verdict.RuleEngine.Abstractions.RulesetNotFoundException">The version does not exist.</exception>
            <exception cref="T:Verdict.RuleEngine.Versioning.InvalidStateTransitionException">The version is not a draft.</exception>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.IRulesetStore.DeleteDraftAsync(System.String,System.Int32,System.String,System.Threading.CancellationToken)">
            <summary>
            Deletes a <see cref="F:Verdict.RuleEngine.Versioning.RulesetState.Draft"/> version. Any other state is refused — published history is
            immutable; retire versions through Deprecated/Archived transitions instead. Removing the last version also
            removes the ruleset itself.
            </summary>
            <param name="rulesetId">Ruleset id.</param>
            <param name="version">Draft version number.</param>
            <param name="actor">Who deleted.</param>
            <param name="ct">Cancellation token.</param>
            <exception cref="T:Verdict.RuleEngine.Abstractions.RulesetNotFoundException">The version does not exist.</exception>
            <exception cref="T:Verdict.RuleEngine.Versioning.InvalidStateTransitionException">The version is not a draft.</exception>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.IRulesetStore.ListVersionsAsync(System.String,System.Threading.CancellationToken)">
            <summary>Lists all versions of a ruleset, newest first.</summary>
            <param name="rulesetId">Ruleset id.</param>
            <param name="ct">Cancellation token.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.IRulesetStore.SaveTestRunAsync(Verdict.RuleEngine.Abstractions.RulesetTestRun,System.Threading.CancellationToken)">
            <summary>Persists a sandbox test run.</summary>
            <param name="run">Run.</param>
            <param name="ct">Cancellation token.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.IRulesetStore.SaveExecutionTraceAsync(Verdict.RuleEngine.Abstractions.PersistedTrace,System.Threading.CancellationToken)">
            <summary>Persists a production execution trace (append-only).</summary>
            <param name="trace">Trace.</param>
            <param name="ct">Cancellation token.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Abstractions.IContractSchemaStore">
            <summary>Persistence of contract schemas so validation is reproducible per ruleset version.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.IContractSchemaStore.GetAsync(Verdict.RuleEngine.Dsl.ContractRef,System.Threading.CancellationToken)">
            <summary>Loads a contract version, or <see langword="null"/>.</summary>
            <param name="ref">Reference.</param>
            <param name="ct">Cancellation token.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.IContractSchemaStore.SaveAsync(Verdict.RuleEngine.Abstractions.ContractSchema,System.Threading.CancellationToken)">
            <summary>Saves (upserts) a contract version.</summary>
            <param name="schema">Schema.</param>
            <param name="ct">Cancellation token.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Abstractions.ValidationSeverity">
            <summary>Severity of a validation finding.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Abstractions.ValidationSeverity.Error">
            <summary>Blocks publishing.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Abstractions.ValidationSeverity.Warning">
            <summary>Informational; does not block publishing.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Abstractions.ValidationFinding">
            <summary>One validation finding.</summary>
            <param name="Code">Stable code (e.g. <c>RS010</c>); see <c>Verdict.RuleEngine.Validation.ValidationCodes</c>.</param>
            <param name="Severity">Severity.</param>
            <param name="NodeId">Node the finding relates to, when applicable.</param>
            <param name="Message">Human-readable message.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.ValidationFinding.#ctor(System.String,Verdict.RuleEngine.Abstractions.ValidationSeverity,System.String,System.String)">
            <summary>One validation finding.</summary>
            <param name="Code">Stable code (e.g. <c>RS010</c>); see <c>Verdict.RuleEngine.Validation.ValidationCodes</c>.</param>
            <param name="Severity">Severity.</param>
            <param name="NodeId">Node the finding relates to, when applicable.</param>
            <param name="Message">Human-readable message.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.ValidationFinding.Code">
            <summary>Stable code (e.g. <c>RS010</c>); see <c>Verdict.RuleEngine.Validation.ValidationCodes</c>.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.ValidationFinding.Severity">
            <summary>Severity.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.ValidationFinding.NodeId">
            <summary>Node the finding relates to, when applicable.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.ValidationFinding.Message">
            <summary>Human-readable message.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.ValidationFinding.ToString">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Abstractions.ValidationReport">
            <summary>Aggregated result of static validation. Validation never fails fast: all findings are returned.</summary>
            <param name="Findings">All findings in discovery order.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.ValidationReport.#ctor(System.Collections.Generic.IReadOnlyList{Verdict.RuleEngine.Abstractions.ValidationFinding})">
            <summary>Aggregated result of static validation. Validation never fails fast: all findings are returned.</summary>
            <param name="Findings">All findings in discovery order.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.ValidationReport.Findings">
            <summary>All findings in discovery order.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Abstractions.ValidationReport.Empty">
            <summary>An empty (valid) report.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.ValidationReport.IsValid">
            <summary>True when there are no <see cref="F:Verdict.RuleEngine.Abstractions.ValidationSeverity.Error"/> findings.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.ValidationReport.Errors">
            <summary>Error findings.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.ValidationReport.Warnings">
            <summary>Warning findings.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Abstractions.ValidationReport.Codes">
            <summary>Distinct codes present in the report.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.ValidationReport.Has(System.String)">
            <summary>Whether a finding with the given code exists.</summary>
            <param name="code">Code.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Abstractions.ValidationReport.ToString">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.ConnectorKind">
            <summary>Kind of connector.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Connectors.ConnectorKind.Db">
            <summary>Parameterized read-only SQL against a database.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Connectors.ConnectorKind.Api">
            <summary>REST API consumer.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.ConnectorKindJsonConverter">
            <summary>JSON converter for <see cref="T:Verdict.RuleEngine.Connectors.ConnectorKind"/> (<c>db|api</c>).</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.ConnectorKindJsonConverter.#ctor">
            <summary>Initializes the converter.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.ConnectorParameter">
            <summary>A typed input parameter of a connector operation.</summary>
            <param name="Name">Parameter name (referenced as <c>@name</c> in SQL / <c>{name}</c> in API templates).</param>
            <param name="Type">Static type.</param>
            <param name="Required">Whether the parameter must be mapped by every <c>connectorCheck</c> node.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.ConnectorParameter.#ctor(System.String,Verdict.RuleEngine.Abstractions.FieldType,System.Boolean)">
            <summary>A typed input parameter of a connector operation.</summary>
            <param name="Name">Parameter name (referenced as <c>@name</c> in SQL / <c>{name}</c> in API templates).</param>
            <param name="Type">Static type.</param>
            <param name="Required">Whether the parameter must be mapped by every <c>connectorCheck</c> node.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorParameter.Name">
            <summary>Parameter name (referenced as <c>@name</c> in SQL / <c>{name}</c> in API templates).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorParameter.Type">
            <summary>Static type.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorParameter.Required">
            <summary>Whether the parameter must be mapped by every <c>connectorCheck</c> node.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.ConnectorOutput">
            <summary>A declared output of a connector operation (exposed as <c>{outputAs}.{name}</c>).</summary>
            <param name="Name">Output name (DB: column name).</param>
            <param name="Type">Static type.</param>
            <param name="Nullable">Whether the output may be null.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.ConnectorOutput.#ctor(System.String,Verdict.RuleEngine.Abstractions.FieldType,System.Boolean)">
            <summary>A declared output of a connector operation (exposed as <c>{outputAs}.{name}</c>).</summary>
            <param name="Name">Output name (DB: column name).</param>
            <param name="Type">Static type.</param>
            <param name="Nullable">Whether the output may be null.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorOutput.Name">
            <summary>Output name (DB: column name).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorOutput.Type">
            <summary>Static type.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorOutput.Nullable">
            <summary>Whether the output may be null.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.ConnectorOperation">
            <summary>Base of connector operations. Polymorphic on <c>kind</c> (<c>db</c> / <c>api</c>).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorOperation.Name">
            <summary>Operation name.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorOperation.Parameters">
            <summary>Input parameters.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorOperation.Outputs">
            <summary>Declared outputs.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorOperation.TimeoutMs">
            <summary>Operation timeout in milliseconds (optional; engine default applies).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorOperation.OperationKind">
            <summary>Kind of connector this operation belongs to.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorOperation.EffectiveOutputs">
            <summary>All output names exposed by this operation, including implicit ones (<c>rowFound</c> for DB).</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.ConnectorOperation.FindParameter(System.String)">
            <summary>Finds a parameter by name.</summary>
            <param name="name">Name.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.DbOperation">
            <summary>A single-SELECT read-only database operation.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Connectors.DbOperation.RowFoundOutput">
            <summary>Implicit boolean output telling whether a row was found.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.DbOperation.CommandText">
            <summary>The SELECT statement; may only reference parameters as <c>@name</c>.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.DbOperation.CacheTtlSec">
            <summary>Optional result cache TTL in seconds.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.DbOperation.OperationKind">
            <inheritdoc />
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.DbOperation.EffectiveOutputs">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.ApiAuthType">
            <summary>Authentication scheme of an API operation.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Connectors.ApiAuthType.None">
            <summary>No authentication.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Connectors.ApiAuthType.ApiKeyHeader">
            <summary>Static API key sent in a header.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Connectors.ApiAuthType.BearerStatic">
            <summary>Static bearer token.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Connectors.ApiAuthType.Basic">
            <summary>HTTP basic.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Connectors.ApiAuthType.OAuth2ClientCredentials">
            <summary>OAuth2 client-credentials grant.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.ApiAuthTypeJsonConverter">
            <summary>JSON converter for <see cref="T:Verdict.RuleEngine.Connectors.ApiAuthType"/>.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.ApiAuthTypeJsonConverter.#ctor">
            <summary>Initializes the converter.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.ApiAuthConfig">
            <summary>Authentication configuration. Secret-bearing values are references (<c>secret://name</c>) resolved by the host's <c>ISecretResolver</c>.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ApiAuthConfig.Type">
            <summary>Scheme.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ApiAuthConfig.HeaderName">
            <summary>Header name for <see cref="F:Verdict.RuleEngine.Connectors.ApiAuthType.ApiKeyHeader"/> (default <c>X-Api-Key</c>).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ApiAuthConfig.Secret">
            <summary>API key / bearer token reference.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ApiAuthConfig.ClientId">
            <summary>Username (basic) or client id (OAuth2).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ApiAuthConfig.ClientSecret">
            <summary>Password (basic) or client secret (OAuth2) reference.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ApiAuthConfig.TokenUrl">
            <summary>Token endpoint for OAuth2 client credentials.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ApiAuthConfig.Scope">
            <summary>OAuth2 scope.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.RetryPolicy">
            <summary>Retry policy of an API operation.</summary>
            <param name="Count">Number of retries after the first attempt.</param>
            <param name="BackoffMs">Base backoff between attempts in milliseconds.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.RetryPolicy.#ctor(System.Int32,System.Int32)">
            <summary>Retry policy of an API operation.</summary>
            <param name="Count">Number of retries after the first attempt.</param>
            <param name="BackoffMs">Base backoff between attempts in milliseconds.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.RetryPolicy.Count">
            <summary>Number of retries after the first attempt.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.RetryPolicy.BackoffMs">
            <summary>Base backoff between attempts in milliseconds.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.CircuitBreakerPolicy">
            <summary>Circuit-breaker policy of an API operation.</summary>
            <param name="Failures">Failures within the window that open the circuit.</param>
            <param name="WindowSec">Sampling window in seconds.</param>
            <param name="OpenSec">How long the circuit stays open in seconds.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.CircuitBreakerPolicy.#ctor(System.Int32,System.Int32,System.Int32)">
            <summary>Circuit-breaker policy of an API operation.</summary>
            <param name="Failures">Failures within the window that open the circuit.</param>
            <param name="WindowSec">Sampling window in seconds.</param>
            <param name="OpenSec">How long the circuit stays open in seconds.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.CircuitBreakerPolicy.Failures">
            <summary>Failures within the window that open the circuit.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.CircuitBreakerPolicy.WindowSec">
            <summary>Sampling window in seconds.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.CircuitBreakerPolicy.OpenSec">
            <summary>How long the circuit stays open in seconds.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.ResponseMapping">
            <summary>Maps a JSONPath-lite expression of the response body to an output.</summary>
            <param name="Output">Output name (must be declared in <see cref="P:Verdict.RuleEngine.Connectors.ConnectorOperation.Outputs"/>).</param>
            <param name="Path">Path such as <c>$.result.hit</c> or <c>$.matches[0].score</c>.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.ResponseMapping.#ctor(System.String,System.String)">
            <summary>Maps a JSONPath-lite expression of the response body to an output.</summary>
            <param name="Output">Output name (must be declared in <see cref="P:Verdict.RuleEngine.Connectors.ConnectorOperation.Outputs"/>).</param>
            <param name="Path">Path such as <c>$.result.hit</c> or <c>$.matches[0].score</c>.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ResponseMapping.Output">
            <summary>Output name (must be declared in <see cref="P:Verdict.RuleEngine.Connectors.ConnectorOperation.Outputs"/>).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ResponseMapping.Path">
            <summary>Path such as <c>$.result.hit</c> or <c>$.matches[0].score</c>.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.ErrorAction">
            <summary>What to do when an error mapping matches.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Connectors.ErrorAction.Error">
            <summary>Treat as connector error (node error path).</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Connectors.ErrorAction.HitFalse">
            <summary>Treat as a successful negative screening: outputs are the declared defaults with <c>hit=false</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Connectors.ErrorAction.Flag">
            <summary>Treat as success but force a <c>FLAG</c> outcome on the node.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.ErrorActionJsonConverter">
            <summary>JSON converter for <see cref="T:Verdict.RuleEngine.Connectors.ErrorAction"/>.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.ErrorActionJsonConverter.#ctor">
            <summary>Initializes the converter.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.ErrorMapping">
            <summary>Classifies a response as an error / negative result.</summary>
            <param name="Then">Action.</param>
            <param name="WhenStatus">Matches an HTTP status code.</param>
            <param name="WhenPath">Matches when the JSONPath-lite expression resolves to a truthy / non-null value.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.ErrorMapping.#ctor(Verdict.RuleEngine.Connectors.ErrorAction,System.Nullable{System.Int32},System.String)">
            <summary>Classifies a response as an error / negative result.</summary>
            <param name="Then">Action.</param>
            <param name="WhenStatus">Matches an HTTP status code.</param>
            <param name="WhenPath">Matches when the JSONPath-lite expression resolves to a truthy / non-null value.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ErrorMapping.Then">
            <summary>Action.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ErrorMapping.WhenStatus">
            <summary>Matches an HTTP status code.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ErrorMapping.WhenPath">
            <summary>Matches when the JSONPath-lite expression resolves to a truthy / non-null value.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.ApiOperation">
            <summary>A REST API operation.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ApiOperation.Method">
            <summary>HTTP method.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ApiOperation.PathTemplate">
            <summary>Path template relative to the target base URL, e.g. <c>/screen?name={fullName}</c>.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ApiOperation.BodyTemplate">
            <summary>Optional JSON body template with <c>{param}</c> placeholders.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ApiOperation.Auth">
            <summary>Authentication.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ApiOperation.Headers">
            <summary>Static headers (values may reference <c>secret://</c>).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ApiOperation.RetryPolicy">
            <summary>Retry policy.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ApiOperation.CircuitBreaker">
            <summary>Circuit breaker.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ApiOperation.ResponseMap">
            <summary>Response → output mappings.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ApiOperation.ErrorMap">
            <summary>Error classification rules, evaluated in order.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ApiOperation.OperationKind">
            <inheritdoc />
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ApiOperation.EffectiveOutputs">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.ConnectorDefinition">
            <summary>A connector definition: operations plus production and test targets (target JSON is kind-specific and stored as plain text — no encryption at rest; see CLAUDE.md §14 #5).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorDefinition.Id">
            <summary>Connector id (e.g. <c>conn-interpol-api</c>).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorDefinition.Name">
            <summary>Display name.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorDefinition.Kind">
            <summary>Kind.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorDefinition.Description">
            <summary>Description.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorDefinition.Operations">
            <summary>Operations.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorDefinition.ProdTarget">
            <summary>Production target (DB: <c>{engine, connectionString}</c>; API: <c>{baseUrl, ...}</c>). Never used in sandbox mode.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorDefinition.TestTarget">
            <summary>Test target used in sandbox mode when no recorded mock matches.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.ConnectorDefinition.FindOperation(System.String)">
            <summary>Finds an operation by name.</summary>
            <param name="name">Operation name.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.ConnectorDefinition.ToJson">
            <summary>Serializes the definition (without targets) using the DSL JSON options.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.ConnectorDefinition.FromJson(System.String)">
            <summary>Parses a definition.</summary>
            <param name="json">JSON text.</param>
            <exception cref="T:Verdict.RuleEngine.Dsl.DslParseException">Invalid document.</exception>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.ConnectorVersionRecord">
            <summary>A stored connector definition version with lifecycle metadata (same state machine as rulesets).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorVersionRecord.ConnectorId">
            <summary>Connector id.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorVersionRecord.Version">
            <summary>Version (≥ 1).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorVersionRecord.State">
            <summary>State.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorVersionRecord.Definition">
            <summary>Definition (targets in plain text — no encryption at rest).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorVersionRecord.Author">
            <summary>Author.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorVersionRecord.ApprovedBy">
            <summary>Approver.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorVersionRecord.CreatedAt">
            <summary>Created (UTC).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorVersionRecord.UpdatedAt">
            <summary>Updated (UTC).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorVersionRecord.PublishedAt">
            <summary>Published (UTC).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorVersionRecord.DeprecatedAt">
            <summary>Deprecated (UTC).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorVersionRecord.Ref">
            <summary>Reference.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.RecordedExchange">
            <summary>A recorded request/response pair used as a sandbox mock (request identified by operation + parameter hash).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.RecordedExchange.ConnectorId">
            <summary>Connector id.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.RecordedExchange.Version">
            <summary>Connector version.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.RecordedExchange.Operation">
            <summary>Operation name.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.RecordedExchange.ParamHash">
            <summary>SHA-256 hex of the canonical parameter object (see <see cref="M:Verdict.RuleEngine.Connectors.RecordedExchange.ComputeParamHash(System.Collections.Generic.IReadOnlyDictionary{System.String,System.Text.Json.Nodes.JsonValue})"/>).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.RecordedExchange.Response">
            <summary>Canned outputs returned to the rule (already mapped to the output schema).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.RecordedExchange.Description">
            <summary>Optional human description.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.RecordedExchange.CreatedAt">
            <summary>Created (UTC).</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.RecordedExchange.ComputeParamHash(System.Collections.Generic.IReadOnlyDictionary{System.String,System.Text.Json.Nodes.JsonValue})">
            <summary>Computes the parameter hash of an invocation.</summary>
            <param name="parameters">Parameters.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.IConnectorDefinitionStore">
            <summary>Persistence of connector definitions and recorded exchanges. Implemented by the EF Core package.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.IConnectorDefinitionStore.GetAsync(Verdict.RuleEngine.Connectors.ConnectorRef,System.Threading.CancellationToken)">
            <summary>Loads a connector version, or <see langword="null"/>.</summary>
            <param name="ref">Reference.</param>
            <param name="ct">Cancellation token.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.IConnectorDefinitionStore.GetLatestPublishedAsync(System.String,System.Threading.CancellationToken)">
            <summary>Loads the latest published version of a connector, or <see langword="null"/>.</summary>
            <param name="connectorId">Connector id.</param>
            <param name="ct">Cancellation token.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.IConnectorDefinitionStore.SaveDraftAsync(Verdict.RuleEngine.Connectors.ConnectorDefinition,System.String,System.Threading.CancellationToken)">
            <summary>Saves a definition as a new draft version.</summary>
            <param name="definition">Definition.</param>
            <param name="author">Author.</param>
            <param name="ct">Cancellation token.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.IConnectorDefinitionStore.UpdateDraftAsync(System.String,System.Int32,Verdict.RuleEngine.Connectors.ConnectorDefinition,System.String,System.Threading.CancellationToken)">
            <summary>
            Replaces the definition of an existing <see cref="F:Verdict.RuleEngine.Versioning.RulesetState.Draft"/> version in place (targets are
            re-protected). Non-draft versions are immutable — create a new draft instead.
            </summary>
            <param name="connectorId">Connector id (must match <paramref name="definition"/>).</param>
            <param name="version">Draft version number.</param>
            <param name="definition">New definition content.</param>
            <param name="actor">Who edited.</param>
            <param name="ct">Cancellation token.</param>
            <exception cref="T:Verdict.RuleEngine.Connectors.ConnectorException">The version does not exist.</exception>
            <exception cref="T:Verdict.RuleEngine.Versioning.InvalidStateTransitionException">The version is not a draft.</exception>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.IConnectorDefinitionStore.DeleteDraftAsync(System.String,System.Int32,System.String,System.Threading.CancellationToken)">
            <summary>
            Deletes a <see cref="F:Verdict.RuleEngine.Versioning.RulesetState.Draft"/> version together with its recorded exchanges. Any other state is
            refused — retire published versions through Deprecated/Archived transitions instead. Removing the last
            version also removes the connector itself.
            </summary>
            <param name="connectorId">Connector id.</param>
            <param name="version">Draft version number.</param>
            <param name="actor">Who deleted.</param>
            <param name="ct">Cancellation token.</param>
            <exception cref="T:Verdict.RuleEngine.Connectors.ConnectorException">The version does not exist.</exception>
            <exception cref="T:Verdict.RuleEngine.Versioning.InvalidStateTransitionException">The version is not a draft.</exception>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.IConnectorDefinitionStore.TransitionAsync(System.String,System.Int32,Verdict.RuleEngine.Versioning.RulesetState,Verdict.RuleEngine.Abstractions.TransitionContext,System.Threading.CancellationToken)">
            <summary>Performs a lifecycle transition (state machine + four-eyes + audit).</summary>
            <param name="connectorId">Connector id.</param>
            <param name="version">Version.</param>
            <param name="toState">Target state.</param>
            <param name="ctx">Actor / notes.</param>
            <param name="ct">Cancellation token.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.IConnectorDefinitionStore.ListVersionsAsync(System.String,System.Threading.CancellationToken)">
            <summary>Lists versions, newest first.</summary>
            <param name="connectorId">Connector id.</param>
            <param name="ct">Cancellation token.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.IConnectorDefinitionStore.FindRecordedExchangeAsync(Verdict.RuleEngine.Connectors.ConnectorRef,System.String,System.String,System.Threading.CancellationToken)">
            <summary>Finds a recorded exchange for an invocation, or <see langword="null"/>.</summary>
            <param name="ref">Connector reference.</param>
            <param name="operation">Operation.</param>
            <param name="paramHash">Parameter hash.</param>
            <param name="ct">Cancellation token.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.IConnectorDefinitionStore.SaveRecordedExchangeAsync(Verdict.RuleEngine.Connectors.RecordedExchange,System.Threading.CancellationToken)">
            <summary>Saves (upserts) a recorded exchange.</summary>
            <param name="exchange">Exchange.</param>
            <param name="ct">Cancellation token.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.ConnectorInvocationContext">
            <summary>Ambient information passed to a connector invocation. <see cref="P:Verdict.RuleEngine.Connectors.ConnectorInvocationContext.Mode"/> is authoritative for target selection.</summary>
            <param name="Mode">Execution mode; <see cref="F:Verdict.RuleEngine.Abstractions.ExecutionMode.Sandbox"/> must never reach a production target.</param>
            <param name="RulesetId">Calling ruleset.</param>
            <param name="RulesetVersion">Calling ruleset version.</param>
            <param name="NodeId">Calling node.</param>
            <param name="CorrelationId">Host correlation id.</param>
            <param name="Timeout">Effective timeout for the whole invocation (including retries).</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.ConnectorInvocationContext.#ctor(Verdict.RuleEngine.Abstractions.ExecutionMode,System.String,System.Int32,System.String,System.String,System.TimeSpan)">
            <summary>Ambient information passed to a connector invocation. <see cref="P:Verdict.RuleEngine.Connectors.ConnectorInvocationContext.Mode"/> is authoritative for target selection.</summary>
            <param name="Mode">Execution mode; <see cref="F:Verdict.RuleEngine.Abstractions.ExecutionMode.Sandbox"/> must never reach a production target.</param>
            <param name="RulesetId">Calling ruleset.</param>
            <param name="RulesetVersion">Calling ruleset version.</param>
            <param name="NodeId">Calling node.</param>
            <param name="CorrelationId">Host correlation id.</param>
            <param name="Timeout">Effective timeout for the whole invocation (including retries).</param>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorInvocationContext.Mode">
            <summary>Execution mode; <see cref="F:Verdict.RuleEngine.Abstractions.ExecutionMode.Sandbox"/> must never reach a production target.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorInvocationContext.RulesetId">
            <summary>Calling ruleset.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorInvocationContext.RulesetVersion">
            <summary>Calling ruleset version.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorInvocationContext.NodeId">
            <summary>Calling node.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorInvocationContext.CorrelationId">
            <summary>Host correlation id.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorInvocationContext.Timeout">
            <summary>Effective timeout for the whole invocation (including retries).</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.ConnectorResult">
            <summary>Outcome of a connector invocation. Failures are returned, not thrown.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorResult.Success">
            <summary>Whether the invocation produced usable outputs.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorResult.Outputs">
            <summary>Outputs mapped to the declared output schema (all-null on failure).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorResult.Status">
            <summary>Status token for traces (<c>ok</c>, <c>error</c>, <c>timeout</c>, <c>mock</c>, <c>hit-false</c>…).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorResult.Attempts">
            <summary>Attempts made.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorResult.Error">
            <summary>Error message on failure.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorResult.ForceFlag">
            <summary>Whether an <see cref="F:Verdict.RuleEngine.Connectors.ErrorAction.Flag"/> mapping requested a forced flag.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorResult.ResponseSummary">
            <summary>Response summary for traces (redacted later).</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.ConnectorResult.Ok(System.Text.Json.Nodes.JsonObject,System.String,System.Int32)">
            <summary>Creates a successful result.</summary>
            <param name="outputs">Outputs.</param>
            <param name="status">Status token.</param>
            <param name="attempts">Attempts.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.ConnectorResult.Failed(Verdict.RuleEngine.Connectors.ConnectorOperation,System.String,System.String,System.Int32)">
            <summary>Creates a failed result with all-null outputs.</summary>
            <param name="operation">Operation (for output schema).</param>
            <param name="error">Error message.</param>
            <param name="status">Status token.</param>
            <param name="attempts">Attempts.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.ConnectorResult.NullOutputs(Verdict.RuleEngine.Connectors.ConnectorOperation)">
            <summary>Creates an output object with every declared output set to null.</summary>
            <param name="operation">Operation.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.IConnector">
            <summary>A resolved, invocable connector bound to a target appropriate for the resolution mode.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.IConnector.Kind">
            <summary>Kind.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.IConnector.InvokeAsync(System.String,System.Collections.Generic.IReadOnlyDictionary{System.String,System.Text.Json.Nodes.JsonValue},Verdict.RuleEngine.Connectors.ConnectorInvocationContext,System.Threading.CancellationToken)">
            <summary>Invokes an operation. Implementations return failures as <see cref="T:Verdict.RuleEngine.Connectors.ConnectorResult"/> and only throw for programming errors.</summary>
            <param name="operation">Operation name.</param>
            <param name="parameters">Parameter values (null allowed for optional parameters).</param>
            <param name="ctx">Invocation context.</param>
            <param name="ct">Cancellation token.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.IConnectorRegistry">
            <summary>Resolves connectors by reference, honouring the execution mode (sandbox → mocks / test target only).</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.IConnectorRegistry.ResolveAsync(Verdict.RuleEngine.Connectors.ConnectorRef,Verdict.RuleEngine.Abstractions.ExecutionMode,System.Threading.CancellationToken)">
            <summary>Resolves a connector.</summary>
            <param name="ref">Reference (<c>conn-x@v2</c>).</param>
            <param name="mode">Execution mode.</param>
            <param name="ct">Cancellation token.</param>
            <exception cref="T:Verdict.RuleEngine.Connectors.ConnectorException">The connector cannot be resolved (unknown, not published, no usable target).</exception>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.ConnectorException">
            <summary>Connector resolution / configuration failure.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.ConnectorException.#ctor">
            <summary>Initializes the exception.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.ConnectorException.#ctor(System.String)">
            <summary>Initializes the exception.</summary>
            <param name="message">Message.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.ConnectorException.#ctor(System.String,System.Exception)">
            <summary>Initializes the exception.</summary>
            <param name="message">Message.</param>
            <param name="innerException">Inner exception.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.ConnectorRef">
            <summary>Reference to a specific connector definition version (<c>conn-x@v2</c>).</summary>
            <param name="Id">Connector id.</param>
            <param name="Version">Version number (≥ 1).</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.ConnectorRef.#ctor(System.String,System.Int32)">
            <summary>Reference to a specific connector definition version (<c>conn-x@v2</c>).</summary>
            <param name="Id">Connector id.</param>
            <param name="Version">Version number (≥ 1).</param>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorRef.Id">
            <summary>Connector id.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.ConnectorRef.Version">
            <summary>Version number (≥ 1).</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.ConnectorRef.Parse(System.String)">
            <summary>Parses a reference or throws.</summary>
            <param name="text">Reference text.</param>
            <exception cref="T:System.FormatException">The text is not a valid reference.</exception>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.ConnectorRef.TryParse(System.String,Verdict.RuleEngine.Connectors.ConnectorRef@)">
            <summary>Attempts to parse a reference.</summary>
            <param name="text">Reference text.</param>
            <param name="result">Parsed reference.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.ConnectorRef.ToString">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.ISecretResolver">
            <summary>Resolves secret references (<c>secret://name</c>) to plaintext values. Implemented by the host.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.ISecretResolver.ResolveAsync(System.String,System.Threading.CancellationToken)">
            <summary>Resolves a secret by name.</summary>
            <param name="name">Secret name (without the <c>secret://</c> scheme).</param>
            <param name="ct">Cancellation token.</param>
            <exception cref="T:Verdict.RuleEngine.Connectors.ConnectorException">The secret is unknown.</exception>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.SecretReference">
            <summary>Helpers for <c>secret://</c> references.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Connectors.SecretReference.Scheme">
            <summary>Reference scheme.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.SecretReference.IsReference(System.String)">
            <summary>Whether a value is a secret reference.</summary>
            <param name="value">Value.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.SecretReference.Name(System.String)">
            <summary>Extracts the secret name from a reference.</summary>
            <param name="reference">Reference.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.SecretReference.ResolveIfReferenceAsync(Verdict.RuleEngine.Connectors.ISecretResolver,System.String,System.Threading.CancellationToken)">
            <summary>Resolves a value that may be a secret reference; plain values are returned unchanged.</summary>
            <param name="resolver">Resolver.</param>
            <param name="value">Value or reference.</param>
            <param name="ct">Cancellation token.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.DictionarySecretResolver">
            <summary>Secret resolver over an in-memory dictionary (tests, simple hosts).</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.DictionarySecretResolver.#ctor(System.Collections.Generic.IReadOnlyDictionary{System.String,System.String})">
            <summary>Initializes the resolver.</summary>
            <param name="secrets">Secrets by name.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.DictionarySecretResolver.ResolveAsync(System.String,System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.NullSecretResolver">
            <summary>Secret resolver that knows no secrets.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Connectors.NullSecretResolver.Instance">
            <summary>Shared instance.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.NullSecretResolver.ResolveAsync(System.String,System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.IConnectorFactory">
            <summary>Creates runtime connectors for a kind of definition. Implemented by the DB and API runtime packages.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.IConnectorFactory.Kind">
            <summary>Kind handled.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.IConnectorFactory.Create(Verdict.RuleEngine.Connectors.ConnectorVersionRecord,Verdict.RuleEngine.Abstractions.ExecutionMode)">
            <summary>
            Creates a connector bound to the target appropriate for <paramref name="mode"/>. Sandbox connectors must be built
            without ever touching <see cref="P:Verdict.RuleEngine.Connectors.ConnectorDefinition.ProdTarget"/>.
            </summary>
            <param name="record">Definition version.</param>
            <param name="mode">Execution mode.</param>
            <exception cref="T:Verdict.RuleEngine.Connectors.ConnectorException">No usable target for the mode.</exception>
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.SandboxConnector">
            <summary>
            Sandbox wrapper: answers from recorded exchanges first (matched by operation + parameter hash), then from the
            test-target connector, otherwise fails. It is constructed without any reference to a production target.
            </summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.SandboxConnector.#ctor(Verdict.RuleEngine.Connectors.IConnectorDefinitionStore,Verdict.RuleEngine.Connectors.ConnectorRef,Verdict.RuleEngine.Connectors.ConnectorKind,Verdict.RuleEngine.Connectors.IConnector)">
            <summary>Initializes the wrapper.</summary>
            <param name="store">Store holding recorded exchanges.</param>
            <param name="ref">Connector reference.</param>
            <param name="kind">Kind.</param>
            <param name="testTarget">Connector bound to the test target, or <see langword="null"/> when none is configured.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.SandboxConnector.Kind">
            <inheritdoc />
        </member>
        <member name="P:Verdict.RuleEngine.Connectors.SandboxConnector.HasTestTarget">
            <summary>Whether a test target is available after recorded mocks.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.SandboxConnector.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="T:Verdict.RuleEngine.Connectors.InMemoryConnectorRegistry">
            <summary>Registry over a fixed set of connectors (tests, hosts with static wiring). Entries may be mode-specific.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.InMemoryConnectorRegistry.Add(Verdict.RuleEngine.Connectors.ConnectorRef,Verdict.RuleEngine.Connectors.IConnector)">
            <summary>Registers a connector for every mode.</summary>
            <param name="ref">Reference.</param>
            <param name="connector">Connector.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.InMemoryConnectorRegistry.Add(Verdict.RuleEngine.Connectors.ConnectorRef,Verdict.RuleEngine.Abstractions.ExecutionMode,Verdict.RuleEngine.Connectors.IConnector)">
            <summary>Registers a connector for one mode only.</summary>
            <param name="ref">Reference.</param>
            <param name="mode">Mode.</param>
            <param name="connector">Connector.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.InMemoryConnectorRegistry.ResolveAsync(Verdict.RuleEngine.Connectors.ConnectorRef,Verdict.RuleEngine.Abstractions.ExecutionMode,System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Connectors.DefinitionStoreConnectorRegistry">
            <summary>
            Registry backed by <see cref="T:Verdict.RuleEngine.Connectors.IConnectorDefinitionStore"/>: loads the definition version (must be Published or
            Deprecated), picks the factory for its kind and caches the resulting connector per (reference, mode).
            </summary>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.DefinitionStoreConnectorRegistry.#ctor(Verdict.RuleEngine.Connectors.IConnectorDefinitionStore,System.Collections.Generic.IEnumerable{Verdict.RuleEngine.Connectors.IConnectorFactory},Microsoft.Extensions.Logging.ILogger{Verdict.RuleEngine.Connectors.DefinitionStoreConnectorRegistry})">
            <summary>Initializes the registry.</summary>
            <param name="store">Definition store.</param>
            <param name="factories">Factories (one per kind).</param>
            <param name="logger">Logger.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.DefinitionStoreConnectorRegistry.ResolveAsync(Verdict.RuleEngine.Connectors.ConnectorRef,Verdict.RuleEngine.Abstractions.ExecutionMode,System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Connectors.DefinitionStoreConnectorRegistry.Invalidate">
            <summary>Drops cached connectors (e.g. after a definition was deprecated).</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.CanonicalJson">
            <summary>
            Canonical JSON writer: object properties sorted by ordinal key, no whitespace, numbers normalized
            (no trailing zeros, no exponent), relaxed (deterministic) escaping. Two structurally equal documents
            always produce byte-identical output, which makes the output suitable for hashing and storage.
            </summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.CanonicalJson.Serialize(System.Text.Json.Nodes.JsonNode,System.Boolean)">
            <summary>Serializes a node canonically.</summary>
            <param name="node">Node (a <see langword="null"/> node is written as JSON <c>null</c>).</param>
            <param name="indented">Pretty-print (keys still sorted); not for hashing.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.CanonicalJson.SerializeToUtf8Bytes(System.Text.Json.Nodes.JsonNode,System.Boolean)">
            <summary>Serializes a node canonically to UTF-8 bytes.</summary>
            <param name="node">Node.</param>
            <param name="indented">Pretty-print (keys still sorted); not for hashing.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.CanonicalJson.Canonicalize(System.String)">
            <summary>Re-serializes arbitrary JSON text canonically.</summary>
            <param name="json">JSON text.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.CanonicalJson.Write(System.Text.Json.Utf8JsonWriter,System.Text.Json.Nodes.JsonNode)">
            <summary>Writes a node canonically to <paramref name="writer"/>.</summary>
            <param name="writer">Writer.</param>
            <param name="node">Node.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.CanonicalJson.TryGetDecimal(System.Text.Json.Nodes.JsonValue,System.Decimal@)">
            <summary>
            Extracts a decimal from a numeric <see cref="T:System.Text.Json.Nodes.JsonValue"/> regardless of whether it is backed by a parsed
            <see cref="T:System.Text.Json.JsonElement"/> or by a CLR primitive (<see cref="T:System.Int32"/>, <see cref="T:System.Int64"/>, <see cref="T:System.Double"/>…).
            Returns <see langword="false"/> when the number does not fit in a decimal.
            </summary>
            <param name="value">Numeric JSON value.</param>
            <param name="result">Decimal value.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.CanonicalJson.Normalize(System.Decimal)">
            <summary>Normalizes a decimal so that its scale carries no trailing zeros (e.g. <c>1.50</c> → <c>1.5</c>, <c>2.0</c> → <c>2</c>).</summary>
            <param name="value">Value.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.CanonicalJson.FormatNumber(System.Decimal)">
            <summary>Formats a decimal using invariant culture with normalized scale.</summary>
            <param name="value">Value.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.DocumentHasher">
            <summary>Computes SHA-256 hashes of canonical JSON documents (lower-case hex).</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.DocumentHasher.ComputeHash(Verdict.RuleEngine.Dsl.RulesetDocument)">
            <summary>Hashes a ruleset document by its canonical serialization.</summary>
            <param name="document">Document.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.DocumentHasher.ComputeHash(System.Text.Json.Nodes.JsonNode)">
            <summary>Hashes any JSON node by its canonical serialization.</summary>
            <param name="node">Node.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.DocumentHasher.ComputeHashOfJson(System.String)">
            <summary>Hashes arbitrary JSON text after canonicalizing it.</summary>
            <param name="json">JSON text.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.DocumentHasher.ComputeHashOfCanonical(System.String)">
            <summary>Hashes text that is already canonical (no re-serialization).</summary>
            <param name="canonicalJson">Canonical JSON text.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.DslParseException">
            <summary>Thrown when DSL JSON text cannot be parsed into a <see cref="T:Verdict.RuleEngine.Dsl.RulesetDocument"/>.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.DslParseException.#ctor">
            <summary>Initializes the exception.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.DslParseException.#ctor(System.String)">
            <summary>Initializes the exception.</summary>
            <param name="message">Message.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.DslParseException.#ctor(System.String,System.Exception)">
            <summary>Initializes the exception.</summary>
            <param name="message">Message.</param>
            <param name="innerException">Inner exception.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.DslJson">
            <summary>Entry point for (de)serializing DSL documents with <c>System.Text.Json</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.DslJson.SchemaVersion">
            <summary>DSL schema version emitted by this library.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.DslJson.Options">
            <summary>Serializer options used for all DSL documents (camelCase, strict, out-of-order discriminator allowed).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.DslJson.IndentedOptions">
            <summary>Options used for pretty-printing (for display only).</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.DslJson.Deserialize(System.String)">
            <summary>Parses DSL JSON text.</summary>
            <param name="json">JSON text.</param>
            <exception cref="T:Verdict.RuleEngine.Dsl.DslParseException">The text is not a valid document.</exception>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.DslJson.FromJsonNode(System.Text.Json.Nodes.JsonNode)">
            <summary>Parses a DSL JSON node.</summary>
            <param name="node">JSON node.</param>
            <exception cref="T:Verdict.RuleEngine.Dsl.DslParseException">The node is not a valid document.</exception>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.DslJson.Serialize(Verdict.RuleEngine.Dsl.RulesetDocument,System.Boolean)">
            <summary>Serializes a document (non-canonical; property order follows the model).</summary>
            <param name="document">Document.</param>
            <param name="indented">Pretty-print.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.DslJson.ToJsonNode(Verdict.RuleEngine.Dsl.RulesetDocument)">
            <summary>Converts a document to a JSON node.</summary>
            <param name="document">Document.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.DslJson.SerializeCanonical(Verdict.RuleEngine.Dsl.RulesetDocument)">
            <summary>Serializes a document in canonical form (sorted keys, no whitespace, normalized numbers). Use this form for hashing and persistence.</summary>
            <param name="document">Document.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.DslJson.ToJsonNode``1(``0)">
            <summary>Serializes any value with the DSL options.</summary>
            <typeparam name="T">Value type.</typeparam>
            <param name="value">Value.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.EvaluationStrategy">
            <summary>Traversal strategy of a ruleset (<c>strategy</c> document property).</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.EvaluationStrategy.EvaluateAll">
            <summary>Visit every reachable branch in document order and aggregate all fired outcomes (<c>evaluate-all</c>).</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.EvaluationStrategy.FirstMatch">
            <summary>Stop at the first <c>outcome</c> node reached (<c>first-match</c>).</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.OutcomeKind">
            <summary>Outcome declared by an <c>outcome</c> node (<c>PASS</c>, <c>FAIL</c>, <c>FLAG</c>).</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.OutcomeKind.Pass">
            <summary>The check passed.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.OutcomeKind.Fail">
            <summary>The check failed.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.OutcomeKind.Flag">
            <summary>The check requires human review.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.OutcomeSeverity">
            <summary>Severity annotation of an <c>outcome</c> node.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.OutcomeSeverity.Info">
            <summary>Informational.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.OutcomeSeverity.Warning">
            <summary>Warning.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.OutcomeSeverity.Critical">
            <summary>Critical.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.OnErrorBehavior">
            <summary>Behaviour of a <c>connectorCheck</c> node when the connector invocation fails.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.OnErrorBehavior.Flag">
            <summary>Route to <c>onError</c> (if present) and force a <c>FLAG</c> outcome with <c>CONNECTOR_ERROR</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.OnErrorBehavior.Fail">
            <summary>Route to <c>onError</c> (if present) and force a <c>FAIL</c> outcome with <c>CONNECTOR_ERROR</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.OnErrorBehavior.PassWithWarning">
            <summary>Continue on <c>onSuccess</c> with all-null outputs and record a trace warning.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.OnErrorBehavior.RetryThenFlag">
            <summary>Retry the invocation once; if it fails again behave like <see cref="F:Verdict.RuleEngine.Dsl.OnErrorBehavior.Flag"/>.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.DslEnumJsonConverter`1">
            <summary>Base converter mapping an enum to an explicit set of DSL string tokens.</summary>
            <typeparam name="TEnum">Enum type.</typeparam>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.DslEnumJsonConverter`1.#ctor(System.Collections.Generic.IReadOnlyDictionary{`0,System.String})">
            <summary>Initializes the converter with the token map.</summary>
            <param name="map">Enum → token map.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.DslEnumJsonConverter`1.ToToken(`0)">
            <summary>Returns the DSL token for <paramref name="value"/>.</summary>
            <param name="value">Enum value.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.DslEnumJsonConverter`1.TryParse(System.String,`0@)">
            <summary>Attempts to parse a DSL token.</summary>
            <param name="token">Token text.</param>
            <param name="value">Parsed value.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.DslEnumJsonConverter`1.Read(System.Text.Json.Utf8JsonReader@,System.Type,System.Text.Json.JsonSerializerOptions)">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.DslEnumJsonConverter`1.Write(System.Text.Json.Utf8JsonWriter,`0,System.Text.Json.JsonSerializerOptions)">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.EvaluationStrategyJsonConverter">
            <summary>JSON converter for <see cref="T:Verdict.RuleEngine.Dsl.EvaluationStrategy"/>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.EvaluationStrategyJsonConverter.Instance">
            <summary>Shared instance.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.EvaluationStrategyJsonConverter.#ctor">
            <summary>Initializes the converter.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.OutcomeKindJsonConverter">
            <summary>JSON converter for <see cref="T:Verdict.RuleEngine.Dsl.OutcomeKind"/>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.OutcomeKindJsonConverter.Instance">
            <summary>Shared instance.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.OutcomeKindJsonConverter.#ctor">
            <summary>Initializes the converter.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.OutcomeSeverityJsonConverter">
            <summary>JSON converter for <see cref="T:Verdict.RuleEngine.Dsl.OutcomeSeverity"/>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.OutcomeSeverityJsonConverter.Instance">
            <summary>Shared instance.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.OutcomeSeverityJsonConverter.#ctor">
            <summary>Initializes the converter.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.OnErrorBehaviorJsonConverter">
            <summary>JSON converter for <see cref="T:Verdict.RuleEngine.Dsl.OnErrorBehavior"/>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.OnErrorBehaviorJsonConverter.Instance">
            <summary>Shared instance.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.OnErrorBehaviorJsonConverter.#ctor">
            <summary>Initializes the converter.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.ExpressionKind">
            <summary>Kind of an <see cref="T:Verdict.RuleEngine.Dsl.Expression"/> node.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.ExpressionKind.Field">
            <summary><c>{"field": "path"}</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.ExpressionKind.Literal">
            <summary><c>{"lit": value}</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.ExpressionKind.Variable">
            <summary><c>{"var": "name"}</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.ExpressionKind.Accumulator">
            <summary><c>{"acc": "name"}</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.ExpressionKind.Function">
            <summary><c>{"fn": "name", "args": [...]}</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.ExpressionKind.Operation">
            <summary><c>{"op": "...", ...}</c>.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.Expression">
            <summary>
            Immutable expression tree node of the DSL. Serialized by <see cref="T:Verdict.RuleEngine.Dsl.ExpressionJsonConverter"/>
            (the JSON shape is discriminated by the presence of the <c>op</c>/<c>field</c>/<c>lit</c>/<c>fn</c>/<c>var</c>/<c>acc</c> key).
            </summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.Expression.Kind">
            <summary>Kind of this node.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.FieldOperand">
            <summary>Reads a value from the evaluation scope by dotted path (input payload, <c>vars.x</c>, connector outputs, <c>accumulators.x</c>).</summary>
            <param name="Path">Dotted path.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.FieldOperand.#ctor(System.String)">
            <summary>Reads a value from the evaluation scope by dotted path (input payload, <c>vars.x</c>, connector outputs, <c>accumulators.x</c>).</summary>
            <param name="Path">Dotted path.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.FieldOperand.Path">
            <summary>Dotted path.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.FieldOperand.Kind">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.LiteralOperand">
            <summary>A literal JSON value.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.LiteralOperand.#ctor(System.Text.Json.Nodes.JsonNode)">
            <summary>Initializes a literal.</summary>
            <param name="value">JSON value (may be <see langword="null"/>).</param>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.LiteralOperand.Value">
            <summary>The literal JSON value (<see langword="null"/> represents JSON <c>null</c>).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.LiteralOperand.Kind">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.LiteralOperand.Equals(Verdict.RuleEngine.Dsl.LiteralOperand)">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.LiteralOperand.GetHashCode">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.VariableOperand">
            <summary>Reads a derived variable set by a <c>setVariable</c> node.</summary>
            <param name="Name">Variable name.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.VariableOperand.#ctor(System.String)">
            <summary>Reads a derived variable set by a <c>setVariable</c> node.</summary>
            <param name="Name">Variable name.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.VariableOperand.Name">
            <summary>Variable name.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.VariableOperand.Kind">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.AccumulatorOperand">
            <summary>Reads the current value of a score accumulator.</summary>
            <param name="Name">Accumulator name.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.AccumulatorOperand.#ctor(System.String)">
            <summary>Reads the current value of a score accumulator.</summary>
            <param name="Name">Accumulator name.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.AccumulatorOperand.Name">
            <summary>Accumulator name.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.AccumulatorOperand.Kind">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.FunctionCall">
            <summary>Invokes a registered function.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.FunctionCall.#ctor(System.String,System.Collections.Generic.IReadOnlyList{Verdict.RuleEngine.Dsl.Expression})">
            <summary>Initializes a function call.</summary>
            <param name="name">Function name.</param>
            <param name="args">Arguments.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.FunctionCall.Name">
            <summary>Function name (e.g. <c>days_until</c>).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.FunctionCall.Args">
            <summary>Arguments.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.FunctionCall.Kind">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.FunctionCall.Equals(Verdict.RuleEngine.Dsl.FunctionCall)">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.FunctionCall.GetHashCode">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.Operation">
            <summary>Applies an operator to its operands.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.Operation.#ctor(Verdict.RuleEngine.Dsl.ExpressionOperator,System.Collections.Generic.IReadOnlyList{Verdict.RuleEngine.Dsl.Expression})">
            <summary>Initializes an operation.</summary>
            <param name="op">Operator.</param>
            <param name="args">Operands in positional order (see <see cref="P:Verdict.RuleEngine.Dsl.OperatorInfo.Arity"/>).</param>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.Operation.Op">
            <summary>Operator.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.Operation.Args">
            <summary>
            Operands. Binary: <c>[left, right]</c>; unary: <c>[arg]</c>; <c>between</c>: <c>[value, low, high]</c>;
            <c>and</c>/<c>or</c>: any number of operands.
            </summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.Operation.Kind">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.Operation.Equals(Verdict.RuleEngine.Dsl.Operation)">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.Operation.GetHashCode">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.ExpressionOperator">
            <summary>All DSL operators.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.OperatorArity">
            <summary>Operand-count shape of an operator.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.OperatorArity.Unary">
            <summary>One operand (<c>arg</c>).</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.OperatorArity.Binary">
            <summary>Two operands (<c>left</c>, <c>right</c>).</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.OperatorArity.Ternary">
            <summary>Three operands (<c>left</c>, <c>low</c>, <c>high</c>).</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.OperatorArity.Variadic">
            <summary>One or more operands (<c>args</c>).</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.OperatorCategory">
            <summary>Semantic category of an operator.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.OperatorCategory.Comparison">
            <summary>Equality / ordering.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.OperatorCategory.Membership">
            <summary><c>in</c> / <c>not_in</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.OperatorCategory.Text">
            <summary>String operators.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.OperatorCategory.Range">
            <summary><c>between</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.OperatorCategory.NullCheck">
            <summary><c>is_null</c> / <c>is_not_null</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.OperatorCategory.Logical">
            <summary><c>and</c> / <c>or</c> / <c>not</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.OperatorCategory.Arithmetic">
            <summary>Arithmetic.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.OperatorInfo">
            <summary>Static metadata about an operator.</summary>
            <param name="Op">Operator.</param>
            <param name="Token">DSL token (e.g. <c>&gt;=</c>, <c>not_in</c>).</param>
            <param name="Arity">Arity.</param>
            <param name="Category">Category.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.OperatorInfo.#ctor(Verdict.RuleEngine.Dsl.ExpressionOperator,System.String,Verdict.RuleEngine.Dsl.OperatorArity,Verdict.RuleEngine.Dsl.OperatorCategory)">
            <summary>Static metadata about an operator.</summary>
            <param name="Op">Operator.</param>
            <param name="Token">DSL token (e.g. <c>&gt;=</c>, <c>not_in</c>).</param>
            <param name="Arity">Arity.</param>
            <param name="Category">Category.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.OperatorInfo.Op">
            <summary>Operator.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.OperatorInfo.Token">
            <summary>DSL token (e.g. <c>&gt;=</c>, <c>not_in</c>).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.OperatorInfo.Arity">
            <summary>Arity.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.OperatorInfo.Category">
            <summary>Category.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.OperatorInfo.All">
            <summary>All operators.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.OperatorInfo.Get(Verdict.RuleEngine.Dsl.ExpressionOperator)">
            <summary>Looks up metadata by operator.</summary>
            <param name="op">Operator.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.OperatorInfo.TryGet(System.String,Verdict.RuleEngine.Dsl.OperatorInfo@)">
            <summary>Attempts to look up metadata by DSL token.</summary>
            <param name="token">Token.</param>
            <param name="info">Metadata.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.ExpressionJsonConverter">
            <summary>
            (De)serializes <see cref="T:Verdict.RuleEngine.Dsl.Expression"/> trees.
            <para>Read shapes:</para>
            <list type="bullet">
            <item><c>{"field":"a.b"}</c> → <see cref="T:Verdict.RuleEngine.Dsl.FieldOperand"/>; a bare JSON string is accepted as a field-path shorthand.</item>
            <item><c>{"lit": any}</c> → <see cref="T:Verdict.RuleEngine.Dsl.LiteralOperand"/>; bare numbers, booleans, arrays and <c>null</c> are accepted as literal shorthand.</item>
            <item><c>{"var":"name"}</c>, <c>{"acc":"name"}</c>, <c>{"fn":"name","args":[...]}</c>.</item>
            <item><c>{"op":"...", ...}</c> with operands given as <c>args</c>, or <c>left</c>/<c>right</c>, <c>arg</c>, or <c>left</c>/<c>low</c>/<c>high</c>.</item>
            </list>
            <para>Write shape is canonical: binary → <c>left</c>/<c>right</c>, unary → <c>arg</c>, ternary → <c>left</c>/<c>low</c>/<c>high</c>, variadic → <c>args</c>.</para>
            </summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.ExpressionJsonConverter.Read(System.Text.Json.Utf8JsonReader@,System.Type,System.Text.Json.JsonSerializerOptions)">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.ExpressionJsonConverter.Write(System.Text.Json.Utf8JsonWriter,Verdict.RuleEngine.Dsl.Expression,System.Text.Json.JsonSerializerOptions)">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.ExpressionJsonConverter.FromJsonNode(System.Text.Json.Nodes.JsonNode)">
            <summary>Converts a JSON node to an expression tree.</summary>
            <param name="node">JSON node.</param>
            <exception cref="T:System.Text.Json.JsonException">The node is not a valid expression.</exception>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.ExpressionJsonConverter.ToJsonNode(Verdict.RuleEngine.Dsl.Expression)">
            <summary>Converts an expression tree to its canonical JSON node shape.</summary>
            <param name="expr">Expression.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.RulesetDocument">
            <summary>
            A ruleset document: the root of the JSON DSL. Immutable; deserialize with <see cref="T:Verdict.RuleEngine.Dsl.DslJson"/>.
            </summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.RulesetDocument.RulesetId">
            <summary>Stable ruleset identifier (e.g. <c>rs-eligibility-tourist</c>).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.RulesetDocument.Name">
            <summary>Human-readable name.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.RulesetDocument.ContractVersion">
            <summary>Reference to the application data contract, in the form <c>{contractId}@v{version}</c>.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.RulesetDocument.Description">
            <summary>Optional free-text description.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.RulesetDocument.Strategy">
            <summary>Evaluation strategy. Defaults to <see cref="F:Verdict.RuleEngine.Dsl.EvaluationStrategy.EvaluateAll"/>.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.RulesetDocument.Nodes">
            <summary>Nodes of the rule graph. Exactly one must be a <see cref="T:Verdict.RuleEngine.Dsl.StartNode"/>.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.RulesetDocument.FindNode(System.String)">
            <summary>Returns the node with the given id or <see langword="null"/>.</summary>
            <param name="id">Node id.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.RulesetDocument.FindStart">
            <summary>Returns the single start node, or <see langword="null"/> if there is not exactly one.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.RuleNode">
            <summary>Base type of all rule graph nodes. Polymorphic on the <c>type</c> discriminator.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.RuleNode.Id">
            <summary>Unique node id within the document.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.RuleNode.NodeType">
            <summary>The DSL <c>type</c> token of this node.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.RuleNode.Successors">
            <summary>All outgoing edges (target node ids) of this node, in document order.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.RuleNode.GetNodeType">
            <summary>Returns the DSL <c>type</c> token.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.RuleNode.GetSuccessors">
            <summary>Returns the outgoing edges in document order.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.StartNode">
            <summary>Single entry node; declares the input fields (paths or globs like <c>applicant.*</c>) the ruleset consumes.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.StartNode.Inputs">
            <summary>Required input field paths or globs.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.StartNode.Next">
            <summary>Next node id.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.StartNode.GetNodeType">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.StartNode.GetSuccessors">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.ConditionNode">
            <summary>Boolean branch.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.ConditionNode.Expr">
            <summary>Boolean expression.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.ConditionNode.OnTrue">
            <summary>Node id followed when the expression evaluates to true.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.ConditionNode.OnFalse">
            <summary>Node id followed when the expression evaluates to false (or null).</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.ConditionNode.GetNodeType">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.ConditionNode.GetSuccessors">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.SwitchNode">
            <summary>Multi-branch on the invariant string form of a field value.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.SwitchNode.Field">
            <summary>Field path whose value selects the case.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.SwitchNode.Cases">
            <summary>Case value → node id. Values are compared with ordinal (invariant) equality.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.SwitchNode.Default">
            <summary>Node id followed when no case matches.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.SwitchNode.GetNodeType">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.SwitchNode.GetSuccessors">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.SetVariableNode">
            <summary>Computes a derived variable exposed as <c>vars.{name}</c> to downstream nodes.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.SetVariableNode.Name">
            <summary>Variable name.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.SetVariableNode.Expr">
            <summary>Expression computing the value.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.SetVariableNode.Next">
            <summary>Next node id.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.SetVariableNode.GetNodeType">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.SetVariableNode.GetSuccessors">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.ScoreNode">
            <summary>Adds a delta to a named accumulator (exposed as <c>accumulators.{name}</c> / <c>{"acc":name}</c>).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.ScoreNode.Accumulator">
            <summary>Accumulator name.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.ScoreNode.Delta">
            <summary>Delta expression (a literal number or any numeric expression).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.ScoreNode.Next">
            <summary>Next node id.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.ScoreNode.GetNodeType">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.ScoreNode.GetSuccessors">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.ConnectorCheckNode">
            <summary>Invokes a connector operation and exposes its outputs as <c>{outputAs}.{field}</c>.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.ConnectorCheckNode.ConnectorRef">
            <summary>Connector reference in the form <c>conn-x@v2</c>.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.ConnectorCheckNode.Operation">
            <summary>Operation name declared by the connector.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.ConnectorCheckNode.InputMap">
            <summary>Parameter name → expression (a bare string in JSON is a field path shorthand).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.ConnectorCheckNode.OutputAs">
            <summary>Scope name under which the outputs are exposed.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.ConnectorCheckNode.OnSuccess">
            <summary>Node id followed on success.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.ConnectorCheckNode.OnError">
            <summary>Node id(s) followed on error (optional; when absent the error behaviour terminates the path).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.ConnectorCheckNode.OnErrorBehavior">
            <summary>Error behaviour.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.ConnectorCheckNode.TimeoutMs">
            <summary>Per-node timeout in milliseconds (capped by the global option).</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.ConnectorCheckNode.GetNodeType">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.ConnectorCheckNode.GetSuccessors">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.SubRulesetNode">
            <summary>Executes a published sub-ruleset and exposes its result as <c>{outputAs}.{outcome|hardFail|score}</c>.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.SubRulesetNode.RulesetRef">
            <summary>Ruleset reference in the form <c>rs-y@v3</c>.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.SubRulesetNode.InputMap">
            <summary>Optional mapping of target input path → expression. When absent the full input is forwarded.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.SubRulesetNode.OutputAs">
            <summary>Scope name under which the sub-result is exposed.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.SubRulesetNode.Next">
            <summary>Next node id.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.SubRulesetNode.GetNodeType">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.SubRulesetNode.GetSuccessors">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.RouteHintNode">
            <summary>Annotation collected into the execution result metadata.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.RouteHintNode.Hint">
            <summary>Hint text.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.RouteHintNode.Next">
            <summary>Next node id.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.RouteHintNode.GetNodeType">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.RouteHintNode.GetSuccessors">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.OutcomeNode">
            <summary>Terminal node producing an outcome.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.OutcomeNode.Outcome">
            <summary>Outcome kind.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.OutcomeNode.Hard">
            <summary>
            When <see langword="true"/> together with <see cref="F:Verdict.RuleEngine.Dsl.OutcomeKind.Fail"/>, the failure is hard: the host
            (or any ML layer) must never override it.
            </summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.OutcomeNode.ReasonCode">
            <summary>Stable reason code (e.g. <c>PASSPORT_VALIDITY</c>).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.OutcomeNode.ReasonText">
            <summary>Human-readable reason; supports <c>{expression}</c> interpolation.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.OutcomeNode.Severity">
            <summary>Optional severity.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.OutcomeNode.GetNodeType">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.OutcomeNode.GetSuccessors">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.NodeTypes">
            <summary>DSL node type tokens.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.NodeTypes.Start">
            <summary><c>start</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.NodeTypes.Condition">
            <summary><c>condition</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.NodeTypes.Switch">
            <summary><c>switch</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.NodeTypes.SetVariable">
            <summary><c>setVariable</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.NodeTypes.Score">
            <summary><c>score</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.NodeTypes.ConnectorCheck">
            <summary><c>connectorCheck</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.NodeTypes.SubRuleset">
            <summary><c>subRuleset</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.NodeTypes.RouteHint">
            <summary><c>routeHint</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.NodeTypes.Outcome">
            <summary><c>outcome</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Dsl.NodeTypes.All">
            <summary>All node type tokens.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.NodeTargets">
            <summary>
            Target(s) of an edge. In JSON either a single node id (<c>"next": "n1"</c>) or an array of ids
            (<c>"next": ["a", "b"]</c>) for parallel branches. Under <c>first-match</c> parallel branches are followed in order
            until the first outcome fires; under <c>evaluate-all</c> every branch is visited in document order.
            </summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.NodeTargets.#ctor(System.Collections.Generic.IEnumerable{System.String})">
            <summary>Creates targets.</summary>
            <param name="ids">One or more node ids.</param>
            <exception cref="T:System.ArgumentException">Empty list or empty id.</exception>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.NodeTargets.#ctor(System.String)">
            <summary>Creates a single target.</summary>
            <param name="id">Node id.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.NodeTargets.IsSingle">
            <summary>Whether there is exactly one target.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.NodeTargets.Single">
            <summary>The single target id (throws when there are several).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.NodeTargets.Count">
            <inheritdoc />
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.NodeTargets.Item(System.Int32)">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.NodeTargets.op_Implicit(System.String)~Verdict.RuleEngine.Dsl.NodeTargets">
            <summary>Implicit conversion from a single id.</summary>
            <param name="id">Node id.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.NodeTargets.FromString(System.String)">
            <summary>Creates targets from a single id.</summary>
            <param name="id">Node id.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.NodeTargets.GetEnumerator">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.NodeTargets.System#Collections#IEnumerable#GetEnumerator">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.NodeTargets.Equals(Verdict.RuleEngine.Dsl.NodeTargets)">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.NodeTargets.Equals(System.Object)">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.NodeTargets.GetHashCode">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.NodeTargets.ToString">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.NodeTargetsJsonConverter">
            <summary>Reads a string or an array of strings; writes a string for a single target and an array otherwise.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.NodeTargetsJsonConverter.Read(System.Text.Json.Utf8JsonReader@,System.Type,System.Text.Json.JsonSerializerOptions)">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.NodeTargetsJsonConverter.Write(System.Text.Json.Utf8JsonWriter,Verdict.RuleEngine.Dsl.NodeTargets,System.Text.Json.JsonSerializerOptions)">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.VersionedRef">
            <summary>Parser for versioned references of the form <c>{id}@v{version}</c> (e.g. <c>conn-x@v2</c>, <c>rs-y@v3</c>).</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.VersionedRef.TryParse(System.String,System.String@,System.Int32@)">
            <summary>Attempts to parse a reference.</summary>
            <param name="text">Reference text.</param>
            <param name="id">Parsed id.</param>
            <param name="version">Parsed version.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.VersionedRef.Format(System.String,System.Int32)">
            <summary>Formats a reference.</summary>
            <param name="id">Id.</param>
            <param name="version">Version.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.RulesetRef">
            <summary>Reference to a specific ruleset version (<c>rs-y@v3</c>).</summary>
            <param name="Id">Ruleset id.</param>
            <param name="Version">Version number (≥ 1).</param>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.RulesetRef.#ctor(System.String,System.Int32)">
            <summary>Reference to a specific ruleset version (<c>rs-y@v3</c>).</summary>
            <param name="Id">Ruleset id.</param>
            <param name="Version">Version number (≥ 1).</param>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.RulesetRef.Id">
            <summary>Ruleset id.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.RulesetRef.Version">
            <summary>Version number (≥ 1).</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.RulesetRef.Parse(System.String)">
            <summary>Parses a reference or throws.</summary>
            <param name="text">Reference text.</param>
            <exception cref="T:System.FormatException">The text is not a valid reference.</exception>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.RulesetRef.TryParse(System.String,Verdict.RuleEngine.Dsl.RulesetRef@)">
            <summary>Attempts to parse a reference.</summary>
            <param name="text">Reference text.</param>
            <param name="result">Parsed reference.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.RulesetRef.ToString">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Dsl.ContractRef">
            <summary>Reference to an application data contract version (<c>app-contract@v2</c>).</summary>
            <param name="Id">Contract id.</param>
            <param name="Version">Version number (≥ 1).</param>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.ContractRef.#ctor(System.String,System.Int32)">
            <summary>Reference to an application data contract version (<c>app-contract@v2</c>).</summary>
            <param name="Id">Contract id.</param>
            <param name="Version">Version number (≥ 1).</param>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.ContractRef.Id">
            <summary>Contract id.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Dsl.ContractRef.Version">
            <summary>Version number (≥ 1).</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.ContractRef.Parse(System.String)">
            <summary>Parses a reference or throws.</summary>
            <param name="text">Reference text.</param>
            <exception cref="T:System.FormatException">The text is not a valid reference.</exception>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.ContractRef.TryParse(System.String,Verdict.RuleEngine.Dsl.ContractRef@)">
            <summary>Attempts to parse a reference.</summary>
            <param name="text">Reference text.</param>
            <param name="result">Parsed reference.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Dsl.ContractRef.ToString">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Execution.DefaultRuleEngine">
            <summary>
            Default <see cref="T:Verdict.RuleEngine.Abstractions.IRuleEngine"/>: loads the requested version, enforces mode/state rules, runs the
            <see cref="T:Verdict.RuleEngine.Execution.RulesetExecutor"/>, asserts the trace invariant and persists traces / test runs.
            </summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.DefaultRuleEngine.#ctor(Verdict.RuleEngine.Abstractions.IRulesetStore,Verdict.RuleEngine.Abstractions.IContractSchemaStore,Verdict.RuleEngine.Connectors.IConnectorDefinitionStore,Verdict.RuleEngine.Execution.RulesetExecutor,Verdict.RuleEngine.Validation.RulesetValidator,Verdict.RuleEngine.Abstractions.RuleEngineOptions,System.TimeProvider,Microsoft.Extensions.Logging.ILogger{Verdict.RuleEngine.Execution.DefaultRuleEngine})">
            <summary>Initializes the engine.</summary>
            <param name="rulesets">Ruleset store.</param>
            <param name="contracts">Contract store.</param>
            <param name="connectorDefinitions">Connector definition store (for validation).</param>
            <param name="executor">Executor.</param>
            <param name="validator">Validator.</param>
            <param name="options">Options.</param>
            <param name="timeProvider">Time source.</param>
            <param name="logger">Logger.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.DefaultRuleEngine.ExecuteAsync(Verdict.RuleEngine.Abstractions.RulesetExecutionRequest,System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Execution.DefaultRuleEngine.Validate(Verdict.RuleEngine.Dsl.RulesetDocument,Verdict.RuleEngine.Abstractions.ContractSchema)">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Execution.DefaultRuleEngine.ValidateAsync(Verdict.RuleEngine.Dsl.RulesetDocument,Verdict.RuleEngine.Abstractions.ContractSchema,System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Execution.DefaultRuleEngine.ResolveAsync(Verdict.RuleEngine.Dsl.RulesetRef,Verdict.RuleEngine.Abstractions.ExecutionMode,System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Execution.DefaultRuleEngine.IsExecutable(Verdict.RuleEngine.Versioning.RulesetState,Verdict.RuleEngine.Abstractions.ExecutionMode,Verdict.RuleEngine.Abstractions.VersionSelector)">
            <summary>
            Production may execute <see cref="F:Verdict.RuleEngine.Versioning.RulesetState.Published"/> versions, or <see cref="F:Verdict.RuleEngine.Versioning.RulesetState.Deprecated"/> ones when
            pinned explicitly. Sandbox may execute anything that is not <see cref="F:Verdict.RuleEngine.Versioning.RulesetState.Archived"/>.
            </summary>
            <param name="state">State.</param>
            <param name="mode">Mode.</param>
            <param name="selector">How the version was selected.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.DefaultRuleEngine.ToJson(Verdict.RuleEngine.Abstractions.RulesetExecutionResult)">
            <summary>Serializes a result with the engine JSON conventions (camelCase, string enums).</summary>
            <param name="result">Result.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Execution.ExecutionTrace">
            <summary>
            Complete, ordered explanation of one ruleset execution. This exact shape is the golden-file contract:
            changing it changes what hosts and auditors see.
            </summary>
            <param name="Steps">One step per visited node, in visit order.</param>
            <param name="Warnings">Non-fatal issues (template failures, connector fall-backs, redaction notes…).</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.ExecutionTrace.#ctor(System.Collections.Generic.IReadOnlyList{Verdict.RuleEngine.Execution.TraceStep},System.Collections.Generic.IReadOnlyList{System.String})">
            <summary>
            Complete, ordered explanation of one ruleset execution. This exact shape is the golden-file contract:
            changing it changes what hosts and auditors see.
            </summary>
            <param name="Steps">One step per visited node, in visit order.</param>
            <param name="Warnings">Non-fatal issues (template failures, connector fall-backs, redaction notes…).</param>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.ExecutionTrace.Steps">
            <summary>One step per visited node, in visit order.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.ExecutionTrace.Warnings">
            <summary>Non-fatal issues (template failures, connector fall-backs, redaction notes…).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.ExecutionTrace.DecisionSnapshots">
            <summary>Exact root and invoked child graphs captured at execution, or null for legacy/low-level traces without capture.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Execution.DecisionSnapshot">
            <summary>An execution-time graph copy, never reconstructed from a subsequently edited version.</summary>
            <param name="RulesetId">Decision identifier.</param>
            <param name="Version">Version executed.</param>
            <param name="NodePrefix">Trace node prefix (empty for root, e.g. child-step/ for a nested invocation).</param>
            <param name="DocumentHash">Hash of the captured canonical document.</param>
            <param name="Document">Complete DSL graph, including branches that did not execute; contains no execution input.</param>
            <param name="Contract">Exact contract used for input validation, when available.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.DecisionSnapshot.#ctor(System.String,System.Int32,System.String,System.String,System.Text.Json.Nodes.JsonObject,System.Text.Json.Nodes.JsonObject)">
            <summary>An execution-time graph copy, never reconstructed from a subsequently edited version.</summary>
            <param name="RulesetId">Decision identifier.</param>
            <param name="Version">Version executed.</param>
            <param name="NodePrefix">Trace node prefix (empty for root, e.g. child-step/ for a nested invocation).</param>
            <param name="DocumentHash">Hash of the captured canonical document.</param>
            <param name="Document">Complete DSL graph, including branches that did not execute; contains no execution input.</param>
            <param name="Contract">Exact contract used for input validation, when available.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.DecisionSnapshot.RulesetId">
            <summary>Decision identifier.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.DecisionSnapshot.Version">
            <summary>Version executed.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.DecisionSnapshot.NodePrefix">
            <summary>Trace node prefix (empty for root, e.g. child-step/ for a nested invocation).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.DecisionSnapshot.DocumentHash">
            <summary>Hash of the captured canonical document.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.DecisionSnapshot.Document">
            <summary>Complete DSL graph, including branches that did not execute; contains no execution input.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.DecisionSnapshot.Contract">
            <summary>Exact contract used for input validation, when available.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Execution.TraceStep">
            <summary>One visited node.</summary>
            <param name="NodeId">Node id.</param>
            <param name="NodeType">DSL node type token.</param>
            <param name="ExpressionText">Canonical text of what the node evaluated (e.g. <c>days_until(passport.expiryDate) &gt;= 180</c>).</param>
            <param name="ResolvedText">The same with values substituted (e.g. <c>days_until(2027-11-02)=429 &gt;= 180</c>).</param>
            <param name="ResolvedValues">Machine-readable operand values (redacted per profile).</param>
            <param name="BooleanResult">Result of a boolean node (condition), when applicable.</param>
            <param name="Connector">Connector invocation details for <c>connectorCheck</c> nodes.</param>
            <param name="ElapsedMs">Wall-clock time spent on the node.</param>
            <remarks>
            Declaration order is the serialized property order (part of the golden-file contract). Nullable members carry
            defaults so that a stored trace — written with nulls omitted — deserializes again.
            </remarks>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.TraceStep.#ctor(System.String,System.String,System.String,System.String,System.Text.Json.Nodes.JsonNode,System.Nullable{System.Boolean},Verdict.RuleEngine.Execution.ConnectorTraceInfo,System.Double)">
            <summary>One visited node.</summary>
            <param name="NodeId">Node id.</param>
            <param name="NodeType">DSL node type token.</param>
            <param name="ExpressionText">Canonical text of what the node evaluated (e.g. <c>days_until(passport.expiryDate) &gt;= 180</c>).</param>
            <param name="ResolvedText">The same with values substituted (e.g. <c>days_until(2027-11-02)=429 &gt;= 180</c>).</param>
            <param name="ResolvedValues">Machine-readable operand values (redacted per profile).</param>
            <param name="BooleanResult">Result of a boolean node (condition), when applicable.</param>
            <param name="Connector">Connector invocation details for <c>connectorCheck</c> nodes.</param>
            <param name="ElapsedMs">Wall-clock time spent on the node.</param>
            <remarks>
            Declaration order is the serialized property order (part of the golden-file contract). Nullable members carry
            defaults so that a stored trace — written with nulls omitted — deserializes again.
            </remarks>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.TraceStep.NodeId">
            <summary>Node id.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.TraceStep.NodeType">
            <summary>DSL node type token.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.TraceStep.ExpressionText">
            <summary>Canonical text of what the node evaluated (e.g. <c>days_until(passport.expiryDate) &gt;= 180</c>).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.TraceStep.ResolvedText">
            <summary>The same with values substituted (e.g. <c>days_until(2027-11-02)=429 &gt;= 180</c>).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.TraceStep.ResolvedValues">
            <summary>Machine-readable operand values (redacted per profile).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.TraceStep.BooleanResult">
            <summary>Result of a boolean node (condition), when applicable.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.TraceStep.Connector">
            <summary>Connector invocation details for <c>connectorCheck</c> nodes.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.TraceStep.ElapsedMs">
            <summary>Wall-clock time spent on the node.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Execution.ConnectorTraceInfo">
            <summary>Connector invocation details recorded in a trace step. Request and response are redacted per profile.</summary>
            <param name="ConnectorRef">Connector reference (<c>conn-x@v2</c>).</param>
            <param name="Operation">Operation name.</param>
            <param name="Request">Parameters sent (redacted).</param>
            <param name="ResponseSummary">Outputs / response summary (redacted).</param>
            <param name="Status">Status token: <c>ok</c>, <c>error</c>, <c>timeout</c>, <c>mock</c>, <c>skipped</c>…</param>
            <param name="ElapsedMs">Total time including retries.</param>
            <param name="Attempts">Number of attempts made.</param>
            <param name="Error">Error message when the invocation failed.</param>
            <remarks>
            <see cref="T:System.Text.Json.Serialization.JsonPropertyOrderAttribute"/> pins the serialized order (part of the golden-file contract) while the
            nullable members sit last in the constructor so they can carry defaults for deserialization.
            </remarks>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.ConnectorTraceInfo.#ctor(System.String,System.String,System.Text.Json.Nodes.JsonObject,System.String,System.Double,System.Int32,System.Text.Json.Nodes.JsonNode,System.String)">
            <summary>Connector invocation details recorded in a trace step. Request and response are redacted per profile.</summary>
            <param name="ConnectorRef">Connector reference (<c>conn-x@v2</c>).</param>
            <param name="Operation">Operation name.</param>
            <param name="Request">Parameters sent (redacted).</param>
            <param name="ResponseSummary">Outputs / response summary (redacted).</param>
            <param name="Status">Status token: <c>ok</c>, <c>error</c>, <c>timeout</c>, <c>mock</c>, <c>skipped</c>…</param>
            <param name="ElapsedMs">Total time including retries.</param>
            <param name="Attempts">Number of attempts made.</param>
            <param name="Error">Error message when the invocation failed.</param>
            <remarks>
            <see cref="T:System.Text.Json.Serialization.JsonPropertyOrderAttribute"/> pins the serialized order (part of the golden-file contract) while the
            nullable members sit last in the constructor so they can carry defaults for deserialization.
            </remarks>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.ConnectorTraceInfo.ConnectorRef">
            <summary>Connector reference (<c>conn-x@v2</c>).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.ConnectorTraceInfo.Operation">
            <summary>Operation name.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.ConnectorTraceInfo.Request">
            <summary>Parameters sent (redacted).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.ConnectorTraceInfo.Status">
            <summary>Status token: <c>ok</c>, <c>error</c>, <c>timeout</c>, <c>mock</c>, <c>skipped</c>…</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.ConnectorTraceInfo.ElapsedMs">
            <summary>Total time including retries.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.ConnectorTraceInfo.Attempts">
            <summary>Number of attempts made.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.ConnectorTraceInfo.ResponseSummary">
            <summary>Outputs / response summary (redacted).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.ConnectorTraceInfo.Error">
            <summary>Error message when the invocation failed.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Execution.Expressions.EvaluationException">
            <summary>
            Raised when an expression cannot be evaluated (type mismatch, division by zero, invalid regex, unknown function…).
            The executor maps it to the node error path and a <c>FLAG</c> outcome with <c>EVALUATION_ERROR</c>; it never escapes
            <c>IRuleEngine.ExecuteAsync</c>.
            </summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.EvaluationException.#ctor">
            <summary>Initializes the exception.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.EvaluationException.#ctor(System.String)">
            <summary>Initializes the exception.</summary>
            <param name="message">Message.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.EvaluationException.#ctor(System.String,System.Exception)">
            <summary>Initializes the exception.</summary>
            <param name="message">Message.</param>
            <param name="innerException">Inner exception.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Execution.Expressions.IValueRedactor">
            <summary>Redacts field values before they are written to traces (see <c>RedactionProfile</c>).</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.IValueRedactor.RedactField(System.String,Verdict.RuleEngine.Execution.Expressions.RuleValue)">
            <summary>Returns the value to expose in traces for a field path (the original value when the path is not redacted).</summary>
            <param name="path">Scope path (e.g. <c>applicant.dob</c>).</param>
            <param name="value">Original value.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.IValueRedactor.RedactConnectorParameter(System.String,System.String,Verdict.RuleEngine.Execution.Expressions.RuleValue)">
            <summary>Returns the value to expose in traces for a connector parameter.</summary>
            <param name="connectorRef">Connector reference text.</param>
            <param name="parameter">Parameter name.</param>
            <param name="value">Original value.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Execution.Expressions.NullValueRedactor">
            <summary>Redactor that exposes every value unchanged.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.Expressions.NullValueRedactor.Instance">
            <summary>Shared instance.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.NullValueRedactor.RedactField(System.String,Verdict.RuleEngine.Execution.Expressions.RuleValue)">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.NullValueRedactor.RedactConnectorParameter(System.String,System.String,Verdict.RuleEngine.Execution.Expressions.RuleValue)">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Execution.Expressions.EvaluationScope">
            <summary>
            Mutable evaluation scope of one ruleset execution: input payload, derived variables (<c>vars.*</c>), connector /
            sub-ruleset outputs (<c>{outputAs}.*</c>) and score accumulators (<c>accumulators.*</c>).
            Not thread-safe; one instance per execution.
            </summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.Expressions.EvaluationScope.VarsPrefix">
            <summary>Path prefix of derived variables.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.Expressions.EvaluationScope.AccumulatorsPrefix">
            <summary>Path prefix of accumulators.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.EvaluationScope.#ctor(System.Text.Json.Nodes.JsonObject)">
            <summary>Initializes a scope over an input payload.</summary>
            <param name="input">Application payload.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.EvaluationScope.Input">
            <summary>Input payload.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.EvaluationScope.Variables">
            <summary>Derived variables.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.EvaluationScope.Outputs">
            <summary>Connector / sub-ruleset outputs by <c>outputAs</c> name.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.EvaluationScope.Accumulators">
            <summary>Accumulators (insertion order preserved).</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.EvaluationScope.SetVariable(System.String,Verdict.RuleEngine.Execution.Expressions.RuleValue)">
            <summary>Sets (or overwrites) a derived variable.</summary>
            <param name="name">Name.</param>
            <param name="value">Value.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.EvaluationScope.GetVariable(System.String)">
            <summary>Returns a variable or <see cref="F:Verdict.RuleEngine.Execution.Expressions.RuleValue.Null"/>.</summary>
            <param name="name">Name.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.EvaluationScope.SetOutput(System.String,System.Text.Json.Nodes.JsonObject)">
            <summary>Registers an output object under an <c>outputAs</c> name.</summary>
            <param name="name">Name.</param>
            <param name="output">Output object.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.EvaluationScope.AddToAccumulator(System.String,System.Decimal)">
            <summary>Adds a delta to an accumulator (created at 0) and returns the new total.</summary>
            <param name="name">Accumulator name.</param>
            <param name="delta">Delta.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.EvaluationScope.GetAccumulator(System.String)">
            <summary>Returns the accumulator value (0 when not yet touched).</summary>
            <param name="name">Accumulator name.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.EvaluationScope.TotalScore">
            <summary>Sum of all accumulators, or <see langword="null"/> when none were used.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.EvaluationScope.ResolvePath(System.String)">
            <summary>
            Resolves a dotted path. Resolution order of the first segment: <c>vars</c>, <c>accumulators</c>, a registered
            output name, then the input payload. Missing values resolve to <see cref="F:Verdict.RuleEngine.Execution.Expressions.RuleValue.Null"/> (never throw).
            </summary>
            <param name="path">Dotted path.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.EvaluationScope.ResolveJsonPath(System.Text.Json.Nodes.JsonNode,System.ReadOnlySpan{System.String})">
            <summary>Walks a JSON tree by path segments (object properties or array indices).</summary>
            <param name="root">Root node.</param>
            <param name="segments">Segments.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Execution.Expressions.ResolvedExpression">
            <summary>An expression annotated with its evaluated value and evaluated children (used to render resolved trace text).</summary>
            <param name="Expression">The expression.</param>
            <param name="Value">Evaluated value (<see cref="F:Verdict.RuleEngine.Execution.Expressions.RuleValue.Null"/> when <paramref name="Evaluated"/> is false).</param>
            <param name="Children">Resolved operands / arguments (in positional order).</param>
            <param name="Evaluated">False when the operand was skipped by short-circuit evaluation.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.ResolvedExpression.#ctor(Verdict.RuleEngine.Dsl.Expression,Verdict.RuleEngine.Execution.Expressions.RuleValue,System.Collections.Generic.IReadOnlyList{Verdict.RuleEngine.Execution.Expressions.ResolvedExpression},System.Boolean)">
            <summary>An expression annotated with its evaluated value and evaluated children (used to render resolved trace text).</summary>
            <param name="Expression">The expression.</param>
            <param name="Value">Evaluated value (<see cref="F:Verdict.RuleEngine.Execution.Expressions.RuleValue.Null"/> when <paramref name="Evaluated"/> is false).</param>
            <param name="Children">Resolved operands / arguments (in positional order).</param>
            <param name="Evaluated">False when the operand was skipped by short-circuit evaluation.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.ResolvedExpression.Expression">
            <summary>The expression.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.ResolvedExpression.Value">
            <summary>Evaluated value (<see cref="F:Verdict.RuleEngine.Execution.Expressions.RuleValue.Null"/> when <paramref name="Evaluated"/> is false).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.ResolvedExpression.Children">
            <summary>Resolved operands / arguments (in positional order).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.ResolvedExpression.Evaluated">
            <summary>False when the operand was skipped by short-circuit evaluation.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Execution.Expressions.ExpressionEvaluator">
            <summary>
            Deterministic expression evaluator. Pure function of (expression, scope, time provider, function registry).
            All failures surface as <see cref="T:Verdict.RuleEngine.Execution.Expressions.EvaluationException"/>; no other exception type escapes for well-formed input.
            Thread-safe; one instance can serve concurrent executions.
            </summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.Expressions.ExpressionEvaluator.RegexTimeout">
            <summary>Regex match timeout (spec: 100 ms).</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.ExpressionEvaluator.#ctor(Verdict.RuleEngine.Execution.Expressions.FunctionRegistry,System.TimeProvider)">
            <summary>Initializes the evaluator.</summary>
            <param name="functions">Function registry (defaults to built-ins).</param>
            <param name="timeProvider">Time source (defaults to <see cref="P:System.TimeProvider.System"/>).</param>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.ExpressionEvaluator.Functions">
            <summary>Function registry in use.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.ExpressionEvaluator.TimeProvider">
            <summary>Time provider in use.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.ExpressionEvaluator.Evaluate(Verdict.RuleEngine.Dsl.Expression,Verdict.RuleEngine.Execution.Expressions.EvaluationScope)">
            <summary>Evaluates an expression and returns only its value.</summary>
            <param name="expression">Expression.</param>
            <param name="scope">Scope.</param>
            <exception cref="T:Verdict.RuleEngine.Execution.Expressions.EvaluationException">Evaluation failed.</exception>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.ExpressionEvaluator.EvaluateCondition(Verdict.RuleEngine.Dsl.Expression,Verdict.RuleEngine.Execution.Expressions.EvaluationScope)">
            <summary>Evaluates an expression as a boolean condition: only a boolean <c>true</c> is truthy; null is false.</summary>
            <param name="expression">Expression.</param>
            <param name="scope">Scope.</param>
            <exception cref="T:Verdict.RuleEngine.Execution.Expressions.EvaluationException">Evaluation failed or the result is not boolean/null.</exception>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.ExpressionEvaluator.EvaluateResolved(Verdict.RuleEngine.Dsl.Expression,Verdict.RuleEngine.Execution.Expressions.EvaluationScope)">
            <summary>Evaluates an expression and returns the fully resolved tree.</summary>
            <param name="expression">Expression.</param>
            <param name="scope">Scope.</param>
            <exception cref="T:Verdict.RuleEngine.Execution.Expressions.EvaluationException">Evaluation failed.</exception>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.ExpressionEvaluator.IsTruthy(Verdict.RuleEngine.Execution.Expressions.RuleValue)">
            <summary>Whether a value counts as a satisfied condition: exactly boolean <c>true</c>.</summary>
            <param name="value">Value.</param>
            <exception cref="T:Verdict.RuleEngine.Execution.Expressions.EvaluationException">The value is neither boolean nor null.</exception>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.ExpressionEvaluator.CoerceToDateIfPaired(Verdict.RuleEngine.Execution.Expressions.ResolvedExpression,Verdict.RuleEngine.Execution.Expressions.RuleValue)">
            <summary>When the counterpart is a date and this operand is an ISO date string, record the interpreted date in the resolved tree.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.ExpressionEvaluator.Compare(Verdict.RuleEngine.Dsl.ExpressionOperator,Verdict.RuleEngine.Execution.Expressions.RuleValue,Verdict.RuleEngine.Execution.Expressions.RuleValue)">
            <summary>Comparison semantics: any null operand → false; otherwise operands must be type-compatible.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.ExpressionEvaluator.GetRegex(System.String)">
            <summary>Compiles (and caches) a DSL regex with the mandated options; throws <see cref="T:System.ArgumentException"/>/<see cref="T:System.NotSupportedException"/> for invalid patterns.</summary>
            <param name="pattern">Pattern.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Execution.Expressions.ExpressionPrinter">
            <summary>
            Canonical, stable, human-readable printer for expressions — the heart of explainability.
            <list type="bullet">
            <item><see cref="M:Verdict.RuleEngine.Execution.Expressions.ExpressionPrinter.Print(Verdict.RuleEngine.Dsl.Expression)"/> renders the expression itself, e.g. <c>days_until(passport.expiryDate) &gt;= 180</c>.</item>
            <item><see cref="M:Verdict.RuleEngine.Execution.Expressions.ExpressionPrinter.PrintResolved(Verdict.RuleEngine.Execution.Expressions.ResolvedExpression,Verdict.RuleEngine.Execution.Expressions.IValueRedactor)"/> renders the same shape with values substituted,
            e.g. <c>days_until(2027-11-02)=429 &gt;= 180</c>.</item>
            <item><see cref="M:Verdict.RuleEngine.Execution.Expressions.ExpressionPrinter.CollectResolvedValues(Verdict.RuleEngine.Execution.Expressions.ResolvedExpression,Verdict.RuleEngine.Execution.Expressions.IValueRedactor)"/> produces the machine-readable operand map.</item>
            </list>
            </summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.ExpressionPrinter.Print(Verdict.RuleEngine.Dsl.Expression)">
            <summary>Renders the canonical text of an expression.</summary>
            <param name="expression">Expression.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.ExpressionPrinter.PrintResolved(Verdict.RuleEngine.Execution.Expressions.ResolvedExpression,Verdict.RuleEngine.Execution.Expressions.IValueRedactor)">
            <summary>Renders the resolved text of an evaluated expression (values substituted, functions and arithmetic annotated with <c>=value</c>).</summary>
            <param name="resolved">Resolved expression.</param>
            <param name="redactor">Optional redactor applied to field values.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.ExpressionPrinter.CollectResolvedValues(Verdict.RuleEngine.Execution.Expressions.ResolvedExpression,Verdict.RuleEngine.Execution.Expressions.IValueRedactor)">
            <summary>
            Collects the machine-readable operand values of an evaluated expression: field paths, <c>vars.*</c>,
            <c>accumulators.*</c>, function calls and arithmetic sub-expressions (keyed by canonical text). Literals are omitted.
            </summary>
            <param name="resolved">Resolved expression.</param>
            <param name="redactor">Optional redactor applied to field values.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.ExpressionPrinter.OperatorToken(Verdict.RuleEngine.Dsl.ExpressionOperator)">
            <summary>Returns the display token of an operator.</summary>
            <param name="op">Operator.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Execution.Expressions.FunctionSignature">
            <summary>Static signature of an expression function, used by the evaluator (arity) and the type checker.</summary>
            <param name="Name">Function name as used in the DSL.</param>
            <param name="MinArgs">Minimum argument count.</param>
            <param name="MaxArgs">Maximum argument count, or <c>-1</c> for variadic.</param>
            <param name="ParameterTypes">Accepted types per position (<see langword="null"/> entry = any). For variadic functions the last entry repeats.</param>
            <param name="ReturnType">Static return type, or <see langword="null"/> when it depends on the arguments.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.FunctionSignature.#ctor(System.String,System.Int32,System.Int32,System.Collections.Generic.IReadOnlyList{System.Collections.Generic.IReadOnlyList{Verdict.RuleEngine.Execution.Expressions.RuleValueType}},System.Nullable{Verdict.RuleEngine.Execution.Expressions.RuleValueType})">
            <summary>Static signature of an expression function, used by the evaluator (arity) and the type checker.</summary>
            <param name="Name">Function name as used in the DSL.</param>
            <param name="MinArgs">Minimum argument count.</param>
            <param name="MaxArgs">Maximum argument count, or <c>-1</c> for variadic.</param>
            <param name="ParameterTypes">Accepted types per position (<see langword="null"/> entry = any). For variadic functions the last entry repeats.</param>
            <param name="ReturnType">Static return type, or <see langword="null"/> when it depends on the arguments.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.FunctionSignature.Name">
            <summary>Function name as used in the DSL.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.FunctionSignature.MinArgs">
            <summary>Minimum argument count.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.FunctionSignature.MaxArgs">
            <summary>Maximum argument count, or <c>-1</c> for variadic.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.FunctionSignature.ParameterTypes">
            <summary>Accepted types per position (<see langword="null"/> entry = any). For variadic functions the last entry repeats.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.FunctionSignature.ReturnType">
            <summary>Static return type, or <see langword="null"/> when it depends on the arguments.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.FunctionSignature.IsVariadic">
            <summary>Whether the function accepts an unbounded number of arguments.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.FunctionSignature.ParameterTypeAt(System.Int32)">
            <summary>Returns the accepted types for a positional argument (<see langword="null"/> = any).</summary>
            <param name="index">Argument index.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Execution.Expressions.FunctionContext">
            <summary>Ambient context passed to functions.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.FunctionContext.#ctor(System.TimeProvider)">
            <summary>Initializes the context.</summary>
            <param name="timeProvider">Time source (never use <see cref="P:System.DateTime.Now"/> directly).</param>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.FunctionContext.TimeProvider">
            <summary>Time source.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.FunctionContext.UtcNow">
            <summary>Current UTC time.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.FunctionContext.Today">
            <summary>Current UTC date.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Execution.Expressions.IExpressionFunction">
            <summary>A function callable from expressions via <c>{"fn": name, "args": [...]}</c>. Implementations must be pure and thread-safe.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.IExpressionFunction.Signature">
            <summary>Signature.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.IExpressionFunction.Invoke(System.Collections.Generic.IReadOnlyList{Verdict.RuleEngine.Execution.Expressions.RuleValue},Verdict.RuleEngine.Execution.Expressions.FunctionContext)">
            <summary>Invokes the function. Argument count is validated by the evaluator beforehand.</summary>
            <param name="args">Evaluated arguments.</param>
            <param name="context">Ambient context.</param>
            <exception cref="T:Verdict.RuleEngine.Execution.Expressions.EvaluationException">Invalid argument types or values.</exception>
        </member>
        <member name="T:Verdict.RuleEngine.Execution.Expressions.DelegateFunction">
            <summary>Convenience implementation of <see cref="T:Verdict.RuleEngine.Execution.Expressions.IExpressionFunction"/> over a delegate.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.DelegateFunction.#ctor(Verdict.RuleEngine.Execution.Expressions.FunctionSignature,System.Func{System.Collections.Generic.IReadOnlyList{Verdict.RuleEngine.Execution.Expressions.RuleValue},Verdict.RuleEngine.Execution.Expressions.FunctionContext,Verdict.RuleEngine.Execution.Expressions.RuleValue})">
            <summary>Initializes the function.</summary>
            <param name="signature">Signature.</param>
            <param name="body">Body.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.DelegateFunction.Signature">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.DelegateFunction.Invoke(System.Collections.Generic.IReadOnlyList{Verdict.RuleEngine.Execution.Expressions.RuleValue},Verdict.RuleEngine.Execution.Expressions.FunctionContext)">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Execution.Expressions.FunctionRegistry">
            <summary>Immutable, thread-safe registry of expression functions. Extend with <see cref="M:Verdict.RuleEngine.Execution.Expressions.FunctionRegistry.With(System.Collections.Generic.IEnumerable{Verdict.RuleEngine.Execution.Expressions.IExpressionFunction})"/>.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.FunctionRegistry.#ctor(System.Collections.Generic.IEnumerable{Verdict.RuleEngine.Execution.Expressions.IExpressionFunction})">
            <summary>Initializes a registry from a set of functions (later entries override earlier ones with the same name).</summary>
            <param name="functions">Functions.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.FunctionRegistry.Default">
            <summary>Registry containing only the built-in functions.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.FunctionRegistry.Names">
            <summary>All registered function names.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.FunctionRegistry.Functions">
            <summary>All registered functions.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.FunctionRegistry.TryGet(System.String,Verdict.RuleEngine.Execution.Expressions.IExpressionFunction@)">
            <summary>Attempts to resolve a function by name.</summary>
            <param name="name">Name.</param>
            <param name="function">Function.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.FunctionRegistry.With(System.Collections.Generic.IEnumerable{Verdict.RuleEngine.Execution.Expressions.IExpressionFunction})">
            <summary>Returns a new registry with additional (or overriding) functions.</summary>
            <param name="functions">Functions to add.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Execution.Expressions.BuiltInFunctions">
            <summary>The built-in function set.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.Expressions.BuiltInFunctions.Age">
            <summary><c>age(date)</c>: whole years elapsed since the date, as of today (UTC).</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.Expressions.BuiltInFunctions.DaysUntil">
            <summary><c>days_until(date)</c>: calendar days from today (UTC) until the date (negative when past).</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.Expressions.BuiltInFunctions.DaysSince">
            <summary><c>days_since(date)</c>: calendar days from the date until today (UTC) (negative when future).</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.Expressions.BuiltInFunctions.Now">
            <summary><c>now()</c>: current UTC date-time from the injected <see cref="T:System.TimeProvider"/>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.Expressions.BuiltInFunctions.Len">
            <summary><c>len(x)</c>: string length or array count.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.Expressions.BuiltInFunctions.Lower">
            <summary><c>lower(s)</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.Expressions.BuiltInFunctions.Upper">
            <summary><c>upper(s)</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.Expressions.BuiltInFunctions.Trim">
            <summary><c>trim(s)</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.Expressions.BuiltInFunctions.Coalesce">
            <summary><c>coalesce(a, b, ...)</c>: first non-null argument.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.Expressions.BuiltInFunctions.Round">
            <summary><c>round(n, d?)</c>: rounds half away from zero to <c>d</c> decimals (default 0).</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.Expressions.BuiltInFunctions.Abs">
            <summary><c>abs(n)</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.Expressions.BuiltInFunctions.Min">
            <summary><c>min(...)</c>: smallest non-null number (null when all are null).</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.Expressions.BuiltInFunctions.Max">
            <summary><c>max(...)</c>: largest non-null number (null when all are null).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.BuiltInFunctions.All">
            <summary>All built-ins.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Execution.Expressions.RuleValueType">
            <summary>Runtime type of a <see cref="T:Verdict.RuleEngine.Execution.Expressions.RuleValue"/>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.Expressions.RuleValueType.Null">
            <summary>JSON null / missing.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.Expressions.RuleValueType.String">
            <summary>String.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.Expressions.RuleValueType.Number">
            <summary>Decimal number.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.Expressions.RuleValueType.Bool">
            <summary>Boolean.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.Expressions.RuleValueType.Date">
            <summary>Date or date-time (UTC).</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.Expressions.RuleValueType.Array">
            <summary>Array.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.Expressions.RuleValueType.Object">
            <summary>Object.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Execution.Expressions.RuleValue">
            <summary>
            Immutable runtime value of the expression evaluator. Numbers are always <see cref="T:System.Decimal"/>; dates are
            <see cref="T:System.DateTimeOffset"/> in UTC. Conversion from JSON is lossless and never guesses (a JSON string stays a
            string even when it looks like a date; date-typed functions and comparisons parse on demand with invariant culture).
            </summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.Expressions.RuleValue.Null">
            <summary>The singleton null value.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.Expressions.RuleValue.True">
            <summary>Boolean true.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.Expressions.RuleValue.False">
            <summary>Boolean false.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.RuleValue.Type">
            <summary>Runtime type.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.RuleValue.IsNull">
            <summary>Whether this is the null value.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.RuleValue.FromString(System.String)">
            <summary>Creates a string value.</summary>
            <param name="value">Value.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.RuleValue.FromNumber(System.Decimal)">
            <summary>Creates a number value.</summary>
            <param name="value">Value.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.RuleValue.FromNumber(System.Nullable{System.Decimal})">
            <summary>Creates a number value.</summary>
            <param name="value">Value.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.RuleValue.FromBool(System.Boolean)">
            <summary>Creates a boolean value.</summary>
            <param name="value">Value.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.RuleValue.FromDate(System.DateTimeOffset)">
            <summary>Creates a date value (normalized to UTC).</summary>
            <param name="value">Value.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.RuleValue.FromArray(System.Collections.Generic.IReadOnlyList{Verdict.RuleEngine.Execution.Expressions.RuleValue})">
            <summary>Creates an array value.</summary>
            <param name="items">Items.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.RuleValue.FromJson(System.Text.Json.Nodes.JsonNode)">
            <summary>Converts a JSON node to a runtime value. Never throws for valid JSON.</summary>
            <param name="node">Node.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.RuleValue.ToJson">
            <summary>Converts the value back to a JSON node (dates become ISO-8601 strings).</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.RuleValue.ToDisplayString">
            <summary>Formats the value for human-readable trace text (strings quoted, dates ISO, numbers invariant).</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.RuleValue.TryGetDate(System.DateTimeOffset@)">
            <summary>Attempts to interpret the value as a date: dates pass through, strings are parsed with invariant culture.</summary>
            <param name="date">Parsed date.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.RuleValue.TryParseDate(System.String,System.DateTimeOffset@)">
            <summary>Parses an ISO-8601 date (<c>yyyy-MM-dd</c>) or date-time (round-trip) string; the result is UTC.</summary>
            <param name="text">Text.</param>
            <param name="date">Parsed date.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.RuleValue.FormatDate(System.DateTimeOffset)">
            <summary>Formats a date: <c>yyyy-MM-dd</c> when at midnight UTC, otherwise ISO-8601 with <c>Z</c>.</summary>
            <param name="value">Date (UTC).</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.RuleValue.ToSwitchKey">
            <summary>Invariant string form used by <c>switch</c> nodes to match case labels.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Execution.Expressions.NullValue">
            <summary>JSON null.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.NullValue.Type">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.NullValue.ToJson">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.NullValue.ToDisplayString">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Execution.Expressions.StringValue">
            <summary>String value.</summary>
            <param name="Value">Value.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.StringValue.#ctor(System.String)">
            <summary>String value.</summary>
            <param name="Value">Value.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.StringValue.Value">
            <summary>Value.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.StringValue.Type">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.StringValue.ToJson">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.StringValue.ToDisplayString">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.StringValue.ToSwitchKey">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Execution.Expressions.NumberValue">
            <summary>Decimal number value.</summary>
            <param name="Value">Value.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.NumberValue.#ctor(System.Decimal)">
            <summary>Decimal number value.</summary>
            <param name="Value">Value.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.NumberValue.Value">
            <summary>Value.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.NumberValue.Type">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.NumberValue.ToJson">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.NumberValue.ToDisplayString">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Execution.Expressions.BoolValue">
            <summary>Boolean value.</summary>
            <param name="Value">Value.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.BoolValue.#ctor(System.Boolean)">
            <summary>Boolean value.</summary>
            <param name="Value">Value.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.BoolValue.Value">
            <summary>Value.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.BoolValue.Type">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.BoolValue.ToJson">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.BoolValue.ToDisplayString">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Execution.Expressions.DateValue">
            <summary>Date/date-time value in UTC.</summary>
            <param name="Value">Value.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.DateValue.#ctor(System.DateTimeOffset)">
            <summary>Date/date-time value in UTC.</summary>
            <param name="Value">Value.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.DateValue.Value">
            <summary>Value.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.DateValue.Type">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.DateValue.ToJson">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.DateValue.ToDisplayString">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Execution.Expressions.ArrayValue">
            <summary>Array value.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.ArrayValue.#ctor(System.Collections.Generic.IReadOnlyList{Verdict.RuleEngine.Execution.Expressions.RuleValue})">
            <summary>Initializes an array value.</summary>
            <param name="items">Items.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.ArrayValue.Items">
            <summary>Items.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.ArrayValue.Type">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.ArrayValue.ToJson">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.ArrayValue.ToDisplayString">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.ArrayValue.Equals(Verdict.RuleEngine.Execution.Expressions.ArrayValue)">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.ArrayValue.GetHashCode">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Execution.Expressions.ObjectValue">
            <summary>Object value (opaque JSON object).</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.ObjectValue.#ctor(System.Text.Json.Nodes.JsonObject)">
            <summary>Initializes an object value.</summary>
            <param name="value">JSON object.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.ObjectValue.Value">
            <summary>Underlying JSON object.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.ObjectValue.Type">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.ObjectValue.ToJson">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.ObjectValue.ToDisplayString">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.ObjectValue.Equals(Verdict.RuleEngine.Execution.Expressions.ObjectValue)">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.ObjectValue.GetHashCode">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Execution.Expressions.TemplateRenderResult">
            <summary>Result of rendering a reason-text template.</summary>
            <param name="Text">Rendered text.</param>
            <param name="Warnings">Warnings produced for placeholders that could not be resolved.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.TemplateRenderResult.#ctor(System.String,System.Collections.Generic.IReadOnlyList{System.String})">
            <summary>Result of rendering a reason-text template.</summary>
            <param name="Text">Rendered text.</param>
            <param name="Warnings">Warnings produced for placeholders that could not be resolved.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.TemplateRenderResult.Text">
            <summary>Rendered text.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.Expressions.TemplateRenderResult.Warnings">
            <summary>Warnings produced for placeholders that could not be resolved.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Execution.Expressions.TemplateRenderer">
            <summary>
            Renders <c>reasonText</c> templates with <c>{expression}</c> interpolation, e.g.
            <c>"Passport expires in {days_until(passport.expiryDate)} days"</c>. Placeholders accept the text expression grammar of
            <see cref="T:Verdict.RuleEngine.Execution.Expressions.TemplateExpressionParser"/>. A failing placeholder renders as <c>⟨unavailable⟩</c> and produces a warning;
            rendering never throws. <c>{{</c> and <c>}}</c> render literal braces.
            </summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.Expressions.TemplateRenderer.Unavailable">
            <summary>Marker rendered for a placeholder that failed to evaluate.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.TemplateRenderer.#ctor(Verdict.RuleEngine.Execution.Expressions.ExpressionEvaluator)">
            <summary>Initializes the renderer.</summary>
            <param name="evaluator">Evaluator used for placeholders.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.TemplateRenderer.Render(System.String,Verdict.RuleEngine.Execution.Expressions.EvaluationScope,Verdict.RuleEngine.Execution.Expressions.IValueRedactor)">
            <summary>Renders a template.</summary>
            <param name="template">Template text (<see langword="null"/> renders as empty).</param>
            <param name="scope">Scope.</param>
            <param name="redactor">Optional redactor applied to field placeholders.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.TemplateRenderer.FormatPlain(Verdict.RuleEngine.Execution.Expressions.RuleValue)">
            <summary>Formats a value for inclusion in prose: strings unquoted, numbers invariant, dates ISO, null → <c>null</c>.</summary>
            <param name="value">Value.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Execution.Expressions.TemplateExpressionParser">
            <summary>
            Parses the compact text expression grammar used inside templates:
            <c>path.to.field</c>, <c>vars.x</c>, <c>accumulators.x</c>, <c>fn(arg, ...)</c>, numbers, <c>'strings'</c>/<c>"strings"</c>,
            <c>true</c>/<c>false</c>/<c>null</c>. Produces the same <see cref="T:Verdict.RuleEngine.Dsl.Expression"/> tree as the JSON form.
            </summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.Expressions.TemplateExpressionParser.Parse(System.String)">
            <summary>Parses text into an expression.</summary>
            <param name="text">Expression text.</param>
            <exception cref="T:System.FormatException">The text is not a valid template expression.</exception>
        </member>
        <member name="T:Verdict.RuleEngine.Execution.ProfileRedactor">
            <summary>
            Applies a <see cref="T:Verdict.RuleEngine.Abstractions.RedactionProfile"/> to trace values. Later rules take precedence over earlier ones.
            Field rules match scope paths exactly, by glob (<c>applicant.*</c>) or <c>*</c>; connector rules use the form
            <c>connector:{ref}:{param}</c> where <c>{ref}</c> and <c>{param}</c> may be <c>*</c>.
            </summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.ProfileRedactor.MaskText">
            <summary>Replacement text for <see cref="F:Verdict.RuleEngine.Abstractions.RedactionStrategy.Mask"/>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.ProfileRedactor.OmittedText">
            <summary>Replacement text for <see cref="F:Verdict.RuleEngine.Abstractions.RedactionStrategy.Omit"/>.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.ProfileRedactor.#ctor(Verdict.RuleEngine.Abstractions.RedactionProfile)">
            <summary>Initializes the redactor.</summary>
            <param name="profile">Profile.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.ProfileRedactor.Create(Verdict.RuleEngine.Abstractions.RedactionProfile)">
            <summary>Creates a redactor for a profile, returning <see cref="F:Verdict.RuleEngine.Execution.Expressions.NullValueRedactor.Instance"/> when the profile is empty.</summary>
            <param name="profile">Profile.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.ProfileRedactor.RedactField(System.String,Verdict.RuleEngine.Execution.Expressions.RuleValue)">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Execution.ProfileRedactor.RedactConnectorParameter(System.String,System.String,Verdict.RuleEngine.Execution.Expressions.RuleValue)">
            <inheritdoc />
        </member>
        <member name="M:Verdict.RuleEngine.Execution.ProfileRedactor.Matches(System.String,System.String)">
            <summary>Whether a rule path matches a scope path.</summary>
            <param name="rulePath">Rule path (exact, <c>prefix.*</c> or <c>*</c>).</param>
            <param name="path">Scope path.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.ProfileRedactor.Apply(Verdict.RuleEngine.Abstractions.RedactionStrategy,Verdict.RuleEngine.Execution.Expressions.RuleValue)">
            <summary>Applies a strategy to a value (null stays null: it carries no information).</summary>
            <param name="strategy">Strategy.</param>
            <param name="value">Value.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Execution.ISubRulesetResolver">
            <summary>Resolves sub-ruleset documents for <c>subRuleset</c> nodes, honouring the execution mode.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.ISubRulesetResolver.ResolveAsync(Verdict.RuleEngine.Dsl.RulesetRef,Verdict.RuleEngine.Abstractions.ExecutionMode,System.Threading.CancellationToken)">
            <summary>Returns the version record, or <see langword="null"/> when it does not exist or is not executable in <paramref name="mode"/>.</summary>
            <param name="ref">Reference.</param>
            <param name="mode">Execution mode.</param>
            <param name="ct">Cancellation token.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Execution.NullSubRulesetResolver">
            <summary>Resolver that knows no sub-rulesets.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.NullSubRulesetResolver.Instance">
            <summary>Shared instance.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.NullSubRulesetResolver.ResolveAsync(Verdict.RuleEngine.Dsl.RulesetRef,Verdict.RuleEngine.Abstractions.ExecutionMode,System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="T:Verdict.RuleEngine.Execution.ExecutionPlan">
            <summary>Everything the executor needs for one run.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.ExecutionPlan.Document">
            <summary>Document to execute.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.ExecutionPlan.Version">
            <summary>Version number reported in the result.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.ExecutionPlan.Input">
            <summary>Input payload.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.ExecutionPlan.Mode">
            <summary>Execution mode.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.ExecutionPlan.CorrelationId">
            <summary>Correlation id.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.ExecutionPlan.Redaction">
            <summary>Redaction profile.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.ExecutionPlan.SubRulesets">
            <summary>Sub-ruleset resolver.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.ExecutionPlan.Contract">
            <summary>Root input contract, if this low-level plan provides one. The engine facade always supplies it.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.ExecutionPlan.Contracts">
            <summary>Contract lookup for validating mapped child inputs. Supplied by the engine facade.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Execution.ExecutionPlan.CaptureSnapshots">
            <summary>Capture complete root and invoked child graphs. Enabled by the engine facade; optional for low-level callers.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Execution.ExecutionReasonCodes">
            <summary>Reason codes produced by the engine itself (as opposed to <c>outcome</c> nodes).</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.ExecutionReasonCodes.EvaluationError">
            <summary>An expression failed to evaluate (type error, division by zero…).</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.ExecutionReasonCodes.NodeBudgetExceeded">
            <summary>The node budget was exhausted.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.ExecutionReasonCodes.ConnectorError">
            <summary>A connector invocation failed.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.ExecutionReasonCodes.ConnectorFlag">
            <summary>A connector error mapping requested a forced flag.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.ExecutionReasonCodes.SubRulesetError">
            <summary>A sub-ruleset could not be resolved.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.ExecutionReasonCodes.SubRulesetHardFail">
            <summary>A sub-ruleset hard-failed; the failure propagates.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.ExecutionReasonCodes.SubRulesetDepthExceeded">
            <summary>Sub-ruleset nesting exceeded the configured depth.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.ExecutionReasonCodes.UnknownNode">
            <summary>An edge pointed to a node that does not exist.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Execution.ExecutionReasonCodes.NoOutcome">
            <summary>Execution finished without any outcome firing.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Execution.RulesetExecutor">
            <summary>
            Deterministic rule-graph executor. Pure function of (document, input, connector results, time provider):
            the same inputs and connector responses always produce the same result and trace.
            Never throws for rule-level problems; every failure becomes a <c>FLAG</c> outcome with an explanatory trace step.
            Thread-safe; one instance serves concurrent executions.
            </summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.RulesetExecutor.#ctor(Verdict.RuleEngine.Execution.Expressions.ExpressionEvaluator,Verdict.RuleEngine.Connectors.IConnectorRegistry,Verdict.RuleEngine.Abstractions.RuleEngineOptions,Microsoft.Extensions.Logging.ILogger{Verdict.RuleEngine.Execution.RulesetExecutor})">
            <summary>Initializes the executor.</summary>
            <param name="evaluator">Expression evaluator (carries the time provider and function registry).</param>
            <param name="connectors">Connector registry (a registry that rejects every resolution when null).</param>
            <param name="options">Options.</param>
            <param name="logger">Logger.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.RulesetExecutor.ExecuteAsync(Verdict.RuleEngine.Execution.ExecutionPlan,System.Threading.CancellationToken)">
            <summary>Executes a plan.</summary>
            <param name="plan">Plan.</param>
            <param name="ct">Cancellation token (cancellation is the only exception that escapes).</param>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.RulesetExecutor.Aggregate(System.Collections.Generic.IReadOnlyList{Verdict.RuleEngine.Abstractions.FiredOutcome})">
            <summary>Aggregates fired outcomes: FAIL if any FAIL, else FLAG if any FLAG, else PASS; hard-fail when any hard FAIL fired.</summary>
            <param name="fired">Fired outcomes.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Execution.RulesetExecutor.RunControl">
            <summary>
            State shared by a run and every nested sub-ruleset run: the node budget and the abort flag. Any engine-level
            error (evaluation error, unknown node, sub-ruleset resolution, budget) aborts the whole cycle as a hard FAIL.
            </summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.RulesetExecutor.RunControl.#ctor(System.Int32)">
            <summary>
            State shared by a run and every nested sub-ruleset run: the node budget and the abort flag. Any engine-level
            error (evaluation error, unknown node, sub-ruleset resolution, budget) aborts the whole cycle as a hard FAIL.
            </summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.RulesetExecutor.Run.RedactRequestValue(System.String,System.String,Verdict.RuleEngine.Dsl.Expression,Verdict.RuleEngine.Execution.Expressions.RuleValue)">
            <summary>
            A connector request value is redacted by the connector-parameter rules and, because it usually is a field
            value, by the field rules as well: a plain field reference inherits its field's redaction; a value derived
            from any redacted field is masked outright.
            </summary>
        </member>
        <member name="M:Verdict.RuleEngine.Execution.RulesetExecutor.Run.Abort(System.String,System.String,System.String)">
            <summary>
            Engine-level errors fail the whole cycle: a hard FAIL outcome fires, and no further node — in this run, in
            any parallel branch, or in a parent run — is evaluated. The engine never silently passes and never throws.
            </summary>
        </member>
        <member name="T:Verdict.RuleEngine.Validation.GraphAnalysis">
            <summary>Structural analysis of a rule graph.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Validation.GraphAnalysis.NodesById">
            <summary>Nodes by id (first occurrence wins on duplicates).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Validation.GraphAnalysis.Start">
            <summary>The single start node, or <see langword="null"/> when there is not exactly one.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Validation.GraphAnalysis.Reachable">
            <summary>Ids reachable from start.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Validation.GraphAnalysis.HasCycle">
            <summary>Whether a cycle exists in the reachable subgraph.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Validation.GraphAnalysis.TopologicalOrder">
            <summary>Reachable nodes in topological order (empty when a cycle exists or there is no start).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Validation.GraphAnalysis.Predecessors">
            <summary>Predecessor ids per node (only edges whose target exists).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Validation.GraphAnalysis.IsStructurallySound">
            <summary>Whether the graph is structurally sound (exactly one start, no dangling edges, no cycle).</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Validation.GraphAnalyzer">
            <summary>Structural checks: single start, unique ids, dangling references, reachability, cycles, termination.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Validation.GraphAnalyzer.Analyze(Verdict.RuleEngine.Dsl.RulesetDocument,System.Collections.Generic.ICollection{Verdict.RuleEngine.Abstractions.ValidationFinding})">
            <summary>Analyzes a document, appending findings.</summary>
            <param name="document">Document.</param>
            <param name="findings">Findings sink.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Validation.InputValidationFinding">
            <summary>A payload error, without the supplied value (which may be sensitive).</summary>
            <param name="Code">Stable error code.</param>
            <param name="Path">Exact contract field path.</param>
            <param name="Message">Actionable explanation.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Validation.InputValidationFinding.#ctor(System.String,System.String,System.String)">
            <summary>A payload error, without the supplied value (which may be sensitive).</summary>
            <param name="Code">Stable error code.</param>
            <param name="Path">Exact contract field path.</param>
            <param name="Message">Actionable explanation.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Validation.InputValidationFinding.Code">
            <summary>Stable error code.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Validation.InputValidationFinding.Path">
            <summary>Exact contract field path.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Validation.InputValidationFinding.Message">
            <summary>Actionable explanation.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Validation.InputValidationException">
            <summary>Execution was rejected before traversing a decision because its input contract was not satisfied.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Validation.InputValidationException.#ctor(System.String,System.Collections.Generic.IReadOnlyList{Verdict.RuleEngine.Validation.InputValidationFinding})">
            <summary>Initializes an input validation failure.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Validation.InputValidationException.ContractRef">
            <summary>Contract checked.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Validation.InputValidationException.Findings">
            <summary>All input findings; values are never included.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Validation.InputContractValidator">
            <summary>Checks actual nested JSON against every declared contract field, without coercing or modifying input.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Validation.InputContractValidator.Validate(Verdict.RuleEngine.Abstractions.ContractSchema,System.Text.Json.Nodes.JsonObject)">
            <summary>Returns all required, shape, type, date, and closed-value-set violations. Undeclared extra fields are allowed.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Validation.InputContractValidator.EnsureValid(Verdict.RuleEngine.Abstractions.ContractSchema,System.Text.Json.Nodes.JsonObject)">
            <summary>Throws when the payload does not satisfy the contract.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Validation.ValidationContext">
            <summary>
            Pre-resolved referential data for validation: connector versions, sub-ruleset versions (recursively) and their
            contracts. Build with <see cref="M:Verdict.RuleEngine.Validation.RulesetValidator.BuildContextAsync(Verdict.RuleEngine.Dsl.RulesetDocument,Verdict.RuleEngine.Connectors.IConnectorDefinitionStore,Verdict.RuleEngine.Abstractions.IRulesetStore,Verdict.RuleEngine.Abstractions.IContractSchemaStore,System.Int32,System.Threading.CancellationToken)"/> or supply manually in tests.
            </summary>
        </member>
        <member name="P:Verdict.RuleEngine.Validation.ValidationContext.Local">
            <summary>Context that performs local checks only (referential checks are reported as skipped).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Validation.ValidationContext.ReferentialChecks">
            <summary>Whether referential checks are performed.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Validation.ValidationContext.Connectors">
            <summary>Resolved connector versions (absent key = not found).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Validation.ValidationContext.SubRulesets">
            <summary>Resolved sub-ruleset versions, including nested ones (absent key = not found).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Validation.ValidationContext.Contracts">
            <summary>Resolved contracts of sub-rulesets (absent key = not found).</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Validation.RulesetValidator">
            <summary>
            Static validator (§7). Returns every finding it can discover — never fails fast. Structural problems are
            reported first; scope-flow and typing still run over whatever structure is usable.
            </summary>
        </member>
        <member name="M:Verdict.RuleEngine.Validation.RulesetValidator.#ctor(Verdict.RuleEngine.Execution.Expressions.FunctionRegistry,Verdict.RuleEngine.Abstractions.RuleEngineOptions)">
            <summary>Initializes the validator.</summary>
            <param name="functions">Function registry (defaults to built-ins).</param>
            <param name="options">Engine options (depth limit).</param>
        </member>
        <member name="M:Verdict.RuleEngine.Validation.RulesetValidator.Validate(Verdict.RuleEngine.Dsl.RulesetDocument,Verdict.RuleEngine.Abstractions.ContractSchema,Verdict.RuleEngine.Validation.ValidationContext)">
            <summary>Validates a document against a contract using a pre-resolved context (or local checks only when <paramref name="context"/> is null).</summary>
            <param name="document">Document.</param>
            <param name="contract">Contract.</param>
            <param name="context">Referential context.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Validation.RulesetValidator.ValidateAsync(Verdict.RuleEngine.Dsl.RulesetDocument,Verdict.RuleEngine.Abstractions.ContractSchema,Verdict.RuleEngine.Connectors.IConnectorDefinitionStore,Verdict.RuleEngine.Abstractions.IRulesetStore,Verdict.RuleEngine.Abstractions.IContractSchemaStore,System.Threading.CancellationToken)">
            <summary>Resolves connectors, sub-rulesets and contracts from the stores, then validates fully.</summary>
            <param name="document">Document.</param>
            <param name="contract">Contract.</param>
            <param name="connectors">Connector store.</param>
            <param name="rulesets">Ruleset store.</param>
            <param name="contracts">Contract store.</param>
            <param name="ct">Cancellation token.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Validation.RulesetValidator.BuildContextAsync(Verdict.RuleEngine.Dsl.RulesetDocument,Verdict.RuleEngine.Connectors.IConnectorDefinitionStore,Verdict.RuleEngine.Abstractions.IRulesetStore,Verdict.RuleEngine.Abstractions.IContractSchemaStore,System.Int32,System.Threading.CancellationToken)">
            <summary>Resolves everything a full validation needs (sub-rulesets are followed up to <paramref name="maxDepth"/> + 1 levels).</summary>
            <param name="document">Root document.</param>
            <param name="connectors">Connector store.</param>
            <param name="rulesets">Ruleset store.</param>
            <param name="contracts">Contract store.</param>
            <param name="maxDepth">Maximum sub-ruleset depth.</param>
            <param name="ct">Cancellation token.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Validation.RulesetValidator.ScopeState">
            <summary>Definitely-defined scope entering a node.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Validation.StaticType">
            <summary>Statically inferred type of an expression.</summary>
            <param name="Type">Runtime type, or <see langword="null"/> when unknown (any).</param>
            <param name="Nullable">Whether the value may be null at runtime.</param>
            <param name="DateLike">For string literals: whether the text parses as an ISO date (so it may be compared with dates).</param>
            <param name="AllowedValues">Closed value set from the contract, when known.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Validation.StaticType.#ctor(System.Nullable{Verdict.RuleEngine.Execution.Expressions.RuleValueType},System.Boolean,System.Boolean,System.String[])">
            <summary>Statically inferred type of an expression.</summary>
            <param name="Type">Runtime type, or <see langword="null"/> when unknown (any).</param>
            <param name="Nullable">Whether the value may be null at runtime.</param>
            <param name="DateLike">For string literals: whether the text parses as an ISO date (so it may be compared with dates).</param>
            <param name="AllowedValues">Closed value set from the contract, when known.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Validation.StaticType.Type">
            <summary>Runtime type, or <see langword="null"/> when unknown (any).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Validation.StaticType.Nullable">
            <summary>Whether the value may be null at runtime.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Validation.StaticType.DateLike">
            <summary>For string literals: whether the text parses as an ISO date (so it may be compared with dates).</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Validation.StaticType.AllowedValues">
            <summary>Closed value set from the contract, when known.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.StaticType.Unknown">
            <summary>Unknown / any type.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.StaticType.NullLiteral">
            <summary>The JSON <c>null</c> literal.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Validation.StaticType.Known(Verdict.RuleEngine.Execution.Expressions.RuleValueType,System.Boolean)">
            <summary>Creates a known type.</summary>
            <param name="type">Type.</param>
            <param name="nullable">Nullable.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Validation.StaticType.Of(Verdict.RuleEngine.Abstractions.FieldType,System.Boolean,System.String[])">
            <summary>Creates a type from a contract field type.</summary>
            <param name="type">Field type.</param>
            <param name="nullable">Nullable.</param>
            <param name="allowedValues">Allowed values.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Validation.StaticType.IsKnown">
            <summary>Whether the type is known.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Validation.StaticType.IsNullLiteral">
            <summary>Whether this is the null literal.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Validation.StaticType.IsDateLike">
            <summary>Whether the value can participate in date comparisons (a date, or a date-like string literal).</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Validation.StaticType.Describe">
            <summary>Human-readable description.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Validation.TypeResolution">
            <summary>Result of resolving a scope path during validation.</summary>
            <param name="Found">Whether the path resolved.</param>
            <param name="Type">Resolved type.</param>
            <param name="Code">Validation code when not found.</param>
            <param name="Message">Message when not found.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Validation.TypeResolution.#ctor(System.Boolean,Verdict.RuleEngine.Validation.StaticType,System.String,System.String)">
            <summary>Result of resolving a scope path during validation.</summary>
            <param name="Found">Whether the path resolved.</param>
            <param name="Type">Resolved type.</param>
            <param name="Code">Validation code when not found.</param>
            <param name="Message">Message when not found.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Validation.TypeResolution.Found">
            <summary>Whether the path resolved.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Validation.TypeResolution.Type">
            <summary>Resolved type.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Validation.TypeResolution.Code">
            <summary>Validation code when not found.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Validation.TypeResolution.Message">
            <summary>Message when not found.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Validation.TypeResolution.Ok(Verdict.RuleEngine.Validation.StaticType)">
            <summary>Success.</summary>
            <param name="type">Type.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Validation.TypeResolution.Fail(System.String,System.String)">
            <summary>Failure.</summary>
            <param name="code">Code.</param>
            <param name="message">Message.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Validation.ITypeScope">
            <summary>Resolves the static type of a scope path (contract fields, variables, connector outputs).</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Validation.ITypeScope.Resolve(System.String)">
            <summary>Resolves a dotted path.</summary>
            <param name="path">Path.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Validation.TypeChecker">
            <summary>
            Static type checker for expression trees. Mirrors the runtime semantics of <see cref="T:Verdict.RuleEngine.Execution.Expressions.ExpressionEvaluator"/>:
            whatever the evaluator would reject with a type error is reported here as <c>RS030</c>-series findings.
            </summary>
        </member>
        <member name="M:Verdict.RuleEngine.Validation.TypeChecker.#ctor(Verdict.RuleEngine.Execution.Expressions.FunctionRegistry)">
            <summary>Initializes the checker.</summary>
            <param name="functions">Function registry (defaults to built-ins).</param>
        </member>
        <member name="M:Verdict.RuleEngine.Validation.TypeChecker.Check(Verdict.RuleEngine.Dsl.Expression,Verdict.RuleEngine.Validation.ITypeScope,System.String,System.Collections.Generic.ICollection{Verdict.RuleEngine.Abstractions.ValidationFinding})">
            <summary>Checks an expression, appending findings, and returns its inferred type.</summary>
            <param name="expression">Expression.</param>
            <param name="scope">Scope resolver.</param>
            <param name="nodeId">Node id for findings.</param>
            <param name="findings">Findings sink.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Validation.TypeChecker.IsAssignable(Verdict.RuleEngine.Validation.StaticType,Verdict.RuleEngine.Abstractions.FieldType)">
            <summary>Whether a value of the inferred type may be passed where <paramref name="expected"/> is declared.</summary>
            <param name="actual">Inferred type.</param>
            <param name="expected">Declared type.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Validation.TypeChecker.LiteralType(System.Text.Json.Nodes.JsonNode)">
            <summary>Infers the static type of a JSON literal.</summary>
            <param name="value">Literal.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Validation.ValidationCodes">
            <summary>Stable validation codes. Errors block publishing; warnings do not.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.InvalidShape">
            <summary>Document shape problem (empty id, unparsable contract reference…).</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.StartNodeCount">
            <summary>Not exactly one <c>start</c> node.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.DuplicateNodeId">
            <summary>Duplicate node id.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.DanglingReference">
            <summary>Edge references a node id that does not exist.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.UnreachableNode">
            <summary>Node is not reachable from <c>start</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.Cycle">
            <summary>The graph contains a cycle.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.PathDoesNotTerminate">
            <summary>A path ends in a node that is not an <c>outcome</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.UnknownField">
            <summary>Field / variable reference does not exist in the contract or the scope reaching the node.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.UnknownStartInput">
            <summary><c>start.inputs</c> entry matches no contract field.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.TypeMismatch">
            <summary>Operator applied to incompatible operand types.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.MembershipRightNotArray">
            <summary>Right operand of <c>in</c>/<c>not_in</c> is not an array.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.UnknownFunction">
            <summary>Unknown function.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.FunctionArity">
            <summary>Wrong number of function arguments.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.FunctionArgumentType">
            <summary>Function argument has an incompatible type.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.InvalidRegex">
            <summary>Regex pattern does not compile (or is unsupported by the non-backtracking engine).</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.ConditionNotBoolean">
            <summary><c>condition.expr</c> is not boolean.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.ScoreDeltaNotNumeric">
            <summary><c>score.delta</c> is not numeric.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.SwitchFieldNotScalar">
            <summary><c>switch.field</c> is not a scalar.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.ConnectorRefUnparsable">
            <summary><c>connectorRef</c> is not of the form <c>id@vN</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.ConnectorNotFound">
            <summary>Connector version does not exist.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.ConnectorNotPublished">
            <summary>Connector version is not published.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.ConnectorOperationNotFound">
            <summary>Operation does not exist on the connector.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.ConnectorParameterMissing">
            <summary>Required connector parameter is not mapped.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.ConnectorParameterType">
            <summary>Mapped parameter has an incompatible type.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.ConnectorParameterUnknown">
            <summary><c>inputMap</c> maps a parameter the operation does not declare.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.UnknownOutputField">
            <summary>Reference to an output field the connector / sub-ruleset does not declare.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.SubRulesetRefUnparsable">
            <summary><c>rulesetRef</c> is not of the form <c>id@vN</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.SubRulesetNotFound">
            <summary>Sub-ruleset version does not exist.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.SubRulesetNotPublished">
            <summary>Sub-ruleset version is not published.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.SubRulesetDepthExceeded">
            <summary>Composition depth exceeds <c>MaxSubRulesetDepth</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.SubRulesetRecursion">
            <summary>Sub-ruleset composition is recursive.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.SubRulesetInputType">
            <summary>Sub-ruleset input mapping does not match the target contract.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.UnusedVariable">
            <summary><c>setVariable</c> never referenced.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.UnreachableSwitchCase">
            <summary><c>switch</c> case value can never match (not in the field's allowed values).</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.HardOnNonFail">
            <summary><c>hard=true</c> on a non-FAIL outcome has no effect.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.CoercibleComparison">
            <summary>Comparison relies on a runtime coercion (e.g. date vs. string field).</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.OnErrorUnused">
            <summary><c>onError</c> is declared but never taken for the configured <c>onErrorBehavior</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.ScopeShadowing">
            <summary><c>outputAs</c> / variable name shadows a contract root.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.TemplatePlaceholderInvalid">
            <summary>A <c>reasonText</c> placeholder cannot be parsed or type-checked (renders as unavailable at runtime).</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.LiteralNotAllowed">
            <summary>Literal compared against a field with a closed set of allowed values is not one of them.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.DeprecatedReference">
            <summary>Connector or sub-ruleset version is deprecated.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.FieldNotDeclaredAsInput">
            <summary>Field is used but not declared in <c>start.inputs</c>.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Validation.ValidationCodes.ReferentialChecksSkipped">
            <summary>Referential checks (connectors, sub-rulesets) were skipped because no resolver context was supplied.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Validation.ValidationCodes.All">
            <summary>All codes with descriptions.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Validation.ValidationCodes.Describe(System.String)">
            <summary>Description of a code.</summary>
            <param name="code">Code.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Versioning.ImmutableVersionModifiedException">
            <summary>Thrown when a published (or later) version's content is modified: published versions are immutable.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Versioning.ImmutableVersionModifiedException.#ctor">
            <summary>Initializes the exception.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Versioning.ImmutableVersionModifiedException.#ctor(System.String)">
            <summary>Initializes the exception.</summary>
            <param name="message">Message.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Versioning.ImmutableVersionModifiedException.#ctor(System.String,System.Exception)">
            <summary>Initializes the exception.</summary>
            <param name="message">Message.</param>
            <param name="innerException">Inner exception.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Versioning.AppendOnlyViolationException">
            <summary>Thrown when an append-only table (execution traces, audit log) receives an update or delete.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Versioning.AppendOnlyViolationException.#ctor">
            <summary>Initializes the exception.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Versioning.AppendOnlyViolationException.#ctor(System.String)">
            <summary>Initializes the exception.</summary>
            <param name="message">Message.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Versioning.AppendOnlyViolationException.#ctor(System.String,System.Exception)">
            <summary>Initializes the exception.</summary>
            <param name="message">Message.</param>
            <param name="innerException">Inner exception.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Versioning.FourEyesViolationException">
            <summary>Thrown when the publishing approver is the draft author while four-eyes approval is required.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Versioning.FourEyesViolationException.#ctor">
            <summary>Initializes the exception.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Versioning.FourEyesViolationException.#ctor(System.String)">
            <summary>Initializes the exception.</summary>
            <param name="message">Message.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Versioning.FourEyesViolationException.#ctor(System.String,System.Exception)">
            <summary>Initializes the exception.</summary>
            <param name="message">Message.</param>
            <param name="innerException">Inner exception.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Versioning.RulesetValidationFailedException">
            <summary>Thrown when a transition to Validated/Published is refused because static validation reported errors.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Versioning.RulesetValidationFailedException.#ctor">
            <summary>Initializes the exception.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Versioning.RulesetValidationFailedException.#ctor(System.String)">
            <summary>Initializes the exception.</summary>
            <param name="message">Message.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Versioning.RulesetValidationFailedException.#ctor(System.String,System.Exception)">
            <summary>Initializes the exception.</summary>
            <param name="message">Message.</param>
            <param name="innerException">Inner exception.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Versioning.RulesetValidationFailedException.#ctor(Verdict.RuleEngine.Abstractions.ValidationReport)">
            <summary>Initializes the exception with the report.</summary>
            <param name="report">Validation report.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Versioning.RulesetValidationFailedException.Report">
            <summary>The report.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Versioning.ConcurrencyConflictException">
            <summary>Thrown when a concurrent writer changed the same version row (optimistic concurrency).</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Versioning.ConcurrencyConflictException.#ctor">
            <summary>Initializes the exception.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Versioning.ConcurrencyConflictException.#ctor(System.String)">
            <summary>Initializes the exception.</summary>
            <param name="message">Message.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Versioning.ConcurrencyConflictException.#ctor(System.String,System.Exception)">
            <summary>Initializes the exception.</summary>
            <param name="message">Message.</param>
            <param name="innerException">Inner exception.</param>
        </member>
        <member name="T:Verdict.RuleEngine.Versioning.RulesetState">
            <summary>
            Lifecycle state of a ruleset version (also used by connector definition versions, whose state machine is identical).
            Versions in <see cref="F:Verdict.RuleEngine.Versioning.RulesetState.Published"/> or later states are immutable.
            </summary>
        </member>
        <member name="F:Verdict.RuleEngine.Versioning.RulesetState.Draft">
            <summary>Editable working copy.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Versioning.RulesetState.Validated">
            <summary>Passed static validation; still editable (editing returns it to <see cref="F:Verdict.RuleEngine.Versioning.RulesetState.Draft"/>).</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Versioning.RulesetState.Published">
            <summary>Live and immutable.</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Versioning.RulesetState.Deprecated">
            <summary>Superseded; still resolvable by pinned version but not as "latest published".</summary>
        </member>
        <member name="F:Verdict.RuleEngine.Versioning.RulesetState.Archived">
            <summary>Retired; not resolvable for execution.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Versioning.InvalidStateTransitionException">
            <summary>Thrown when an invalid lifecycle transition is requested.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Versioning.InvalidStateTransitionException.#ctor">
            <summary>Initializes the exception.</summary>
        </member>
        <member name="M:Verdict.RuleEngine.Versioning.InvalidStateTransitionException.#ctor(System.String)">
            <summary>Initializes the exception.</summary>
            <param name="message">Message.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Versioning.InvalidStateTransitionException.#ctor(System.String,System.Exception)">
            <summary>Initializes the exception.</summary>
            <param name="message">Message.</param>
            <param name="innerException">Inner exception.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Versioning.InvalidStateTransitionException.#ctor(Verdict.RuleEngine.Versioning.RulesetState,Verdict.RuleEngine.Versioning.RulesetState)">
            <summary>Initializes the exception for a specific transition.</summary>
            <param name="from">Source state.</param>
            <param name="to">Target state.</param>
        </member>
        <member name="P:Verdict.RuleEngine.Versioning.InvalidStateTransitionException.From">
            <summary>Source state.</summary>
        </member>
        <member name="P:Verdict.RuleEngine.Versioning.InvalidStateTransitionException.To">
            <summary>Target state.</summary>
        </member>
        <member name="T:Verdict.RuleEngine.Versioning.RulesetStateMachine">
            <summary>
            The lifecycle state machine: <c>Draft → Validated → Published → Deprecated → Archived</c>, plus
            <c>Validated → Draft</c> (edit after validation) and <c>Draft → Archived</c> (discard).
            Re-publishing content is never a transition: it creates a new version row.
            </summary>
        </member>
        <member name="M:Verdict.RuleEngine.Versioning.RulesetStateMachine.AllowedTransitions(Verdict.RuleEngine.Versioning.RulesetState)">
            <summary>Allowed target states from a given state.</summary>
            <param name="from">Source state.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Versioning.RulesetStateMachine.CanTransition(Verdict.RuleEngine.Versioning.RulesetState,Verdict.RuleEngine.Versioning.RulesetState)">
            <summary>Whether a transition is allowed.</summary>
            <param name="from">Source state.</param>
            <param name="to">Target state.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Versioning.RulesetStateMachine.EnsureTransition(Verdict.RuleEngine.Versioning.RulesetState,Verdict.RuleEngine.Versioning.RulesetState)">
            <summary>Throws when the transition is not allowed.</summary>
            <param name="from">Source state.</param>
            <param name="to">Target state.</param>
            <exception cref="T:Verdict.RuleEngine.Versioning.InvalidStateTransitionException">Transition not allowed.</exception>
        </member>
        <member name="M:Verdict.RuleEngine.Versioning.RulesetStateMachine.IsImmutable(Verdict.RuleEngine.Versioning.RulesetState)">
            <summary>Whether a version in this state is immutable (content may no longer change).</summary>
            <param name="state">State.</param>
        </member>
        <member name="M:Verdict.RuleEngine.Versioning.RulesetStateMachine.IsExecutable(Verdict.RuleEngine.Versioning.RulesetState)">
            <summary>Whether a version in this state can be executed in production (<see cref="F:Verdict.RuleEngine.Versioning.RulesetState.Published"/> or <see cref="F:Verdict.RuleEngine.Versioning.RulesetState.Deprecated"/> when pinned).</summary>
            <param name="state">State.</param>
        </member>
    </members>
</doc>
