Restructure solution layout by module
Some checks failed
Docs CI / lint-and-preview (push) Has been cancelled

This commit is contained in:
root
2025-10-28 15:10:40 +02:00
parent 4e3e575db5
commit 68da90a11a
4103 changed files with 192899 additions and 187024 deletions

View File

@@ -1,422 +1,422 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>StellaOps.Auth.Abstractions</name>
</assembly>
<members>
<member name="T:StellaOps.Auth.AuthorityTelemetry">
<summary>
Canonical telemetry metadata for the StellaOps Authority stack.
</summary>
</member>
<member name="F:StellaOps.Auth.AuthorityTelemetry.ServiceName">
<summary>
service.name resource attribute recorded by Authority components.
</summary>
</member>
<member name="F:StellaOps.Auth.AuthorityTelemetry.ServiceNamespace">
<summary>
service.namespace resource attribute aligning Authority with other StellaOps services.
</summary>
</member>
<member name="F:StellaOps.Auth.AuthorityTelemetry.ActivitySourceName">
<summary>
Activity source identifier used by Authority instrumentation.
</summary>
</member>
<member name="F:StellaOps.Auth.AuthorityTelemetry.MeterName">
<summary>
Meter name used by Authority instrumentation.
</summary>
</member>
<member name="M:StellaOps.Auth.AuthorityTelemetry.BuildDefaultResourceAttributes(System.Reflection.Assembly)">
<summary>
Builds the default set of resource attributes (service name/namespace/version).
</summary>
<param name="assembly">Optional assembly used to resolve the service version.</param>
</member>
<member name="M:StellaOps.Auth.AuthorityTelemetry.ResolveServiceVersion(System.Reflection.Assembly)">
<summary>
Resolves the service version string from the provided assembly (defaults to the Authority telemetry assembly).
</summary>
</member>
<member name="T:StellaOps.Auth.Abstractions.NetworkMask">
<summary>
Represents an IP network expressed in CIDR notation.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.NetworkMask.#ctor(System.Net.IPAddress,System.Int32)">
<summary>
Initialises a new <see cref="T:StellaOps.Auth.Abstractions.NetworkMask"/>.
</summary>
<param name="network">Canonical network address with host bits zeroed.</param>
<param name="prefixLength">Prefix length (0-32 for IPv4, 0-128 for IPv6).</param>
</member>
<member name="P:StellaOps.Auth.Abstractions.NetworkMask.Network">
<summary>
Canonical network address with host bits zeroed.
</summary>
</member>
<member name="P:StellaOps.Auth.Abstractions.NetworkMask.PrefixLength">
<summary>
Prefix length.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.NetworkMask.Parse(System.String)">
<summary>
Attempts to parse the supplied value as CIDR notation or a single IP address.
</summary>
<exception cref="T:System.FormatException">Thrown when the input is not recognised.</exception>
</member>
<member name="M:StellaOps.Auth.Abstractions.NetworkMask.TryParse(System.String,StellaOps.Auth.Abstractions.NetworkMask@)">
<summary>
Attempts to parse the supplied value as CIDR notation or a single IP address.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.NetworkMask.Contains(System.Net.IPAddress)">
<summary>
Determines whether the provided address belongs to this network.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.NetworkMask.ToString">
<inheritdoc />
</member>
<member name="T:StellaOps.Auth.Abstractions.NetworkMaskMatcher">
<summary>
Evaluates remote addresses against configured network masks.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.NetworkMaskMatcher.#ctor(System.Collections.Generic.IEnumerable{System.String})">
<summary>
Creates a matcher from raw CIDR strings.
</summary>
<param name="values">Sequence of CIDR entries or IP addresses.</param>
<exception cref="T:System.FormatException">Thrown when a value cannot be parsed.</exception>
</member>
<member name="M:StellaOps.Auth.Abstractions.NetworkMaskMatcher.#ctor(System.Collections.Generic.IEnumerable{StellaOps.Auth.Abstractions.NetworkMask})">
<summary>
Creates a matcher from already parsed masks.
</summary>
<param name="masks">Sequence of network masks.</param>
</member>
<member name="P:StellaOps.Auth.Abstractions.NetworkMaskMatcher.AllowAll">
<summary>
Gets a matcher that allows every address.
</summary>
</member>
<member name="P:StellaOps.Auth.Abstractions.NetworkMaskMatcher.DenyAll">
<summary>
Gets a matcher that denies every address (no masks configured).
</summary>
</member>
<member name="P:StellaOps.Auth.Abstractions.NetworkMaskMatcher.IsEmpty">
<summary>
Indicates whether this matcher has no masks configured and does not allow all.
</summary>
</member>
<member name="P:StellaOps.Auth.Abstractions.NetworkMaskMatcher.Masks">
<summary>
Returns the configured masks.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.NetworkMaskMatcher.IsAllowed(System.Net.IPAddress)">
<summary>
Checks whether the provided address matches any of the configured masks.
</summary>
<param name="address">Remote address to test.</param>
<returns><c>true</c> when the address is allowed.</returns>
</member>
<member name="T:StellaOps.Auth.Abstractions.StellaOpsAuthenticationDefaults">
<summary>
Default authentication constants used by StellaOps resource servers and clients.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsAuthenticationDefaults.AuthenticationScheme">
<summary>
Default authentication scheme for StellaOps bearer tokens.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsAuthenticationDefaults.AuthenticationType">
<summary>
Logical authentication type attached to <see cref="T:System.Security.Claims.ClaimsIdentity"/>.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsAuthenticationDefaults.PolicyPrefix">
<summary>
Policy prefix applied to named authorization policies.
</summary>
</member>
<member name="T:StellaOps.Auth.Abstractions.StellaOpsClaimTypes">
<summary>
Canonical claim type identifiers used across StellaOps services.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsClaimTypes.Subject">
<summary>
Subject identifier claim (maps to <c>sub</c> in JWTs).
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsClaimTypes.Tenant">
<summary>
StellaOps tenant identifier claim (multi-tenant deployments).
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsClaimTypes.ClientId">
<summary>
OAuth2/OIDC client identifier claim (maps to <c>client_id</c>).
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsClaimTypes.TokenId">
<summary>
Unique token identifier claim (maps to <c>jti</c>).
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsClaimTypes.AuthenticationMethod">
<summary>
Authentication method reference claim (<c>amr</c>).
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsClaimTypes.Scope">
<summary>
Space separated scope list (<c>scope</c>).
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsClaimTypes.ScopeItem">
<summary>
Individual scope items (<c>scp</c>).
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsClaimTypes.Audience">
<summary>
OAuth2 resource audiences (<c>aud</c>).
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsClaimTypes.IdentityProvider">
<summary>
Identity provider hint for downstream services.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsClaimTypes.SessionId">
<summary>
Session identifier claim (<c>sid</c>).
</summary>
</member>
<member name="T:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder">
<summary>
Fluent helper used to construct <see cref="T:System.Security.Claims.ClaimsPrincipal"/> instances that follow StellaOps conventions.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithSubject(System.String)">
<summary>
Adds or replaces the canonical subject identifier.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithClientId(System.String)">
<summary>
Adds or replaces the canonical client identifier.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithTenant(System.String)">
<summary>
Adds or replaces the tenant identifier claim.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithName(System.String)">
<summary>
Adds or replaces the user display name claim.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithIdentityProvider(System.String)">
<summary>
Adds or replaces the identity provider claim.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithSessionId(System.String)">
<summary>
Adds or replaces the session identifier claim.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithTokenId(System.String)">
<summary>
Adds or replaces the token identifier claim.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithAuthenticationMethod(System.String)">
<summary>
Adds or replaces the authentication method reference claim.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithNameClaimType(System.String)">
<summary>
Sets the name claim type appended when building the <see cref="T:System.Security.Claims.ClaimsIdentity"/>.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithRoleClaimType(System.String)">
<summary>
Sets the role claim type appended when building the <see cref="T:System.Security.Claims.ClaimsIdentity"/>.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithAuthenticationType(System.String)">
<summary>
Sets the authentication type stamped on the <see cref="T:System.Security.Claims.ClaimsIdentity"/>.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithScopes(System.Collections.Generic.IEnumerable{System.String})">
<summary>
Registers the supplied scopes (normalised to lower-case, deduplicated, sorted).
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithAudiences(System.Collections.Generic.IEnumerable{System.String})">
<summary>
Registers the supplied audiences (trimmed, deduplicated, sorted).
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithAudience(System.String)">
<summary>
Adds a single audience.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.AddClaim(System.String,System.String,System.String)">
<summary>
Adds an arbitrary claim (no deduplication is performed).
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.AddClaims(System.Collections.Generic.IEnumerable{System.Security.Claims.Claim})">
<summary>
Adds multiple claims (incoming claims are cloned to enforce value trimming).
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithIssuedAt(System.DateTimeOffset)">
<summary>
Adds an <c>iat</c> (issued at) claim using Unix time seconds.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithNotBefore(System.DateTimeOffset)">
<summary>
Adds an <c>nbf</c> (not before) claim using Unix time seconds.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithExpires(System.DateTimeOffset)">
<summary>
Adds an <c>exp</c> (expires) claim using Unix time seconds.
</summary>
</member>
<member name="P:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.NormalizedScopes">
<summary>
Returns the normalised scope list (deduplicated + sorted).
</summary>
</member>
<member name="P:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.Audiences">
<summary>
Returns the normalised audience list (deduplicated + sorted).
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.Build">
<summary>
Builds the immutable <see cref="T:System.Security.Claims.ClaimsPrincipal"/> instance based on the registered data.
</summary>
</member>
<member name="T:StellaOps.Auth.Abstractions.StellaOpsProblemResultFactory">
<summary>
Factory helpers for returning RFC 7807 problem responses using StellaOps conventions.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsProblemResultFactory.AuthenticationRequired(System.String,System.String)">
<summary>
Produces a 401 problem response indicating authentication is required.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsProblemResultFactory.InvalidToken(System.String,System.String)">
<summary>
Produces a 401 problem response for invalid, expired, or revoked tokens.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsProblemResultFactory.Forbidden(System.String,System.String)">
<summary>
Produces a 403 problem response when access is denied.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsProblemResultFactory.InsufficientScope(System.Collections.Generic.IReadOnlyCollection{System.String},System.Collections.Generic.IReadOnlyCollection{System.String},System.String)">
<summary>
Produces a 403 problem response for insufficient scopes.
</summary>
</member>
<member name="T:StellaOps.Auth.Abstractions.StellaOpsScopes">
<summary>
Canonical scope names supported by StellaOps services.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsScopes.ConcelierJobsTrigger">
<summary>
Scope required to trigger Concelier jobs.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsScopes.ConcelierMerge">
<summary>
Scope required to manage Concelier merge operations.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsScopes.AuthorityUsersManage">
<summary>
Scope granting administrative access to Authority user management.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsScopes.AuthorityClientsManage">
<summary>
Scope granting administrative access to Authority client registrations.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsScopes.AuthorityAuditRead">
<summary>
Scope granting read-only access to Authority audit logs.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsScopes.Bypass">
<summary>
Synthetic scope representing trusted network bypass.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsScopes.AdvisoryRead">
<summary>
Scope granting read-only access to raw advisory ingestion data.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsScopes.AdvisoryIngest">
<summary>
Scope granting write access for raw advisory ingestion.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsScopes.VexRead">
<summary>
Scope granting read-only access to raw VEX ingestion data.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsScopes.VexIngest">
<summary>
Scope granting write access for raw VEX ingestion.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsScopes.AocVerify">
<summary>
Scope granting permission to execute aggregation-only contract verification.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsScopes.Normalize(System.String)">
<summary>
Normalises a scope string (trim/convert to lower case).
</summary>
<param name="scope">Scope raw value.</param>
<returns>Normalised scope or <c>null</c> when the input is blank.</returns>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsScopes.IsKnown(System.String)">
<summary>
Checks whether the provided scope is registered as a built-in StellaOps scope.
</summary>
</member>
<member name="P:StellaOps.Auth.Abstractions.StellaOpsScopes.All">
<summary>
Returns the full set of built-in scopes.
</summary>
</member>
</members>
</doc>
<?xml version="1.0"?>
<doc>
<assembly>
<name>StellaOps.Auth.Abstractions</name>
</assembly>
<members>
<member name="T:StellaOps.Auth.AuthorityTelemetry">
<summary>
Canonical telemetry metadata for the StellaOps Authority stack.
</summary>
</member>
<member name="F:StellaOps.Auth.AuthorityTelemetry.ServiceName">
<summary>
service.name resource attribute recorded by Authority components.
</summary>
</member>
<member name="F:StellaOps.Auth.AuthorityTelemetry.ServiceNamespace">
<summary>
service.namespace resource attribute aligning Authority with other StellaOps services.
</summary>
</member>
<member name="F:StellaOps.Auth.AuthorityTelemetry.ActivitySourceName">
<summary>
Activity source identifier used by Authority instrumentation.
</summary>
</member>
<member name="F:StellaOps.Auth.AuthorityTelemetry.MeterName">
<summary>
Meter name used by Authority instrumentation.
</summary>
</member>
<member name="M:StellaOps.Auth.AuthorityTelemetry.BuildDefaultResourceAttributes(System.Reflection.Assembly)">
<summary>
Builds the default set of resource attributes (service name/namespace/version).
</summary>
<param name="assembly">Optional assembly used to resolve the service version.</param>
</member>
<member name="M:StellaOps.Auth.AuthorityTelemetry.ResolveServiceVersion(System.Reflection.Assembly)">
<summary>
Resolves the service version string from the provided assembly (defaults to the Authority telemetry assembly).
</summary>
</member>
<member name="T:StellaOps.Auth.Abstractions.NetworkMask">
<summary>
Represents an IP network expressed in CIDR notation.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.NetworkMask.#ctor(System.Net.IPAddress,System.Int32)">
<summary>
Initialises a new <see cref="T:StellaOps.Auth.Abstractions.NetworkMask"/>.
</summary>
<param name="network">Canonical network address with host bits zeroed.</param>
<param name="prefixLength">Prefix length (0-32 for IPv4, 0-128 for IPv6).</param>
</member>
<member name="P:StellaOps.Auth.Abstractions.NetworkMask.Network">
<summary>
Canonical network address with host bits zeroed.
</summary>
</member>
<member name="P:StellaOps.Auth.Abstractions.NetworkMask.PrefixLength">
<summary>
Prefix length.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.NetworkMask.Parse(System.String)">
<summary>
Attempts to parse the supplied value as CIDR notation or a single IP address.
</summary>
<exception cref="T:System.FormatException">Thrown when the input is not recognised.</exception>
</member>
<member name="M:StellaOps.Auth.Abstractions.NetworkMask.TryParse(System.String,StellaOps.Auth.Abstractions.NetworkMask@)">
<summary>
Attempts to parse the supplied value as CIDR notation or a single IP address.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.NetworkMask.Contains(System.Net.IPAddress)">
<summary>
Determines whether the provided address belongs to this network.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.NetworkMask.ToString">
<inheritdoc />
</member>
<member name="T:StellaOps.Auth.Abstractions.NetworkMaskMatcher">
<summary>
Evaluates remote addresses against configured network masks.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.NetworkMaskMatcher.#ctor(System.Collections.Generic.IEnumerable{System.String})">
<summary>
Creates a matcher from raw CIDR strings.
</summary>
<param name="values">Sequence of CIDR entries or IP addresses.</param>
<exception cref="T:System.FormatException">Thrown when a value cannot be parsed.</exception>
</member>
<member name="M:StellaOps.Auth.Abstractions.NetworkMaskMatcher.#ctor(System.Collections.Generic.IEnumerable{StellaOps.Auth.Abstractions.NetworkMask})">
<summary>
Creates a matcher from already parsed masks.
</summary>
<param name="masks">Sequence of network masks.</param>
</member>
<member name="P:StellaOps.Auth.Abstractions.NetworkMaskMatcher.AllowAll">
<summary>
Gets a matcher that allows every address.
</summary>
</member>
<member name="P:StellaOps.Auth.Abstractions.NetworkMaskMatcher.DenyAll">
<summary>
Gets a matcher that denies every address (no masks configured).
</summary>
</member>
<member name="P:StellaOps.Auth.Abstractions.NetworkMaskMatcher.IsEmpty">
<summary>
Indicates whether this matcher has no masks configured and does not allow all.
</summary>
</member>
<member name="P:StellaOps.Auth.Abstractions.NetworkMaskMatcher.Masks">
<summary>
Returns the configured masks.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.NetworkMaskMatcher.IsAllowed(System.Net.IPAddress)">
<summary>
Checks whether the provided address matches any of the configured masks.
</summary>
<param name="address">Remote address to test.</param>
<returns><c>true</c> when the address is allowed.</returns>
</member>
<member name="T:StellaOps.Auth.Abstractions.StellaOpsAuthenticationDefaults">
<summary>
Default authentication constants used by StellaOps resource servers and clients.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsAuthenticationDefaults.AuthenticationScheme">
<summary>
Default authentication scheme for StellaOps bearer tokens.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsAuthenticationDefaults.AuthenticationType">
<summary>
Logical authentication type attached to <see cref="T:System.Security.Claims.ClaimsIdentity"/>.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsAuthenticationDefaults.PolicyPrefix">
<summary>
Policy prefix applied to named authorization policies.
</summary>
</member>
<member name="T:StellaOps.Auth.Abstractions.StellaOpsClaimTypes">
<summary>
Canonical claim type identifiers used across StellaOps services.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsClaimTypes.Subject">
<summary>
Subject identifier claim (maps to <c>sub</c> in JWTs).
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsClaimTypes.Tenant">
<summary>
StellaOps tenant identifier claim (multi-tenant deployments).
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsClaimTypes.ClientId">
<summary>
OAuth2/OIDC client identifier claim (maps to <c>client_id</c>).
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsClaimTypes.TokenId">
<summary>
Unique token identifier claim (maps to <c>jti</c>).
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsClaimTypes.AuthenticationMethod">
<summary>
Authentication method reference claim (<c>amr</c>).
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsClaimTypes.Scope">
<summary>
Space separated scope list (<c>scope</c>).
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsClaimTypes.ScopeItem">
<summary>
Individual scope items (<c>scp</c>).
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsClaimTypes.Audience">
<summary>
OAuth2 resource audiences (<c>aud</c>).
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsClaimTypes.IdentityProvider">
<summary>
Identity provider hint for downstream services.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsClaimTypes.SessionId">
<summary>
Session identifier claim (<c>sid</c>).
</summary>
</member>
<member name="T:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder">
<summary>
Fluent helper used to construct <see cref="T:System.Security.Claims.ClaimsPrincipal"/> instances that follow StellaOps conventions.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithSubject(System.String)">
<summary>
Adds or replaces the canonical subject identifier.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithClientId(System.String)">
<summary>
Adds or replaces the canonical client identifier.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithTenant(System.String)">
<summary>
Adds or replaces the tenant identifier claim.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithName(System.String)">
<summary>
Adds or replaces the user display name claim.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithIdentityProvider(System.String)">
<summary>
Adds or replaces the identity provider claim.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithSessionId(System.String)">
<summary>
Adds or replaces the session identifier claim.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithTokenId(System.String)">
<summary>
Adds or replaces the token identifier claim.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithAuthenticationMethod(System.String)">
<summary>
Adds or replaces the authentication method reference claim.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithNameClaimType(System.String)">
<summary>
Sets the name claim type appended when building the <see cref="T:System.Security.Claims.ClaimsIdentity"/>.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithRoleClaimType(System.String)">
<summary>
Sets the role claim type appended when building the <see cref="T:System.Security.Claims.ClaimsIdentity"/>.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithAuthenticationType(System.String)">
<summary>
Sets the authentication type stamped on the <see cref="T:System.Security.Claims.ClaimsIdentity"/>.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithScopes(System.Collections.Generic.IEnumerable{System.String})">
<summary>
Registers the supplied scopes (normalised to lower-case, deduplicated, sorted).
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithAudiences(System.Collections.Generic.IEnumerable{System.String})">
<summary>
Registers the supplied audiences (trimmed, deduplicated, sorted).
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithAudience(System.String)">
<summary>
Adds a single audience.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.AddClaim(System.String,System.String,System.String)">
<summary>
Adds an arbitrary claim (no deduplication is performed).
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.AddClaims(System.Collections.Generic.IEnumerable{System.Security.Claims.Claim})">
<summary>
Adds multiple claims (incoming claims are cloned to enforce value trimming).
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithIssuedAt(System.DateTimeOffset)">
<summary>
Adds an <c>iat</c> (issued at) claim using Unix time seconds.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithNotBefore(System.DateTimeOffset)">
<summary>
Adds an <c>nbf</c> (not before) claim using Unix time seconds.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.WithExpires(System.DateTimeOffset)">
<summary>
Adds an <c>exp</c> (expires) claim using Unix time seconds.
</summary>
</member>
<member name="P:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.NormalizedScopes">
<summary>
Returns the normalised scope list (deduplicated + sorted).
</summary>
</member>
<member name="P:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.Audiences">
<summary>
Returns the normalised audience list (deduplicated + sorted).
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsPrincipalBuilder.Build">
<summary>
Builds the immutable <see cref="T:System.Security.Claims.ClaimsPrincipal"/> instance based on the registered data.
</summary>
</member>
<member name="T:StellaOps.Auth.Abstractions.StellaOpsProblemResultFactory">
<summary>
Factory helpers for returning RFC 7807 problem responses using StellaOps conventions.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsProblemResultFactory.AuthenticationRequired(System.String,System.String)">
<summary>
Produces a 401 problem response indicating authentication is required.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsProblemResultFactory.InvalidToken(System.String,System.String)">
<summary>
Produces a 401 problem response for invalid, expired, or revoked tokens.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsProblemResultFactory.Forbidden(System.String,System.String)">
<summary>
Produces a 403 problem response when access is denied.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsProblemResultFactory.InsufficientScope(System.Collections.Generic.IReadOnlyCollection{System.String},System.Collections.Generic.IReadOnlyCollection{System.String},System.String)">
<summary>
Produces a 403 problem response for insufficient scopes.
</summary>
</member>
<member name="T:StellaOps.Auth.Abstractions.StellaOpsScopes">
<summary>
Canonical scope names supported by StellaOps services.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsScopes.ConcelierJobsTrigger">
<summary>
Scope required to trigger Concelier jobs.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsScopes.ConcelierMerge">
<summary>
Scope required to manage Concelier merge operations.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsScopes.AuthorityUsersManage">
<summary>
Scope granting administrative access to Authority user management.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsScopes.AuthorityClientsManage">
<summary>
Scope granting administrative access to Authority client registrations.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsScopes.AuthorityAuditRead">
<summary>
Scope granting read-only access to Authority audit logs.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsScopes.Bypass">
<summary>
Synthetic scope representing trusted network bypass.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsScopes.AdvisoryRead">
<summary>
Scope granting read-only access to raw advisory ingestion data.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsScopes.AdvisoryIngest">
<summary>
Scope granting write access for raw advisory ingestion.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsScopes.VexRead">
<summary>
Scope granting read-only access to raw VEX ingestion data.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsScopes.VexIngest">
<summary>
Scope granting write access for raw VEX ingestion.
</summary>
</member>
<member name="F:StellaOps.Auth.Abstractions.StellaOpsScopes.AocVerify">
<summary>
Scope granting permission to execute aggregation-only contract verification.
</summary>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsScopes.Normalize(System.String)">
<summary>
Normalises a scope string (trim/convert to lower case).
</summary>
<param name="scope">Scope raw value.</param>
<returns>Normalised scope or <c>null</c> when the input is blank.</returns>
</member>
<member name="M:StellaOps.Auth.Abstractions.StellaOpsScopes.IsKnown(System.String)">
<summary>
Checks whether the provided scope is registered as a built-in StellaOps scope.
</summary>
</member>
<member name="P:StellaOps.Auth.Abstractions.StellaOpsScopes.All">
<summary>
Returns the full set of built-in scopes.
</summary>
</member>
</members>
</doc>

View File

@@ -1,233 +1,233 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>StellaOps.Auth.Client</name>
</assembly>
<members>
<member name="T:StellaOps.Auth.Client.FileTokenCache">
<summary>
File-based token cache suitable for CLI/offline usage.
</summary>
</member>
<member name="T:StellaOps.Auth.Client.InMemoryTokenCache">
<summary>
In-memory token cache suitable for service scenarios.
</summary>
</member>
<member name="T:StellaOps.Auth.Client.IStellaOpsTokenCache">
<summary>
Abstraction for caching StellaOps tokens.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.IStellaOpsTokenCache.GetAsync(System.String,System.Threading.CancellationToken)">
<summary>
Retrieves a cached token entry, if present.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.IStellaOpsTokenCache.SetAsync(System.String,StellaOps.Auth.Client.StellaOpsTokenCacheEntry,System.Threading.CancellationToken)">
<summary>
Stores or updates a token entry for the specified key.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.IStellaOpsTokenCache.RemoveAsync(System.String,System.Threading.CancellationToken)">
<summary>
Removes the cached entry for the specified key.
</summary>
</member>
<member name="T:StellaOps.Auth.Client.IStellaOpsTokenClient">
<summary>
Abstraction for requesting tokens from StellaOps Authority.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.IStellaOpsTokenClient.RequestPasswordTokenAsync(System.String,System.String,System.String,System.Threading.CancellationToken)">
<summary>
Requests an access token using the resource owner password credentials flow.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.IStellaOpsTokenClient.RequestClientCredentialsTokenAsync(System.String,System.Threading.CancellationToken)">
<summary>
Requests an access token using the client credentials flow.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.IStellaOpsTokenClient.GetJsonWebKeySetAsync(System.Threading.CancellationToken)">
<summary>
Retrieves the cached JWKS document.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.IStellaOpsTokenClient.GetCachedTokenAsync(System.String,System.Threading.CancellationToken)">
<summary>
Retrieves a cached token entry.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.IStellaOpsTokenClient.CacheTokenAsync(System.String,StellaOps.Auth.Client.StellaOpsTokenCacheEntry,System.Threading.CancellationToken)">
<summary>
Persists a token entry in the cache.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.IStellaOpsTokenClient.ClearCachedTokenAsync(System.String,System.Threading.CancellationToken)">
<summary>
Removes a cached entry.
</summary>
</member>
<member name="T:StellaOps.Auth.Client.ServiceCollectionExtensions">
<summary>
DI helpers for the StellaOps auth client.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.ServiceCollectionExtensions.AddStellaOpsAuthClient(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{StellaOps.Auth.Client.StellaOpsAuthClientOptions})">
<summary>
Registers the StellaOps auth client with the provided configuration.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.ServiceCollectionExtensions.AddStellaOpsFileTokenCache(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.String)">
<summary>
Registers a file-backed token cache implementation.
</summary>
</member>
<member name="T:StellaOps.Auth.Client.StellaOpsAuthClientOptions">
<summary>
Options controlling the StellaOps authentication client.
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.Authority">
<summary>
Authority (issuer) base URL.
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.ClientId">
<summary>
OAuth client identifier (optional for password flow).
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.ClientSecret">
<summary>
OAuth client secret (optional for public clients).
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.DefaultScopes">
<summary>
Default scopes requested for flows that do not explicitly override them.
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.RetryDelays">
<summary>
Retry delays applied by HTTP retry policy (empty uses defaults).
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.EnableRetries">
<summary>
Gets or sets a value indicating whether HTTP retry policies are enabled.
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.HttpTimeout">
<summary>
Timeout applied to discovery and token HTTP requests.
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.DiscoveryCacheLifetime">
<summary>
Lifetime of cached discovery metadata.
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.JwksCacheLifetime">
<summary>
Lifetime of cached JWKS metadata.
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.ExpirationSkew">
<summary>
Buffer applied when determining cache expiration (default: 30 seconds).
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.AllowOfflineCacheFallback">
<summary>
Gets or sets a value indicating whether cached discovery/JWKS responses may be served when the Authority is unreachable.
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.OfflineCacheTolerance">
<summary>
Additional tolerance window during which stale cache entries remain valid if offline fallback is allowed.
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.AuthorityUri">
<summary>
Parsed Authority URI (populated after validation).
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.NormalizedScopes">
<summary>
Normalised scope list (populated after validation).
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.NormalizedRetryDelays">
<summary>
Normalised retry delays (populated after validation).
</summary>
</member>
<member name="M:StellaOps.Auth.Client.StellaOpsAuthClientOptions.Validate">
<summary>
Validates required values and normalises scope entries.
</summary>
</member>
<member name="T:StellaOps.Auth.Client.StellaOpsDiscoveryCache">
<summary>
Caches Authority discovery metadata.
</summary>
</member>
<member name="T:StellaOps.Auth.Client.OpenIdConfiguration">
<summary>
Minimal OpenID Connect configuration representation.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.OpenIdConfiguration.#ctor(System.Uri,System.Uri)">
<summary>
Minimal OpenID Connect configuration representation.
</summary>
</member>
<member name="T:StellaOps.Auth.Client.StellaOpsJwksCache">
<summary>
Caches JWKS documents for Authority.
</summary>
</member>
<member name="T:StellaOps.Auth.Client.StellaOpsTokenCacheEntry">
<summary>
Represents a cached token entry.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.StellaOpsTokenCacheEntry.#ctor(System.String,System.String,System.DateTimeOffset,System.Collections.Generic.IReadOnlyList{System.String},System.String,System.String,System.Collections.Generic.IReadOnlyDictionary{System.String,System.String})">
<summary>
Represents a cached token entry.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.StellaOpsTokenCacheEntry.IsExpired(System.TimeProvider,System.Nullable{System.TimeSpan})">
<summary>
Determines whether the token is expired given the provided <see cref="T:System.TimeProvider"/>.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.StellaOpsTokenCacheEntry.NormalizeScopes">
<summary>
Creates a copy with scopes normalised.
</summary>
</member>
<member name="T:StellaOps.Auth.Client.StellaOpsTokenClient">
<summary>
Default implementation of <see cref="T:StellaOps.Auth.Client.IStellaOpsTokenClient"/>.
</summary>
</member>
<member name="T:StellaOps.Auth.Client.StellaOpsTokenResult">
<summary>
Represents an issued token with metadata.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.StellaOpsTokenResult.#ctor(System.String,System.String,System.DateTimeOffset,System.Collections.Generic.IReadOnlyList{System.String},System.String,System.String,System.String)">
<summary>
Represents an issued token with metadata.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.StellaOpsTokenResult.ToCacheEntry">
<summary>
Converts the result to a cache entry.
</summary>
</member>
</members>
</doc>
<?xml version="1.0"?>
<doc>
<assembly>
<name>StellaOps.Auth.Client</name>
</assembly>
<members>
<member name="T:StellaOps.Auth.Client.FileTokenCache">
<summary>
File-based token cache suitable for CLI/offline usage.
</summary>
</member>
<member name="T:StellaOps.Auth.Client.InMemoryTokenCache">
<summary>
In-memory token cache suitable for service scenarios.
</summary>
</member>
<member name="T:StellaOps.Auth.Client.IStellaOpsTokenCache">
<summary>
Abstraction for caching StellaOps tokens.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.IStellaOpsTokenCache.GetAsync(System.String,System.Threading.CancellationToken)">
<summary>
Retrieves a cached token entry, if present.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.IStellaOpsTokenCache.SetAsync(System.String,StellaOps.Auth.Client.StellaOpsTokenCacheEntry,System.Threading.CancellationToken)">
<summary>
Stores or updates a token entry for the specified key.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.IStellaOpsTokenCache.RemoveAsync(System.String,System.Threading.CancellationToken)">
<summary>
Removes the cached entry for the specified key.
</summary>
</member>
<member name="T:StellaOps.Auth.Client.IStellaOpsTokenClient">
<summary>
Abstraction for requesting tokens from StellaOps Authority.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.IStellaOpsTokenClient.RequestPasswordTokenAsync(System.String,System.String,System.String,System.Threading.CancellationToken)">
<summary>
Requests an access token using the resource owner password credentials flow.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.IStellaOpsTokenClient.RequestClientCredentialsTokenAsync(System.String,System.Threading.CancellationToken)">
<summary>
Requests an access token using the client credentials flow.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.IStellaOpsTokenClient.GetJsonWebKeySetAsync(System.Threading.CancellationToken)">
<summary>
Retrieves the cached JWKS document.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.IStellaOpsTokenClient.GetCachedTokenAsync(System.String,System.Threading.CancellationToken)">
<summary>
Retrieves a cached token entry.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.IStellaOpsTokenClient.CacheTokenAsync(System.String,StellaOps.Auth.Client.StellaOpsTokenCacheEntry,System.Threading.CancellationToken)">
<summary>
Persists a token entry in the cache.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.IStellaOpsTokenClient.ClearCachedTokenAsync(System.String,System.Threading.CancellationToken)">
<summary>
Removes a cached entry.
</summary>
</member>
<member name="T:StellaOps.Auth.Client.ServiceCollectionExtensions">
<summary>
DI helpers for the StellaOps auth client.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.ServiceCollectionExtensions.AddStellaOpsAuthClient(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{StellaOps.Auth.Client.StellaOpsAuthClientOptions})">
<summary>
Registers the StellaOps auth client with the provided configuration.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.ServiceCollectionExtensions.AddStellaOpsFileTokenCache(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.String)">
<summary>
Registers a file-backed token cache implementation.
</summary>
</member>
<member name="T:StellaOps.Auth.Client.StellaOpsAuthClientOptions">
<summary>
Options controlling the StellaOps authentication client.
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.Authority">
<summary>
Authority (issuer) base URL.
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.ClientId">
<summary>
OAuth client identifier (optional for password flow).
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.ClientSecret">
<summary>
OAuth client secret (optional for public clients).
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.DefaultScopes">
<summary>
Default scopes requested for flows that do not explicitly override them.
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.RetryDelays">
<summary>
Retry delays applied by HTTP retry policy (empty uses defaults).
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.EnableRetries">
<summary>
Gets or sets a value indicating whether HTTP retry policies are enabled.
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.HttpTimeout">
<summary>
Timeout applied to discovery and token HTTP requests.
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.DiscoveryCacheLifetime">
<summary>
Lifetime of cached discovery metadata.
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.JwksCacheLifetime">
<summary>
Lifetime of cached JWKS metadata.
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.ExpirationSkew">
<summary>
Buffer applied when determining cache expiration (default: 30 seconds).
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.AllowOfflineCacheFallback">
<summary>
Gets or sets a value indicating whether cached discovery/JWKS responses may be served when the Authority is unreachable.
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.OfflineCacheTolerance">
<summary>
Additional tolerance window during which stale cache entries remain valid if offline fallback is allowed.
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.AuthorityUri">
<summary>
Parsed Authority URI (populated after validation).
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.NormalizedScopes">
<summary>
Normalised scope list (populated after validation).
</summary>
</member>
<member name="P:StellaOps.Auth.Client.StellaOpsAuthClientOptions.NormalizedRetryDelays">
<summary>
Normalised retry delays (populated after validation).
</summary>
</member>
<member name="M:StellaOps.Auth.Client.StellaOpsAuthClientOptions.Validate">
<summary>
Validates required values and normalises scope entries.
</summary>
</member>
<member name="T:StellaOps.Auth.Client.StellaOpsDiscoveryCache">
<summary>
Caches Authority discovery metadata.
</summary>
</member>
<member name="T:StellaOps.Auth.Client.OpenIdConfiguration">
<summary>
Minimal OpenID Connect configuration representation.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.OpenIdConfiguration.#ctor(System.Uri,System.Uri)">
<summary>
Minimal OpenID Connect configuration representation.
</summary>
</member>
<member name="T:StellaOps.Auth.Client.StellaOpsJwksCache">
<summary>
Caches JWKS documents for Authority.
</summary>
</member>
<member name="T:StellaOps.Auth.Client.StellaOpsTokenCacheEntry">
<summary>
Represents a cached token entry.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.StellaOpsTokenCacheEntry.#ctor(System.String,System.String,System.DateTimeOffset,System.Collections.Generic.IReadOnlyList{System.String},System.String,System.String,System.Collections.Generic.IReadOnlyDictionary{System.String,System.String})">
<summary>
Represents a cached token entry.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.StellaOpsTokenCacheEntry.IsExpired(System.TimeProvider,System.Nullable{System.TimeSpan})">
<summary>
Determines whether the token is expired given the provided <see cref="T:System.TimeProvider"/>.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.StellaOpsTokenCacheEntry.NormalizeScopes">
<summary>
Creates a copy with scopes normalised.
</summary>
</member>
<member name="T:StellaOps.Auth.Client.StellaOpsTokenClient">
<summary>
Default implementation of <see cref="T:StellaOps.Auth.Client.IStellaOpsTokenClient"/>.
</summary>
</member>
<member name="T:StellaOps.Auth.Client.StellaOpsTokenResult">
<summary>
Represents an issued token with metadata.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.StellaOpsTokenResult.#ctor(System.String,System.String,System.DateTimeOffset,System.Collections.Generic.IReadOnlyList{System.String},System.String,System.String,System.String)">
<summary>
Represents an issued token with metadata.
</summary>
</member>
<member name="M:StellaOps.Auth.Client.StellaOpsTokenResult.ToCacheEntry">
<summary>
Converts the result to a cache entry.
</summary>
</member>
</members>
</doc>

View File

@@ -1,4 +1,4 @@
scenario,iterations,observations,aliases,linksets,mean_total_ms,p95_total_ms,max_total_ms,mean_insert_ms,mean_correlation_ms,mean_throughput_per_sec,min_throughput_per_sec,mean_mongo_throughput_per_sec,min_mongo_throughput_per_sec,max_allocated_mb
lnm_ingest_baseline,5,5000,500,6000,555.1984,823.4957,866.6236,366.2635,188.9349,9877.7916,5769.5175,15338.0851,8405.1257,62.4477
lnm_ingest_fanout_medium,5,10000,800,14800,785.8909,841.6247,842.8815,453.5087,332.3822,12794.9550,11864.0639,22086.0320,20891.0579,145.8328
lnm_ingest_fanout_high,5,15000,1200,17400,1299.3458,1367.0934,1369.9430,741.6265,557.7193,11571.0991,10949.3607,20232.5180,19781.6762,238.3450
scenario,iterations,observations,aliases,linksets,mean_total_ms,p95_total_ms,max_total_ms,mean_insert_ms,mean_correlation_ms,mean_throughput_per_sec,min_throughput_per_sec,mean_mongo_throughput_per_sec,min_mongo_throughput_per_sec,max_allocated_mb
lnm_ingest_baseline,5,5000,500,6000,555.1984,823.4957,866.6236,366.2635,188.9349,9877.7916,5769.5175,15338.0851,8405.1257,62.4477
lnm_ingest_fanout_medium,5,10000,800,14800,785.8909,841.6247,842.8815,453.5087,332.3822,12794.9550,11864.0639,22086.0320,20891.0579,145.8328
lnm_ingest_fanout_high,5,15000,1200,17400,1299.3458,1367.0934,1369.9430,741.6265,557.7193,11571.0991,10949.3607,20232.5180,19781.6762,238.3450
1 scenario iterations observations aliases linksets mean_total_ms p95_total_ms max_total_ms mean_insert_ms mean_correlation_ms mean_throughput_per_sec min_throughput_per_sec mean_mongo_throughput_per_sec min_mongo_throughput_per_sec max_allocated_mb
2 lnm_ingest_baseline 5 5000 500 6000 555.1984 823.4957 866.6236 366.2635 188.9349 9877.7916 5769.5175 15338.0851 8405.1257 62.4477
3 lnm_ingest_fanout_medium 5 10000 800 14800 785.8909 841.6247 842.8815 453.5087 332.3822 12794.9550 11864.0639 22086.0320 20891.0579 145.8328
4 lnm_ingest_fanout_high 5 15000 1200 17400 1299.3458 1367.0934 1369.9430 741.6265 557.7193 11571.0991 10949.3607 20232.5180 19781.6762 238.3450

View File

@@ -1,84 +1,84 @@
{
"schemaVersion": "linknotmerge-bench/1.0",
"capturedAt": "2025-10-26T21:09:17.6345283+00:00",
"scenarios": [
{
"id": "lnm_ingest_baseline",
"label": "5k observations, 500 aliases",
"iterations": 5,
"observations": 5000,
"aliases": 500,
"linksets": 6000,
"meanTotalMs": 555.1983600000001,
"p95TotalMs": 823.49568,
"maxTotalMs": 866.6236,
"meanInsertMs": 366.2635,
"meanCorrelationMs": 188.93486000000001,
"meanThroughputPerSecond": 9877.791561756272,
"minThroughputPerSecond": 5769.517469868118,
"meanMongoThroughputPerSecond": 15338.085148262326,
"minMongoThroughputPerSecond": 8405.1257146248,
"maxAllocatedMb": 62.44767761230469,
"thresholdMs": 900,
"minThroughputThresholdPerSecond": 5500,
"minMongoThroughputThresholdPerSecond": 8000,
"maxAllocatedThresholdMb": 160,
"regression": {
"limit": 1.15,
"breached": false
}
},
{
"id": "lnm_ingest_fanout_medium",
"label": "10k observations, 800 aliases",
"iterations": 5,
"observations": 10000,
"aliases": 800,
"linksets": 14800,
"meanTotalMs": 785.89092,
"p95TotalMs": 841.6247,
"maxTotalMs": 842.8815,
"meanInsertMs": 453.50868,
"meanCorrelationMs": 332.38224,
"meanThroughputPerSecond": 12794.954951406156,
"minThroughputPerSecond": 11864.063928322072,
"meanMongoThroughputPerSecond": 22086.032034175576,
"minMongoThroughputPerSecond": 20891.057937797712,
"maxAllocatedMb": 145.83282470703125,
"thresholdMs": 1300,
"minThroughputThresholdPerSecond": 8000,
"minMongoThroughputThresholdPerSecond": 13000,
"maxAllocatedThresholdMb": 220,
"regression": {
"limit": 1.15,
"breached": false
}
},
{
"id": "lnm_ingest_fanout_high",
"label": "15k observations, 1200 aliases",
"iterations": 5,
"observations": 15000,
"aliases": 1200,
"linksets": 17400,
"meanTotalMs": 1299.3458,
"p95TotalMs": 1367.09344,
"maxTotalMs": 1369.943,
"meanInsertMs": 741.62654,
"meanCorrelationMs": 557.71926,
"meanThroughputPerSecond": 11571.099129140825,
"minThroughputPerSecond": 10949.360666830664,
"meanMongoThroughputPerSecond": 20232.5179777937,
"minMongoThroughputPerSecond": 19781.676233305086,
"maxAllocatedMb": 238.34496307373047,
"thresholdMs": 2200,
"minThroughputThresholdPerSecond": 7000,
"minMongoThroughputThresholdPerSecond": 13000,
"maxAllocatedThresholdMb": 300,
"regression": {
"limit": 1.15,
"breached": false
}
}
]
{
"schemaVersion": "linknotmerge-bench/1.0",
"capturedAt": "2025-10-26T21:09:17.6345283+00:00",
"scenarios": [
{
"id": "lnm_ingest_baseline",
"label": "5k observations, 500 aliases",
"iterations": 5,
"observations": 5000,
"aliases": 500,
"linksets": 6000,
"meanTotalMs": 555.1983600000001,
"p95TotalMs": 823.49568,
"maxTotalMs": 866.6236,
"meanInsertMs": 366.2635,
"meanCorrelationMs": 188.93486000000001,
"meanThroughputPerSecond": 9877.791561756272,
"minThroughputPerSecond": 5769.517469868118,
"meanMongoThroughputPerSecond": 15338.085148262326,
"minMongoThroughputPerSecond": 8405.1257146248,
"maxAllocatedMb": 62.44767761230469,
"thresholdMs": 900,
"minThroughputThresholdPerSecond": 5500,
"minMongoThroughputThresholdPerSecond": 8000,
"maxAllocatedThresholdMb": 160,
"regression": {
"limit": 1.15,
"breached": false
}
},
{
"id": "lnm_ingest_fanout_medium",
"label": "10k observations, 800 aliases",
"iterations": 5,
"observations": 10000,
"aliases": 800,
"linksets": 14800,
"meanTotalMs": 785.89092,
"p95TotalMs": 841.6247,
"maxTotalMs": 842.8815,
"meanInsertMs": 453.50868,
"meanCorrelationMs": 332.38224,
"meanThroughputPerSecond": 12794.954951406156,
"minThroughputPerSecond": 11864.063928322072,
"meanMongoThroughputPerSecond": 22086.032034175576,
"minMongoThroughputPerSecond": 20891.057937797712,
"maxAllocatedMb": 145.83282470703125,
"thresholdMs": 1300,
"minThroughputThresholdPerSecond": 8000,
"minMongoThroughputThresholdPerSecond": 13000,
"maxAllocatedThresholdMb": 220,
"regression": {
"limit": 1.15,
"breached": false
}
},
{
"id": "lnm_ingest_fanout_high",
"label": "15k observations, 1200 aliases",
"iterations": 5,
"observations": 15000,
"aliases": 1200,
"linksets": 17400,
"meanTotalMs": 1299.3458,
"p95TotalMs": 1367.09344,
"maxTotalMs": 1369.943,
"meanInsertMs": 741.62654,
"meanCorrelationMs": 557.71926,
"meanThroughputPerSecond": 11571.099129140825,
"minThroughputPerSecond": 10949.360666830664,
"meanMongoThroughputPerSecond": 20232.5179777937,
"minMongoThroughputPerSecond": 19781.676233305086,
"maxAllocatedMb": 238.34496307373047,
"thresholdMs": 2200,
"minThroughputThresholdPerSecond": 7000,
"minMongoThroughputThresholdPerSecond": 13000,
"maxAllocatedThresholdMb": 300,
"regression": {
"limit": 1.15,
"breached": false
}
}
]
}

View File

@@ -1,60 +1,60 @@
# HELP linknotmerge_bench_total_ms Link-Not-Merge benchmark total duration metrics (milliseconds).
# TYPE linknotmerge_bench_total_ms gauge
# HELP linknotmerge_bench_correlation_ms Link-Not-Merge benchmark correlation duration metrics (milliseconds).
# TYPE linknotmerge_bench_correlation_ms gauge
# HELP linknotmerge_bench_insert_ms Link-Not-Merge benchmark Mongo insert duration metrics (milliseconds).
# TYPE linknotmerge_bench_insert_ms gauge
# HELP linknotmerge_bench_throughput_per_sec Link-Not-Merge benchmark throughput metrics (observations per second).
# TYPE linknotmerge_bench_throughput_per_sec gauge
# HELP linknotmerge_bench_mongo_throughput_per_sec Link-Not-Merge benchmark Mongo throughput metrics (operations per second).
# TYPE linknotmerge_bench_mongo_throughput_per_sec gauge
# HELP linknotmerge_bench_allocated_mb Link-Not-Merge benchmark allocation metrics (megabytes).
# TYPE linknotmerge_bench_allocated_mb gauge
linknotmerge_bench_mean_total_ms{scenario="lnm_ingest_baseline"} 555.19836000000009
linknotmerge_bench_p95_total_ms{scenario="lnm_ingest_baseline"} 823.49567999999999
linknotmerge_bench_max_total_ms{scenario="lnm_ingest_baseline"} 866.62360000000001
linknotmerge_bench_threshold_ms{scenario="lnm_ingest_baseline"} 900
linknotmerge_bench_mean_correlation_ms{scenario="lnm_ingest_baseline"} 188.93486000000001
linknotmerge_bench_mean_insert_ms{scenario="lnm_ingest_baseline"} 366.26350000000002
linknotmerge_bench_mean_throughput_per_sec{scenario="lnm_ingest_baseline"} 9877.7915617562721
linknotmerge_bench_min_throughput_per_sec{scenario="lnm_ingest_baseline"} 5769.5174698681176
linknotmerge_bench_throughput_floor_per_sec{scenario="lnm_ingest_baseline"} 5500
linknotmerge_bench_mean_mongo_throughput_per_sec{scenario="lnm_ingest_baseline"} 15338.085148262326
linknotmerge_bench_min_mongo_throughput_per_sec{scenario="lnm_ingest_baseline"} 8405.1257146248008
linknotmerge_bench_mongo_throughput_floor_per_sec{scenario="lnm_ingest_baseline"} 8000
linknotmerge_bench_max_allocated_mb{scenario="lnm_ingest_baseline"} 62.447677612304688
linknotmerge_bench_max_allocated_threshold_mb{scenario="lnm_ingest_baseline"} 160
linknotmerge_bench_regression_limit{scenario="lnm_ingest_baseline"} 1.1499999999999999
linknotmerge_bench_regression_breached{scenario="lnm_ingest_baseline"} 0
linknotmerge_bench_mean_total_ms{scenario="lnm_ingest_fanout_medium"} 785.89092000000005
linknotmerge_bench_p95_total_ms{scenario="lnm_ingest_fanout_medium"} 841.62469999999996
linknotmerge_bench_max_total_ms{scenario="lnm_ingest_fanout_medium"} 842.88149999999996
linknotmerge_bench_threshold_ms{scenario="lnm_ingest_fanout_medium"} 1300
linknotmerge_bench_mean_correlation_ms{scenario="lnm_ingest_fanout_medium"} 332.38224000000002
linknotmerge_bench_mean_insert_ms{scenario="lnm_ingest_fanout_medium"} 453.50868000000003
linknotmerge_bench_mean_throughput_per_sec{scenario="lnm_ingest_fanout_medium"} 12794.954951406156
linknotmerge_bench_min_throughput_per_sec{scenario="lnm_ingest_fanout_medium"} 11864.063928322072
linknotmerge_bench_throughput_floor_per_sec{scenario="lnm_ingest_fanout_medium"} 8000
linknotmerge_bench_mean_mongo_throughput_per_sec{scenario="lnm_ingest_fanout_medium"} 22086.032034175576
linknotmerge_bench_min_mongo_throughput_per_sec{scenario="lnm_ingest_fanout_medium"} 20891.057937797712
linknotmerge_bench_mongo_throughput_floor_per_sec{scenario="lnm_ingest_fanout_medium"} 13000
linknotmerge_bench_max_allocated_mb{scenario="lnm_ingest_fanout_medium"} 145.83282470703125
linknotmerge_bench_max_allocated_threshold_mb{scenario="lnm_ingest_fanout_medium"} 220
linknotmerge_bench_regression_limit{scenario="lnm_ingest_fanout_medium"} 1.1499999999999999
linknotmerge_bench_regression_breached{scenario="lnm_ingest_fanout_medium"} 0
linknotmerge_bench_mean_total_ms{scenario="lnm_ingest_fanout_high"} 1299.3458000000001
linknotmerge_bench_p95_total_ms{scenario="lnm_ingest_fanout_high"} 1367.0934400000001
linknotmerge_bench_max_total_ms{scenario="lnm_ingest_fanout_high"} 1369.943
linknotmerge_bench_threshold_ms{scenario="lnm_ingest_fanout_high"} 2200
linknotmerge_bench_mean_correlation_ms{scenario="lnm_ingest_fanout_high"} 557.71925999999996
linknotmerge_bench_mean_insert_ms{scenario="lnm_ingest_fanout_high"} 741.62653999999998
linknotmerge_bench_mean_throughput_per_sec{scenario="lnm_ingest_fanout_high"} 11571.099129140825
linknotmerge_bench_min_throughput_per_sec{scenario="lnm_ingest_fanout_high"} 10949.360666830664
linknotmerge_bench_throughput_floor_per_sec{scenario="lnm_ingest_fanout_high"} 7000
linknotmerge_bench_mean_mongo_throughput_per_sec{scenario="lnm_ingest_fanout_high"} 20232.517977793701
linknotmerge_bench_min_mongo_throughput_per_sec{scenario="lnm_ingest_fanout_high"} 19781.676233305086
linknotmerge_bench_mongo_throughput_floor_per_sec{scenario="lnm_ingest_fanout_high"} 13000
linknotmerge_bench_max_allocated_mb{scenario="lnm_ingest_fanout_high"} 238.34496307373047
linknotmerge_bench_max_allocated_threshold_mb{scenario="lnm_ingest_fanout_high"} 300
linknotmerge_bench_regression_limit{scenario="lnm_ingest_fanout_high"} 1.1499999999999999
linknotmerge_bench_regression_breached{scenario="lnm_ingest_fanout_high"} 0
# HELP linknotmerge_bench_total_ms Link-Not-Merge benchmark total duration metrics (milliseconds).
# TYPE linknotmerge_bench_total_ms gauge
# HELP linknotmerge_bench_correlation_ms Link-Not-Merge benchmark correlation duration metrics (milliseconds).
# TYPE linknotmerge_bench_correlation_ms gauge
# HELP linknotmerge_bench_insert_ms Link-Not-Merge benchmark Mongo insert duration metrics (milliseconds).
# TYPE linknotmerge_bench_insert_ms gauge
# HELP linknotmerge_bench_throughput_per_sec Link-Not-Merge benchmark throughput metrics (observations per second).
# TYPE linknotmerge_bench_throughput_per_sec gauge
# HELP linknotmerge_bench_mongo_throughput_per_sec Link-Not-Merge benchmark Mongo throughput metrics (operations per second).
# TYPE linknotmerge_bench_mongo_throughput_per_sec gauge
# HELP linknotmerge_bench_allocated_mb Link-Not-Merge benchmark allocation metrics (megabytes).
# TYPE linknotmerge_bench_allocated_mb gauge
linknotmerge_bench_mean_total_ms{scenario="lnm_ingest_baseline"} 555.19836000000009
linknotmerge_bench_p95_total_ms{scenario="lnm_ingest_baseline"} 823.49567999999999
linknotmerge_bench_max_total_ms{scenario="lnm_ingest_baseline"} 866.62360000000001
linknotmerge_bench_threshold_ms{scenario="lnm_ingest_baseline"} 900
linknotmerge_bench_mean_correlation_ms{scenario="lnm_ingest_baseline"} 188.93486000000001
linknotmerge_bench_mean_insert_ms{scenario="lnm_ingest_baseline"} 366.26350000000002
linknotmerge_bench_mean_throughput_per_sec{scenario="lnm_ingest_baseline"} 9877.7915617562721
linknotmerge_bench_min_throughput_per_sec{scenario="lnm_ingest_baseline"} 5769.5174698681176
linknotmerge_bench_throughput_floor_per_sec{scenario="lnm_ingest_baseline"} 5500
linknotmerge_bench_mean_mongo_throughput_per_sec{scenario="lnm_ingest_baseline"} 15338.085148262326
linknotmerge_bench_min_mongo_throughput_per_sec{scenario="lnm_ingest_baseline"} 8405.1257146248008
linknotmerge_bench_mongo_throughput_floor_per_sec{scenario="lnm_ingest_baseline"} 8000
linknotmerge_bench_max_allocated_mb{scenario="lnm_ingest_baseline"} 62.447677612304688
linknotmerge_bench_max_allocated_threshold_mb{scenario="lnm_ingest_baseline"} 160
linknotmerge_bench_regression_limit{scenario="lnm_ingest_baseline"} 1.1499999999999999
linknotmerge_bench_regression_breached{scenario="lnm_ingest_baseline"} 0
linknotmerge_bench_mean_total_ms{scenario="lnm_ingest_fanout_medium"} 785.89092000000005
linknotmerge_bench_p95_total_ms{scenario="lnm_ingest_fanout_medium"} 841.62469999999996
linknotmerge_bench_max_total_ms{scenario="lnm_ingest_fanout_medium"} 842.88149999999996
linknotmerge_bench_threshold_ms{scenario="lnm_ingest_fanout_medium"} 1300
linknotmerge_bench_mean_correlation_ms{scenario="lnm_ingest_fanout_medium"} 332.38224000000002
linknotmerge_bench_mean_insert_ms{scenario="lnm_ingest_fanout_medium"} 453.50868000000003
linknotmerge_bench_mean_throughput_per_sec{scenario="lnm_ingest_fanout_medium"} 12794.954951406156
linknotmerge_bench_min_throughput_per_sec{scenario="lnm_ingest_fanout_medium"} 11864.063928322072
linknotmerge_bench_throughput_floor_per_sec{scenario="lnm_ingest_fanout_medium"} 8000
linknotmerge_bench_mean_mongo_throughput_per_sec{scenario="lnm_ingest_fanout_medium"} 22086.032034175576
linknotmerge_bench_min_mongo_throughput_per_sec{scenario="lnm_ingest_fanout_medium"} 20891.057937797712
linknotmerge_bench_mongo_throughput_floor_per_sec{scenario="lnm_ingest_fanout_medium"} 13000
linknotmerge_bench_max_allocated_mb{scenario="lnm_ingest_fanout_medium"} 145.83282470703125
linknotmerge_bench_max_allocated_threshold_mb{scenario="lnm_ingest_fanout_medium"} 220
linknotmerge_bench_regression_limit{scenario="lnm_ingest_fanout_medium"} 1.1499999999999999
linknotmerge_bench_regression_breached{scenario="lnm_ingest_fanout_medium"} 0
linknotmerge_bench_mean_total_ms{scenario="lnm_ingest_fanout_high"} 1299.3458000000001
linknotmerge_bench_p95_total_ms{scenario="lnm_ingest_fanout_high"} 1367.0934400000001
linknotmerge_bench_max_total_ms{scenario="lnm_ingest_fanout_high"} 1369.943
linknotmerge_bench_threshold_ms{scenario="lnm_ingest_fanout_high"} 2200
linknotmerge_bench_mean_correlation_ms{scenario="lnm_ingest_fanout_high"} 557.71925999999996
linknotmerge_bench_mean_insert_ms{scenario="lnm_ingest_fanout_high"} 741.62653999999998
linknotmerge_bench_mean_throughput_per_sec{scenario="lnm_ingest_fanout_high"} 11571.099129140825
linknotmerge_bench_min_throughput_per_sec{scenario="lnm_ingest_fanout_high"} 10949.360666830664
linknotmerge_bench_throughput_floor_per_sec{scenario="lnm_ingest_fanout_high"} 7000
linknotmerge_bench_mean_mongo_throughput_per_sec{scenario="lnm_ingest_fanout_high"} 20232.517977793701
linknotmerge_bench_min_mongo_throughput_per_sec{scenario="lnm_ingest_fanout_high"} 19781.676233305086
linknotmerge_bench_mongo_throughput_floor_per_sec{scenario="lnm_ingest_fanout_high"} 13000
linknotmerge_bench_max_allocated_mb{scenario="lnm_ingest_fanout_high"} 238.34496307373047
linknotmerge_bench_max_allocated_threshold_mb{scenario="lnm_ingest_fanout_high"} 300
linknotmerge_bench_regression_limit{scenario="lnm_ingest_fanout_high"} 1.1499999999999999
linknotmerge_bench_regression_breached{scenario="lnm_ingest_fanout_high"} 0

View File

@@ -1,4 +1,4 @@
scenario,iterations,observations,statements,events,mean_total_ms,p95_total_ms,max_total_ms,mean_insert_ms,mean_correlation_ms,mean_observation_throughput_per_sec,min_observation_throughput_per_sec,mean_event_throughput_per_sec,min_event_throughput_per_sec,max_allocated_mb
vex_ingest_baseline,5,4000,24000,21326,842.8191,1319.3038,1432.7675,346.7277,496.0915,5349.8940,2791.7998,48942.4901,24653.0556,138.6365
vex_ingest_medium,5,8000,64000,56720,1525.9929,1706.8900,1748.9056,533.3378,992.6552,5274.5883,4574.2892,57654.9190,48531.7353,326.8638
vex_ingest_high,5,12000,120000,106910,2988.5094,3422.1728,3438.9364,903.3927,2085.1167,4066.2300,3489.4510,52456.9493,42358.0556,583.9903
scenario,iterations,observations,statements,events,mean_total_ms,p95_total_ms,max_total_ms,mean_insert_ms,mean_correlation_ms,mean_observation_throughput_per_sec,min_observation_throughput_per_sec,mean_event_throughput_per_sec,min_event_throughput_per_sec,max_allocated_mb
vex_ingest_baseline,5,4000,24000,21326,842.8191,1319.3038,1432.7675,346.7277,496.0915,5349.8940,2791.7998,48942.4901,24653.0556,138.6365
vex_ingest_medium,5,8000,64000,56720,1525.9929,1706.8900,1748.9056,533.3378,992.6552,5274.5883,4574.2892,57654.9190,48531.7353,326.8638
vex_ingest_high,5,12000,120000,106910,2988.5094,3422.1728,3438.9364,903.3927,2085.1167,4066.2300,3489.4510,52456.9493,42358.0556,583.9903
1 scenario iterations observations statements events mean_total_ms p95_total_ms max_total_ms mean_insert_ms mean_correlation_ms mean_observation_throughput_per_sec min_observation_throughput_per_sec mean_event_throughput_per_sec min_event_throughput_per_sec max_allocated_mb
2 vex_ingest_baseline 5 4000 24000 21326 842.8191 1319.3038 1432.7675 346.7277 496.0915 5349.8940 2791.7998 48942.4901 24653.0556 138.6365
3 vex_ingest_medium 5 8000 64000 56720 1525.9929 1706.8900 1748.9056 533.3378 992.6552 5274.5883 4574.2892 57654.9190 48531.7353 326.8638
4 vex_ingest_high 5 12000 120000 106910 2988.5094 3422.1728 3438.9364 903.3927 2085.1167 4066.2300 3489.4510 52456.9493 42358.0556 583.9903

View File

@@ -1,84 +1,84 @@
{
"schemaVersion": "linknotmerge-vex-bench/1.0",
"capturedAt": "2025-10-26T21:29:34.4007212+00:00",
"scenarios": [
{
"id": "vex_ingest_baseline",
"label": "4k observations, 400 aliases",
"iterations": 5,
"observations": 4000,
"statements": 24000,
"events": 21326,
"meanTotalMs": 842.81914,
"p95TotalMs": 1319.3037799999997,
"maxTotalMs": 1432.7675,
"meanInsertMs": 346.72766,
"meanCorrelationMs": 496.09147999999993,
"meanObservationThroughputPerSecond": 5349.894040882909,
"minObservationThroughputPerSecond": 2791.7997860783416,
"meanEventThroughputPerSecond": 48942.49008943273,
"minEventThroughputPerSecond": 24653.055581276763,
"maxAllocatedMb": 138.63648986816406,
"thresholdMs": 2300,
"minObservationThroughputThresholdPerSecond": 1800,
"minEventThroughputThresholdPerSecond": 2000,
"maxAllocatedThresholdMb": 220,
"regression": {
"limit": 1.15,
"breached": false
}
},
{
"id": "vex_ingest_medium",
"label": "8k observations, 700 aliases",
"iterations": 5,
"observations": 8000,
"statements": 64000,
"events": 56720,
"meanTotalMs": 1525.99294,
"p95TotalMs": 1706.89,
"maxTotalMs": 1748.9056,
"meanInsertMs": 533.3377800000001,
"meanCorrelationMs": 992.6551599999999,
"meanObservationThroughputPerSecond": 5274.588273225903,
"minObservationThroughputPerSecond": 4574.289201201025,
"meanEventThroughputPerSecond": 57654.91903920916,
"minEventThroughputPerSecond": 48531.73532270095,
"maxAllocatedMb": 326.8638000488281,
"thresholdMs": 3200,
"minObservationThroughputThresholdPerSecond": 2200,
"minEventThroughputThresholdPerSecond": 2500,
"maxAllocatedThresholdMb": 400,
"regression": {
"limit": 1.15,
"breached": false
}
},
{
"id": "vex_ingest_high",
"label": "12k observations, 1100 aliases",
"iterations": 5,
"observations": 12000,
"statements": 120000,
"events": 106910,
"meanTotalMs": 2988.50936,
"p95TotalMs": 3422.1728,
"maxTotalMs": 3438.9364,
"meanInsertMs": 903.3926800000002,
"meanCorrelationMs": 2085.11668,
"meanObservationThroughputPerSecond": 4066.2299506870645,
"minObservationThroughputPerSecond": 3489.450982577055,
"meanEventThroughputPerSecond": 52456.94928323016,
"minEventThroughputPerSecond": 42358.05564361166,
"maxAllocatedMb": 583.9903411865234,
"thresholdMs": 4200,
"minObservationThroughputThresholdPerSecond": 2200,
"minEventThroughputThresholdPerSecond": 2500,
"maxAllocatedThresholdMb": 700,
"regression": {
"limit": 1.15,
"breached": false
}
}
]
{
"schemaVersion": "linknotmerge-vex-bench/1.0",
"capturedAt": "2025-10-26T21:29:34.4007212+00:00",
"scenarios": [
{
"id": "vex_ingest_baseline",
"label": "4k observations, 400 aliases",
"iterations": 5,
"observations": 4000,
"statements": 24000,
"events": 21326,
"meanTotalMs": 842.81914,
"p95TotalMs": 1319.3037799999997,
"maxTotalMs": 1432.7675,
"meanInsertMs": 346.72766,
"meanCorrelationMs": 496.09147999999993,
"meanObservationThroughputPerSecond": 5349.894040882909,
"minObservationThroughputPerSecond": 2791.7997860783416,
"meanEventThroughputPerSecond": 48942.49008943273,
"minEventThroughputPerSecond": 24653.055581276763,
"maxAllocatedMb": 138.63648986816406,
"thresholdMs": 2300,
"minObservationThroughputThresholdPerSecond": 1800,
"minEventThroughputThresholdPerSecond": 2000,
"maxAllocatedThresholdMb": 220,
"regression": {
"limit": 1.15,
"breached": false
}
},
{
"id": "vex_ingest_medium",
"label": "8k observations, 700 aliases",
"iterations": 5,
"observations": 8000,
"statements": 64000,
"events": 56720,
"meanTotalMs": 1525.99294,
"p95TotalMs": 1706.89,
"maxTotalMs": 1748.9056,
"meanInsertMs": 533.3377800000001,
"meanCorrelationMs": 992.6551599999999,
"meanObservationThroughputPerSecond": 5274.588273225903,
"minObservationThroughputPerSecond": 4574.289201201025,
"meanEventThroughputPerSecond": 57654.91903920916,
"minEventThroughputPerSecond": 48531.73532270095,
"maxAllocatedMb": 326.8638000488281,
"thresholdMs": 3200,
"minObservationThroughputThresholdPerSecond": 2200,
"minEventThroughputThresholdPerSecond": 2500,
"maxAllocatedThresholdMb": 400,
"regression": {
"limit": 1.15,
"breached": false
}
},
{
"id": "vex_ingest_high",
"label": "12k observations, 1100 aliases",
"iterations": 5,
"observations": 12000,
"statements": 120000,
"events": 106910,
"meanTotalMs": 2988.50936,
"p95TotalMs": 3422.1728,
"maxTotalMs": 3438.9364,
"meanInsertMs": 903.3926800000002,
"meanCorrelationMs": 2085.11668,
"meanObservationThroughputPerSecond": 4066.2299506870645,
"minObservationThroughputPerSecond": 3489.450982577055,
"meanEventThroughputPerSecond": 52456.94928323016,
"minEventThroughputPerSecond": 42358.05564361166,
"maxAllocatedMb": 583.9903411865234,
"thresholdMs": 4200,
"minObservationThroughputThresholdPerSecond": 2200,
"minEventThroughputThresholdPerSecond": 2500,
"maxAllocatedThresholdMb": 700,
"regression": {
"limit": 1.15,
"breached": false
}
}
]
}

View File

@@ -1,50 +1,50 @@
# HELP linknotmerge_vex_bench_total_ms Link-Not-Merge VEX benchmark total duration (milliseconds).
# TYPE linknotmerge_vex_bench_total_ms gauge
# HELP linknotmerge_vex_bench_throughput_per_sec Link-Not-Merge VEX benchmark observation throughput (observations per second).
# TYPE linknotmerge_vex_bench_throughput_per_sec gauge
# HELP linknotmerge_vex_bench_event_throughput_per_sec Link-Not-Merge VEX benchmark event throughput (events per second).
# TYPE linknotmerge_vex_bench_event_throughput_per_sec gauge
# HELP linknotmerge_vex_bench_allocated_mb Link-Not-Merge VEX benchmark max allocations (megabytes).
# TYPE linknotmerge_vex_bench_allocated_mb gauge
linknotmerge_vex_bench_mean_total_ms{scenario="vex_ingest_baseline"} 842.81913999999995
linknotmerge_vex_bench_p95_total_ms{scenario="vex_ingest_baseline"} 1319.3037799999997
linknotmerge_vex_bench_max_total_ms{scenario="vex_ingest_baseline"} 1432.7674999999999
linknotmerge_vex_bench_threshold_ms{scenario="vex_ingest_baseline"} 2300
linknotmerge_vex_bench_mean_observation_throughput_per_sec{scenario="vex_ingest_baseline"} 5349.8940408829094
linknotmerge_vex_bench_min_observation_throughput_per_sec{scenario="vex_ingest_baseline"} 2791.7997860783416
linknotmerge_vex_bench_observation_throughput_floor_per_sec{scenario="vex_ingest_baseline"} 1800
linknotmerge_vex_bench_mean_event_throughput_per_sec{scenario="vex_ingest_baseline"} 48942.490089432729
linknotmerge_vex_bench_min_event_throughput_per_sec{scenario="vex_ingest_baseline"} 24653.055581276763
linknotmerge_vex_bench_event_throughput_floor_per_sec{scenario="vex_ingest_baseline"} 2000
linknotmerge_vex_bench_max_allocated_mb{scenario="vex_ingest_baseline"} 138.63648986816406
linknotmerge_vex_bench_max_allocated_threshold_mb{scenario="vex_ingest_baseline"} 220
linknotmerge_vex_bench_regression_limit{scenario="vex_ingest_baseline"} 1.1499999999999999
linknotmerge_vex_bench_regression_breached{scenario="vex_ingest_baseline"} 0
linknotmerge_vex_bench_mean_total_ms{scenario="vex_ingest_medium"} 1525.9929400000001
linknotmerge_vex_bench_p95_total_ms{scenario="vex_ingest_medium"} 1706.8900000000001
linknotmerge_vex_bench_max_total_ms{scenario="vex_ingest_medium"} 1748.9056
linknotmerge_vex_bench_threshold_ms{scenario="vex_ingest_medium"} 3200
linknotmerge_vex_bench_mean_observation_throughput_per_sec{scenario="vex_ingest_medium"} 5274.5882732259033
linknotmerge_vex_bench_min_observation_throughput_per_sec{scenario="vex_ingest_medium"} 4574.2892012010252
linknotmerge_vex_bench_observation_throughput_floor_per_sec{scenario="vex_ingest_medium"} 2200
linknotmerge_vex_bench_mean_event_throughput_per_sec{scenario="vex_ingest_medium"} 57654.919039209162
linknotmerge_vex_bench_min_event_throughput_per_sec{scenario="vex_ingest_medium"} 48531.735322700952
linknotmerge_vex_bench_event_throughput_floor_per_sec{scenario="vex_ingest_medium"} 2500
linknotmerge_vex_bench_max_allocated_mb{scenario="vex_ingest_medium"} 326.86380004882812
linknotmerge_vex_bench_max_allocated_threshold_mb{scenario="vex_ingest_medium"} 400
linknotmerge_vex_bench_regression_limit{scenario="vex_ingest_medium"} 1.1499999999999999
linknotmerge_vex_bench_regression_breached{scenario="vex_ingest_medium"} 0
linknotmerge_vex_bench_mean_total_ms{scenario="vex_ingest_high"} 2988.50936
linknotmerge_vex_bench_p95_total_ms{scenario="vex_ingest_high"} 3422.1727999999998
linknotmerge_vex_bench_max_total_ms{scenario="vex_ingest_high"} 3438.9364
linknotmerge_vex_bench_threshold_ms{scenario="vex_ingest_high"} 4200
linknotmerge_vex_bench_mean_observation_throughput_per_sec{scenario="vex_ingest_high"} 4066.2299506870645
linknotmerge_vex_bench_min_observation_throughput_per_sec{scenario="vex_ingest_high"} 3489.4509825770551
linknotmerge_vex_bench_observation_throughput_floor_per_sec{scenario="vex_ingest_high"} 2200
linknotmerge_vex_bench_mean_event_throughput_per_sec{scenario="vex_ingest_high"} 52456.949283230162
linknotmerge_vex_bench_min_event_throughput_per_sec{scenario="vex_ingest_high"} 42358.05564361166
linknotmerge_vex_bench_event_throughput_floor_per_sec{scenario="vex_ingest_high"} 2500
linknotmerge_vex_bench_max_allocated_mb{scenario="vex_ingest_high"} 583.99034118652344
linknotmerge_vex_bench_max_allocated_threshold_mb{scenario="vex_ingest_high"} 700
linknotmerge_vex_bench_regression_limit{scenario="vex_ingest_high"} 1.1499999999999999
linknotmerge_vex_bench_regression_breached{scenario="vex_ingest_high"} 0
# HELP linknotmerge_vex_bench_total_ms Link-Not-Merge VEX benchmark total duration (milliseconds).
# TYPE linknotmerge_vex_bench_total_ms gauge
# HELP linknotmerge_vex_bench_throughput_per_sec Link-Not-Merge VEX benchmark observation throughput (observations per second).
# TYPE linknotmerge_vex_bench_throughput_per_sec gauge
# HELP linknotmerge_vex_bench_event_throughput_per_sec Link-Not-Merge VEX benchmark event throughput (events per second).
# TYPE linknotmerge_vex_bench_event_throughput_per_sec gauge
# HELP linknotmerge_vex_bench_allocated_mb Link-Not-Merge VEX benchmark max allocations (megabytes).
# TYPE linknotmerge_vex_bench_allocated_mb gauge
linknotmerge_vex_bench_mean_total_ms{scenario="vex_ingest_baseline"} 842.81913999999995
linknotmerge_vex_bench_p95_total_ms{scenario="vex_ingest_baseline"} 1319.3037799999997
linknotmerge_vex_bench_max_total_ms{scenario="vex_ingest_baseline"} 1432.7674999999999
linknotmerge_vex_bench_threshold_ms{scenario="vex_ingest_baseline"} 2300
linknotmerge_vex_bench_mean_observation_throughput_per_sec{scenario="vex_ingest_baseline"} 5349.8940408829094
linknotmerge_vex_bench_min_observation_throughput_per_sec{scenario="vex_ingest_baseline"} 2791.7997860783416
linknotmerge_vex_bench_observation_throughput_floor_per_sec{scenario="vex_ingest_baseline"} 1800
linknotmerge_vex_bench_mean_event_throughput_per_sec{scenario="vex_ingest_baseline"} 48942.490089432729
linknotmerge_vex_bench_min_event_throughput_per_sec{scenario="vex_ingest_baseline"} 24653.055581276763
linknotmerge_vex_bench_event_throughput_floor_per_sec{scenario="vex_ingest_baseline"} 2000
linknotmerge_vex_bench_max_allocated_mb{scenario="vex_ingest_baseline"} 138.63648986816406
linknotmerge_vex_bench_max_allocated_threshold_mb{scenario="vex_ingest_baseline"} 220
linknotmerge_vex_bench_regression_limit{scenario="vex_ingest_baseline"} 1.1499999999999999
linknotmerge_vex_bench_regression_breached{scenario="vex_ingest_baseline"} 0
linknotmerge_vex_bench_mean_total_ms{scenario="vex_ingest_medium"} 1525.9929400000001
linknotmerge_vex_bench_p95_total_ms{scenario="vex_ingest_medium"} 1706.8900000000001
linknotmerge_vex_bench_max_total_ms{scenario="vex_ingest_medium"} 1748.9056
linknotmerge_vex_bench_threshold_ms{scenario="vex_ingest_medium"} 3200
linknotmerge_vex_bench_mean_observation_throughput_per_sec{scenario="vex_ingest_medium"} 5274.5882732259033
linknotmerge_vex_bench_min_observation_throughput_per_sec{scenario="vex_ingest_medium"} 4574.2892012010252
linknotmerge_vex_bench_observation_throughput_floor_per_sec{scenario="vex_ingest_medium"} 2200
linknotmerge_vex_bench_mean_event_throughput_per_sec{scenario="vex_ingest_medium"} 57654.919039209162
linknotmerge_vex_bench_min_event_throughput_per_sec{scenario="vex_ingest_medium"} 48531.735322700952
linknotmerge_vex_bench_event_throughput_floor_per_sec{scenario="vex_ingest_medium"} 2500
linknotmerge_vex_bench_max_allocated_mb{scenario="vex_ingest_medium"} 326.86380004882812
linknotmerge_vex_bench_max_allocated_threshold_mb{scenario="vex_ingest_medium"} 400
linknotmerge_vex_bench_regression_limit{scenario="vex_ingest_medium"} 1.1499999999999999
linknotmerge_vex_bench_regression_breached{scenario="vex_ingest_medium"} 0
linknotmerge_vex_bench_mean_total_ms{scenario="vex_ingest_high"} 2988.50936
linknotmerge_vex_bench_p95_total_ms{scenario="vex_ingest_high"} 3422.1727999999998
linknotmerge_vex_bench_max_total_ms{scenario="vex_ingest_high"} 3438.9364
linknotmerge_vex_bench_threshold_ms{scenario="vex_ingest_high"} 4200
linknotmerge_vex_bench_mean_observation_throughput_per_sec{scenario="vex_ingest_high"} 4066.2299506870645
linknotmerge_vex_bench_min_observation_throughput_per_sec{scenario="vex_ingest_high"} 3489.4509825770551
linknotmerge_vex_bench_observation_throughput_floor_per_sec{scenario="vex_ingest_high"} 2200
linknotmerge_vex_bench_mean_event_throughput_per_sec{scenario="vex_ingest_high"} 52456.949283230162
linknotmerge_vex_bench_min_event_throughput_per_sec{scenario="vex_ingest_high"} 42358.05564361166
linknotmerge_vex_bench_event_throughput_floor_per_sec{scenario="vex_ingest_high"} 2500
linknotmerge_vex_bench_max_allocated_mb{scenario="vex_ingest_high"} 583.99034118652344
linknotmerge_vex_bench_max_allocated_threshold_mb{scenario="vex_ingest_high"} 700
linknotmerge_vex_bench_regression_limit{scenario="vex_ingest_high"} 1.1499999999999999
linknotmerge_vex_bench_regression_breached{scenario="vex_ingest_high"} 0

View File

@@ -1,4 +1,4 @@
scenario,iterations,events,deliveries,mean_ms,p95_ms,max_ms,mean_throughput_per_sec,min_throughput_per_sec,max_allocated_mb
notify_dispatch_density_05,5,5000,20000,3.4150,4.1722,4.3039,6053938.5172,4646948.1168,0.0000
notify_dispatch_density_20,5,7500,675000,24.2274,25.8517,26.0526,27923335.5855,25909122.3141,0.0000
notify_dispatch_density_40,5,10000,4000080,138.7387,147.7174,149.1124,28916602.9214,26825938.0172,0.0000
scenario,iterations,events,deliveries,mean_ms,p95_ms,max_ms,mean_throughput_per_sec,min_throughput_per_sec,max_allocated_mb
notify_dispatch_density_05,5,5000,20000,3.4150,4.1722,4.3039,6053938.5172,4646948.1168,0.0000
notify_dispatch_density_20,5,7500,675000,24.2274,25.8517,26.0526,27923335.5855,25909122.3141,0.0000
notify_dispatch_density_40,5,10000,4000080,138.7387,147.7174,149.1124,28916602.9214,26825938.0172,0.0000
1 scenario iterations events deliveries mean_ms p95_ms max_ms mean_throughput_per_sec min_throughput_per_sec max_allocated_mb
2 notify_dispatch_density_05 5 5000 20000 3.4150 4.1722 4.3039 6053938.5172 4646948.1168 0.0000
3 notify_dispatch_density_20 5 7500 675000 24.2274 25.8517 26.0526 27923335.5855 25909122.3141 0.0000
4 notify_dispatch_density_40 5 10000 4000080 138.7387 147.7174 149.1124 28916602.9214 26825938.0172 0.0000

View File

@@ -1,84 +1,84 @@
{
"schemaVersion": "notify-dispatch-bench/1.0",
"capturedAt": "2025-10-26T20:28:56.3603045+00:00",
"scenarios": [
{
"id": "notify_dispatch_density_05",
"label": "50 rules / 5% fanout",
"iterations": 5,
"totalEvents": 5000,
"totalRules": 50,
"actionsPerRule": 2,
"averageMatchesPerEvent": 2,
"minMatchesPerEvent": 2,
"maxMatchesPerEvent": 2,
"averageDeliveriesPerEvent": 4,
"totalDeliveries": 20000,
"meanMs": 3.41498,
"p95Ms": 4.17216,
"maxMs": 4.3039,
"meanThroughputPerSecond": 6053938.51717893,
"minThroughputPerSecond": 4646948.116824276,
"maxAllocatedMb": 0,
"thresholdMs": 400,
"minThroughputThresholdPerSecond": 15000,
"maxAllocatedThresholdMb": 128,
"regression": {
"limit": 1.15,
"breached": false
}
},
{
"id": "notify_dispatch_density_20",
"label": "150 rules / 20% fanout",
"iterations": 5,
"totalEvents": 7500,
"totalRules": 150,
"actionsPerRule": 3,
"averageMatchesPerEvent": 30,
"minMatchesPerEvent": 30,
"maxMatchesPerEvent": 30,
"averageDeliveriesPerEvent": 90,
"totalDeliveries": 675000,
"meanMs": 24.2274,
"p95Ms": 25.85172,
"maxMs": 26.0526,
"meanThroughputPerSecond": 27923335.585545264,
"minThroughputPerSecond": 25909122.314087655,
"maxAllocatedMb": 0,
"thresholdMs": 650,
"minThroughputThresholdPerSecond": 30000,
"maxAllocatedThresholdMb": 192,
"regression": {
"limit": 1.15,
"breached": false
}
},
{
"id": "notify_dispatch_density_40",
"label": "300 rules / 40% fanout",
"iterations": 5,
"totalEvents": 10000,
"totalRules": 300,
"actionsPerRule": 4,
"averageMatchesPerEvent": 100.002,
"minMatchesPerEvent": 60,
"maxMatchesPerEvent": 120,
"averageDeliveriesPerEvent": 400.008,
"totalDeliveries": 4000080,
"meanMs": 138.73866,
"p95Ms": 147.71738000000002,
"maxMs": 149.1124,
"meanThroughputPerSecond": 28916602.921385907,
"minThroughputPerSecond": 26825938.017227273,
"maxAllocatedMb": 0,
"thresholdMs": 900,
"minThroughputThresholdPerSecond": 45000,
"maxAllocatedThresholdMb": 256,
"regression": {
"limit": 1.15,
"breached": false
}
}
]
{
"schemaVersion": "notify-dispatch-bench/1.0",
"capturedAt": "2025-10-26T20:28:56.3603045+00:00",
"scenarios": [
{
"id": "notify_dispatch_density_05",
"label": "50 rules / 5% fanout",
"iterations": 5,
"totalEvents": 5000,
"totalRules": 50,
"actionsPerRule": 2,
"averageMatchesPerEvent": 2,
"minMatchesPerEvent": 2,
"maxMatchesPerEvent": 2,
"averageDeliveriesPerEvent": 4,
"totalDeliveries": 20000,
"meanMs": 3.41498,
"p95Ms": 4.17216,
"maxMs": 4.3039,
"meanThroughputPerSecond": 6053938.51717893,
"minThroughputPerSecond": 4646948.116824276,
"maxAllocatedMb": 0,
"thresholdMs": 400,
"minThroughputThresholdPerSecond": 15000,
"maxAllocatedThresholdMb": 128,
"regression": {
"limit": 1.15,
"breached": false
}
},
{
"id": "notify_dispatch_density_20",
"label": "150 rules / 20% fanout",
"iterations": 5,
"totalEvents": 7500,
"totalRules": 150,
"actionsPerRule": 3,
"averageMatchesPerEvent": 30,
"minMatchesPerEvent": 30,
"maxMatchesPerEvent": 30,
"averageDeliveriesPerEvent": 90,
"totalDeliveries": 675000,
"meanMs": 24.2274,
"p95Ms": 25.85172,
"maxMs": 26.0526,
"meanThroughputPerSecond": 27923335.585545264,
"minThroughputPerSecond": 25909122.314087655,
"maxAllocatedMb": 0,
"thresholdMs": 650,
"minThroughputThresholdPerSecond": 30000,
"maxAllocatedThresholdMb": 192,
"regression": {
"limit": 1.15,
"breached": false
}
},
{
"id": "notify_dispatch_density_40",
"label": "300 rules / 40% fanout",
"iterations": 5,
"totalEvents": 10000,
"totalRules": 300,
"actionsPerRule": 4,
"averageMatchesPerEvent": 100.002,
"minMatchesPerEvent": 60,
"maxMatchesPerEvent": 120,
"averageDeliveriesPerEvent": 400.008,
"totalDeliveries": 4000080,
"meanMs": 138.73866,
"p95Ms": 147.71738000000002,
"maxMs": 149.1124,
"meanThroughputPerSecond": 28916602.921385907,
"minThroughputPerSecond": 26825938.017227273,
"maxAllocatedMb": 0,
"thresholdMs": 900,
"minThroughputThresholdPerSecond": 45000,
"maxAllocatedThresholdMb": 256,
"regression": {
"limit": 1.15,
"breached": false
}
}
]
}

View File

@@ -1,39 +1,39 @@
# HELP notify_dispatch_bench_duration_ms Notify dispatch benchmark duration metrics (milliseconds).
# TYPE notify_dispatch_bench_duration_ms gauge
# HELP notify_dispatch_bench_throughput_per_sec Notify dispatch benchmark throughput metrics (deliveries per second).
# TYPE notify_dispatch_bench_throughput_per_sec gauge
# HELP notify_dispatch_bench_allocation_mb Notify dispatch benchmark allocation metrics (megabytes).
# TYPE notify_dispatch_bench_allocation_mb gauge
notify_dispatch_bench_mean_ms{scenario="notify_dispatch_density_05"} 3.4149799999999999
notify_dispatch_bench_p95_ms{scenario="notify_dispatch_density_05"} 4.1721599999999999
notify_dispatch_bench_max_ms{scenario="notify_dispatch_density_05"} 4.3038999999999996
notify_dispatch_bench_threshold_ms{scenario="notify_dispatch_density_05"} 400
notify_dispatch_bench_mean_throughput_per_sec{scenario="notify_dispatch_density_05"} 6053938.5171789303
notify_dispatch_bench_min_throughput_per_sec{scenario="notify_dispatch_density_05"} 4646948.1168242758
notify_dispatch_bench_min_throughput_threshold_per_sec{scenario="notify_dispatch_density_05"} 15000
notify_dispatch_bench_max_allocated_mb{scenario="notify_dispatch_density_05"} 0
notify_dispatch_bench_max_allocated_threshold_mb{scenario="notify_dispatch_density_05"} 128
notify_dispatch_bench_regression_limit{scenario="notify_dispatch_density_05"} 1.1499999999999999
notify_dispatch_bench_regression_breached{scenario="notify_dispatch_density_05"} 0
notify_dispatch_bench_mean_ms{scenario="notify_dispatch_density_20"} 24.227399999999999
notify_dispatch_bench_p95_ms{scenario="notify_dispatch_density_20"} 25.85172
notify_dispatch_bench_max_ms{scenario="notify_dispatch_density_20"} 26.052600000000002
notify_dispatch_bench_threshold_ms{scenario="notify_dispatch_density_20"} 650
notify_dispatch_bench_mean_throughput_per_sec{scenario="notify_dispatch_density_20"} 27923335.585545264
notify_dispatch_bench_min_throughput_per_sec{scenario="notify_dispatch_density_20"} 25909122.314087655
notify_dispatch_bench_min_throughput_threshold_per_sec{scenario="notify_dispatch_density_20"} 30000
notify_dispatch_bench_max_allocated_mb{scenario="notify_dispatch_density_20"} 0
notify_dispatch_bench_max_allocated_threshold_mb{scenario="notify_dispatch_density_20"} 192
notify_dispatch_bench_regression_limit{scenario="notify_dispatch_density_20"} 1.1499999999999999
notify_dispatch_bench_regression_breached{scenario="notify_dispatch_density_20"} 0
notify_dispatch_bench_mean_ms{scenario="notify_dispatch_density_40"} 138.73866000000001
notify_dispatch_bench_p95_ms{scenario="notify_dispatch_density_40"} 147.71738000000002
notify_dispatch_bench_max_ms{scenario="notify_dispatch_density_40"} 149.11240000000001
notify_dispatch_bench_threshold_ms{scenario="notify_dispatch_density_40"} 900
notify_dispatch_bench_mean_throughput_per_sec{scenario="notify_dispatch_density_40"} 28916602.921385907
notify_dispatch_bench_min_throughput_per_sec{scenario="notify_dispatch_density_40"} 26825938.017227273
notify_dispatch_bench_min_throughput_threshold_per_sec{scenario="notify_dispatch_density_40"} 45000
notify_dispatch_bench_max_allocated_mb{scenario="notify_dispatch_density_40"} 0
notify_dispatch_bench_max_allocated_threshold_mb{scenario="notify_dispatch_density_40"} 256
notify_dispatch_bench_regression_limit{scenario="notify_dispatch_density_40"} 1.1499999999999999
notify_dispatch_bench_regression_breached{scenario="notify_dispatch_density_40"} 0
# HELP notify_dispatch_bench_duration_ms Notify dispatch benchmark duration metrics (milliseconds).
# TYPE notify_dispatch_bench_duration_ms gauge
# HELP notify_dispatch_bench_throughput_per_sec Notify dispatch benchmark throughput metrics (deliveries per second).
# TYPE notify_dispatch_bench_throughput_per_sec gauge
# HELP notify_dispatch_bench_allocation_mb Notify dispatch benchmark allocation metrics (megabytes).
# TYPE notify_dispatch_bench_allocation_mb gauge
notify_dispatch_bench_mean_ms{scenario="notify_dispatch_density_05"} 3.4149799999999999
notify_dispatch_bench_p95_ms{scenario="notify_dispatch_density_05"} 4.1721599999999999
notify_dispatch_bench_max_ms{scenario="notify_dispatch_density_05"} 4.3038999999999996
notify_dispatch_bench_threshold_ms{scenario="notify_dispatch_density_05"} 400
notify_dispatch_bench_mean_throughput_per_sec{scenario="notify_dispatch_density_05"} 6053938.5171789303
notify_dispatch_bench_min_throughput_per_sec{scenario="notify_dispatch_density_05"} 4646948.1168242758
notify_dispatch_bench_min_throughput_threshold_per_sec{scenario="notify_dispatch_density_05"} 15000
notify_dispatch_bench_max_allocated_mb{scenario="notify_dispatch_density_05"} 0
notify_dispatch_bench_max_allocated_threshold_mb{scenario="notify_dispatch_density_05"} 128
notify_dispatch_bench_regression_limit{scenario="notify_dispatch_density_05"} 1.1499999999999999
notify_dispatch_bench_regression_breached{scenario="notify_dispatch_density_05"} 0
notify_dispatch_bench_mean_ms{scenario="notify_dispatch_density_20"} 24.227399999999999
notify_dispatch_bench_p95_ms{scenario="notify_dispatch_density_20"} 25.85172
notify_dispatch_bench_max_ms{scenario="notify_dispatch_density_20"} 26.052600000000002
notify_dispatch_bench_threshold_ms{scenario="notify_dispatch_density_20"} 650
notify_dispatch_bench_mean_throughput_per_sec{scenario="notify_dispatch_density_20"} 27923335.585545264
notify_dispatch_bench_min_throughput_per_sec{scenario="notify_dispatch_density_20"} 25909122.314087655
notify_dispatch_bench_min_throughput_threshold_per_sec{scenario="notify_dispatch_density_20"} 30000
notify_dispatch_bench_max_allocated_mb{scenario="notify_dispatch_density_20"} 0
notify_dispatch_bench_max_allocated_threshold_mb{scenario="notify_dispatch_density_20"} 192
notify_dispatch_bench_regression_limit{scenario="notify_dispatch_density_20"} 1.1499999999999999
notify_dispatch_bench_regression_breached{scenario="notify_dispatch_density_20"} 0
notify_dispatch_bench_mean_ms{scenario="notify_dispatch_density_40"} 138.73866000000001
notify_dispatch_bench_p95_ms{scenario="notify_dispatch_density_40"} 147.71738000000002
notify_dispatch_bench_max_ms{scenario="notify_dispatch_density_40"} 149.11240000000001
notify_dispatch_bench_threshold_ms{scenario="notify_dispatch_density_40"} 900
notify_dispatch_bench_mean_throughput_per_sec{scenario="notify_dispatch_density_40"} 28916602.921385907
notify_dispatch_bench_min_throughput_per_sec{scenario="notify_dispatch_density_40"} 26825938.017227273
notify_dispatch_bench_min_throughput_threshold_per_sec{scenario="notify_dispatch_density_40"} 45000
notify_dispatch_bench_max_allocated_mb{scenario="notify_dispatch_density_40"} 0
notify_dispatch_bench_max_allocated_threshold_mb{scenario="notify_dispatch_density_40"} 256
notify_dispatch_bench_regression_limit{scenario="notify_dispatch_density_40"} 1.1499999999999999
notify_dispatch_bench_regression_breached{scenario="notify_dispatch_density_40"} 0

View File

@@ -1,2 +1,2 @@
scenario,iterations,findings,mean_ms,p95_ms,max_ms,mean_throughput_per_sec,min_throughput_per_sec,max_allocated_mb
policy_eval_baseline,3,1000000,1109.3542,1257.7493,1280.1721,912094.5581,781144.9726,563.6901
scenario,iterations,findings,mean_ms,p95_ms,max_ms,mean_throughput_per_sec,min_throughput_per_sec,max_allocated_mb
policy_eval_baseline,3,1000000,1109.3542,1257.7493,1280.1721,912094.5581,781144.9726,563.6901
1 scenario iterations findings mean_ms p95_ms max_ms mean_throughput_per_sec min_throughput_per_sec max_allocated_mb
2 policy_eval_baseline 3 1000000 1109.3542 1257.7493 1280.1721 912094.5581 781144.9726 563.6901

View File

@@ -1,25 +1,25 @@
{
"schemaVersion": "policy-bench/1.0",
"capturedAt": "2025-10-26T19:57:27.4363234+00:00",
"scenarios": [
{
"id": "policy_eval_baseline",
"label": "Policy evaluation (100k components, 1M findings)",
"iterations": 3,
"findingCount": 1000000,
"meanMs": 1109.3542333333335,
"p95Ms": 1257.74929,
"maxMs": 1280.1721,
"meanThroughputPerSecond": 912094.5580512757,
"minThroughputPerSecond": 781144.9726173537,
"maxAllocatedMb": 563.6900634765625,
"thresholdMs": 20000,
"minThroughputThresholdPerSecond": 60000,
"maxAllocatedThresholdMb": 900,
"regression": {
"limit": 1.15,
"breached": false
}
}
]
{
"schemaVersion": "policy-bench/1.0",
"capturedAt": "2025-10-26T19:57:27.4363234+00:00",
"scenarios": [
{
"id": "policy_eval_baseline",
"label": "Policy evaluation (100k components, 1M findings)",
"iterations": 3,
"findingCount": 1000000,
"meanMs": 1109.3542333333335,
"p95Ms": 1257.74929,
"maxMs": 1280.1721,
"meanThroughputPerSecond": 912094.5580512757,
"minThroughputPerSecond": 781144.9726173537,
"maxAllocatedMb": 563.6900634765625,
"thresholdMs": 20000,
"minThroughputThresholdPerSecond": 60000,
"maxAllocatedThresholdMb": 900,
"regression": {
"limit": 1.15,
"breached": false
}
}
]
}

View File

@@ -1,17 +1,17 @@
# HELP policy_engine_bench_duration_ms Policy Engine benchmark duration metrics (milliseconds).
# TYPE policy_engine_bench_duration_ms gauge
# HELP policy_engine_bench_throughput_per_sec Policy Engine benchmark throughput metrics (findings per second).
# TYPE policy_engine_bench_throughput_per_sec gauge
# HELP policy_engine_bench_allocation_mb Policy Engine benchmark allocation metrics (megabytes).
# TYPE policy_engine_bench_allocation_mb gauge
policy_engine_bench_mean_ms{scenario="policy_eval_baseline"} 1109.3542333333335
policy_engine_bench_p95_ms{scenario="policy_eval_baseline"} 1257.74929
policy_engine_bench_max_ms{scenario="policy_eval_baseline"} 1280.1721
policy_engine_bench_threshold_ms{scenario="policy_eval_baseline"} 20000
policy_engine_bench_mean_throughput_per_sec{scenario="policy_eval_baseline"} 912094.55805127567
policy_engine_bench_min_throughput_per_sec{scenario="policy_eval_baseline"} 781144.97261735366
policy_engine_bench_min_throughput_threshold_per_sec{scenario="policy_eval_baseline"} 60000
policy_engine_bench_max_allocated_mb{scenario="policy_eval_baseline"} 563.6900634765625
policy_engine_bench_max_allocated_threshold_mb{scenario="policy_eval_baseline"} 900
policy_engine_bench_regression_limit{scenario="policy_eval_baseline"} 1.1499999999999999
policy_engine_bench_regression_breached{scenario="policy_eval_baseline"} 0
# HELP policy_engine_bench_duration_ms Policy Engine benchmark duration metrics (milliseconds).
# TYPE policy_engine_bench_duration_ms gauge
# HELP policy_engine_bench_throughput_per_sec Policy Engine benchmark throughput metrics (findings per second).
# TYPE policy_engine_bench_throughput_per_sec gauge
# HELP policy_engine_bench_allocation_mb Policy Engine benchmark allocation metrics (megabytes).
# TYPE policy_engine_bench_allocation_mb gauge
policy_engine_bench_mean_ms{scenario="policy_eval_baseline"} 1109.3542333333335
policy_engine_bench_p95_ms{scenario="policy_eval_baseline"} 1257.74929
policy_engine_bench_max_ms{scenario="policy_eval_baseline"} 1280.1721
policy_engine_bench_threshold_ms{scenario="policy_eval_baseline"} 20000
policy_engine_bench_mean_throughput_per_sec{scenario="policy_eval_baseline"} 912094.55805127567
policy_engine_bench_min_throughput_per_sec{scenario="policy_eval_baseline"} 781144.97261735366
policy_engine_bench_min_throughput_threshold_per_sec{scenario="policy_eval_baseline"} 60000
policy_engine_bench_max_allocated_mb{scenario="policy_eval_baseline"} 563.6900634765625
policy_engine_bench_max_allocated_threshold_mb{scenario="policy_eval_baseline"} 900
policy_engine_bench_regression_limit{scenario="policy_eval_baseline"} 1.1499999999999999
policy_engine_bench_regression_breached{scenario="policy_eval_baseline"} 0

View File

@@ -1,32 +1,32 @@
[
{
"ScenarioName": "baseline",
"Success": true,
"ChangedCount": 2,
"Failures": [],
"ActualStatuses": {
"library:pkg/openssl@1.1.1w": "Blocked",
"library:pkg/internal-runtime@1.0.0": "Warned"
}
},
{
"ScenarioName": "internal-only",
"Success": true,
"ChangedCount": 2,
"Failures": [],
"ActualStatuses": {
"library:pkg/internal-app@2.0.0": "RequiresVex",
"library:pkg/kev-component@3.1.4": "RequiresVex"
}
},
{
"ScenarioName": "serverless",
"Success": true,
"ChangedCount": 2,
"Failures": [],
"ActualStatuses": {
"library:pkg/aws-lambda@1.0.0": "Blocked",
"image:sha256:untrusted-base": "Blocked"
}
}
[
{
"ScenarioName": "baseline",
"Success": true,
"ChangedCount": 2,
"Failures": [],
"ActualStatuses": {
"library:pkg/openssl@1.1.1w": "Blocked",
"library:pkg/internal-runtime@1.0.0": "Warned"
}
},
{
"ScenarioName": "internal-only",
"Success": true,
"ChangedCount": 2,
"Failures": [],
"ActualStatuses": {
"library:pkg/internal-app@2.0.0": "RequiresVex",
"library:pkg/kev-component@3.1.4": "RequiresVex"
}
},
{
"ScenarioName": "serverless",
"Success": true,
"ChangedCount": 2,
"Failures": [],
"ActualStatuses": {
"library:pkg/aws-lambda@1.0.0": "Blocked",
"image:sha256:untrusted-base": "Blocked"
}
}
]

View File

@@ -1,4 +1,4 @@
using System;
using CycloneDX.Models;
Console.WriteLine(string.Join(", ", Enum.GetNames(typeof(Component.Classification))));
using System;
using CycloneDX.Models;
Console.WriteLine(string.Join(", ", Enum.GetNames(typeof(Component.Classification))));