Add Policy DSL Validator, Schema Exporter, and Simulation Smoke tools
Some checks failed
Docs CI / lint-and-preview (push) Has been cancelled

- Implemented PolicyDslValidator with command-line options for strict mode and JSON output.
- Created PolicySchemaExporter to generate JSON schemas for policy-related models.
- Developed PolicySimulationSmoke tool to validate policy simulations against expected outcomes.
- Added project files and necessary dependencies for each tool.
- Ensured proper error handling and usage instructions across tools.
This commit is contained in:
2025-10-27 08:00:11 +02:00
parent 651b8e0fa3
commit 96d52884e8
712 changed files with 49449 additions and 6124 deletions

View File

@@ -0,0 +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>

View File

@@ -0,0 +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>

View File

@@ -0,0 +1,858 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v10.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v10.0": {
"StellaOps.Scanner.Analyzers.Lang.Python/1.0.0": {
"dependencies": {
"SharpCompress": "0.41.0",
"StellaOps.Scanner.Analyzers.Lang": "1.0.0"
},
"runtime": {
"StellaOps.Scanner.Analyzers.Lang.Python.dll": {}
}
},
"Konscious.Security.Cryptography.Argon2/1.3.1": {
"dependencies": {
"Konscious.Security.Cryptography.Blake2": "1.1.1"
},
"runtime": {
"lib/net8.0/Konscious.Security.Cryptography.Argon2.dll": {
"assemblyVersion": "1.3.1.0",
"fileVersion": "1.3.1.0"
}
}
},
"Konscious.Security.Cryptography.Blake2/1.1.1": {
"runtime": {
"lib/net8.0/Konscious.Security.Cryptography.Blake2.dll": {
"assemblyVersion": "1.1.1.0",
"fileVersion": "1.1.1.0"
}
}
},
"Microsoft.Extensions.Configuration/10.0.0-rc.2.25502.107": {
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.Primitives": "10.0.0-rc.2.25502.107"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Configuration.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.25.50307"
}
}
},
"Microsoft.Extensions.Configuration.Abstractions/10.0.0-rc.2.25502.107": {
"dependencies": {
"Microsoft.Extensions.Primitives": "10.0.0-rc.2.25502.107"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Configuration.Abstractions.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.25.50307"
}
}
},
"Microsoft.Extensions.Configuration.Binder/10.0.0-rc.2.25502.107": {
"dependencies": {
"Microsoft.Extensions.Configuration": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-rc.2.25502.107"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Configuration.Binder.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.25.50307"
}
}
},
"Microsoft.Extensions.Configuration.EnvironmentVariables/10.0.0-rc.2.25502.107": {
"dependencies": {
"Microsoft.Extensions.Configuration": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-rc.2.25502.107"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Configuration.EnvironmentVariables.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.25.50307"
}
}
},
"Microsoft.Extensions.Configuration.FileExtensions/10.0.0-rc.2.25502.107": {
"dependencies": {
"Microsoft.Extensions.Configuration": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.FileProviders.Abstractions": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.FileProviders.Physical": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.Primitives": "10.0.0-rc.2.25502.107"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Configuration.FileExtensions.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.25.50307"
}
}
},
"Microsoft.Extensions.Configuration.Json/10.0.0-rc.2.25502.107": {
"dependencies": {
"Microsoft.Extensions.Configuration": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.Configuration.FileExtensions": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.FileProviders.Abstractions": "10.0.0-rc.2.25502.107"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Configuration.Json.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.25.50307"
}
}
},
"Microsoft.Extensions.DependencyInjection/10.0.0-rc.2.25502.107": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-rc.2.25502.107"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.DependencyInjection.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.25.50307"
}
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions/10.0.0-rc.2.25502.107": {
"runtime": {
"lib/net10.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.25.50307"
}
}
},
"Microsoft.Extensions.Diagnostics/10.0.0-rc.2.25502.107": {
"dependencies": {
"Microsoft.Extensions.Configuration": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.Diagnostics.Abstractions": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.Options.ConfigurationExtensions": "10.0.0-rc.2.25502.107"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Diagnostics.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.25.50307"
}
}
},
"Microsoft.Extensions.Diagnostics.Abstractions/10.0.0-rc.2.25502.107": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.Options": "10.0.0-rc.2.25502.107"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Diagnostics.Abstractions.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.25.50307"
}
}
},
"Microsoft.Extensions.FileProviders.Abstractions/10.0.0-rc.2.25502.107": {
"dependencies": {
"Microsoft.Extensions.Primitives": "10.0.0-rc.2.25502.107"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.FileProviders.Abstractions.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.25.50307"
}
}
},
"Microsoft.Extensions.FileProviders.Physical/10.0.0-rc.2.25502.107": {
"dependencies": {
"Microsoft.Extensions.FileProviders.Abstractions": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.FileSystemGlobbing": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.Primitives": "10.0.0-rc.2.25502.107"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.FileProviders.Physical.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.25.50307"
}
}
},
"Microsoft.Extensions.FileSystemGlobbing/10.0.0-rc.2.25502.107": {
"runtime": {
"lib/net10.0/Microsoft.Extensions.FileSystemGlobbing.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.25.50307"
}
}
},
"Microsoft.Extensions.Http/10.0.0-rc.2.25502.107": {
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.Diagnostics": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.Logging": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.Options": "10.0.0-rc.2.25502.107"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Http.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.25.50307"
}
}
},
"Microsoft.Extensions.Http.Polly/10.0.0-rc.2.25502.107": {
"dependencies": {
"Microsoft.Extensions.Http": "10.0.0-rc.2.25502.107",
"Polly": "7.2.4",
"Polly.Extensions.Http": "3.0.0"
},
"runtime": {
"lib/netstandard2.0/Microsoft.Extensions.Http.Polly.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.25.50307"
}
}
},
"Microsoft.Extensions.Logging/10.0.0-rc.2.25502.107": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.Options": "10.0.0-rc.2.25502.107"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Logging.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.25.50307"
}
}
},
"Microsoft.Extensions.Logging.Abstractions/10.0.0-rc.2.25502.107": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-rc.2.25502.107"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Logging.Abstractions.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.25.50307"
}
}
},
"Microsoft.Extensions.Options/10.0.0-rc.2.25502.107": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.Primitives": "10.0.0-rc.2.25502.107"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Options.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.25.50307"
}
}
},
"Microsoft.Extensions.Options.ConfigurationExtensions/10.0.0-rc.2.25502.107": {
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.Configuration.Binder": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.Options": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.Primitives": "10.0.0-rc.2.25502.107"
},
"runtime": {
"lib/net10.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.25.50307"
}
}
},
"Microsoft.Extensions.Primitives/10.0.0-rc.2.25502.107": {
"runtime": {
"lib/net10.0/Microsoft.Extensions.Primitives.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.25.50307"
}
}
},
"Microsoft.IdentityModel.Abstractions/8.14.0": {
"runtime": {
"lib/net9.0/Microsoft.IdentityModel.Abstractions.dll": {
"assemblyVersion": "8.14.0.0",
"fileVersion": "8.14.0.60815"
}
}
},
"Microsoft.IdentityModel.JsonWebTokens/7.2.0": {
"dependencies": {
"Microsoft.IdentityModel.Tokens": "8.14.0"
},
"runtime": {
"lib/net8.0/Microsoft.IdentityModel.JsonWebTokens.dll": {
"assemblyVersion": "7.2.0.0",
"fileVersion": "7.2.0.50110"
}
}
},
"Microsoft.IdentityModel.Logging/8.14.0": {
"dependencies": {
"Microsoft.IdentityModel.Abstractions": "8.14.0"
},
"runtime": {
"lib/net9.0/Microsoft.IdentityModel.Logging.dll": {
"assemblyVersion": "8.14.0.0",
"fileVersion": "8.14.0.60815"
}
}
},
"Microsoft.IdentityModel.Tokens/8.14.0": {
"dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "10.0.0-rc.2.25502.107",
"Microsoft.IdentityModel.Logging": "8.14.0"
},
"runtime": {
"lib/net9.0/Microsoft.IdentityModel.Tokens.dll": {
"assemblyVersion": "8.14.0.0",
"fileVersion": "8.14.0.60815"
}
}
},
"NetEscapades.Configuration.Yaml/2.1.0": {
"dependencies": {
"Microsoft.Extensions.Configuration": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.Configuration.FileExtensions": "10.0.0-rc.2.25502.107",
"YamlDotNet": "9.1.0"
},
"runtime": {
"lib/netstandard2.0/NetEscapades.Configuration.Yaml.dll": {
"assemblyVersion": "2.1.0.0",
"fileVersion": "2.1.0.0"
}
}
},
"Pipelines.Sockets.Unofficial/2.2.8": {
"runtime": {
"lib/net5.0/Pipelines.Sockets.Unofficial.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "2.2.8.1080"
}
}
},
"Polly/7.2.4": {
"runtime": {
"lib/netstandard2.0/Polly.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.2.4.982"
}
}
},
"Polly.Extensions.Http/3.0.0": {
"dependencies": {
"Polly": "7.2.4"
},
"runtime": {
"lib/netstandard2.0/Polly.Extensions.Http.dll": {
"assemblyVersion": "3.0.0.0",
"fileVersion": "3.0.0.0"
}
}
},
"SharpCompress/0.41.0": {
"dependencies": {
"ZstdSharp.Port": "0.8.6"
},
"runtime": {
"lib/net8.0/SharpCompress.dll": {
"assemblyVersion": "0.41.0.0",
"fileVersion": "0.41.0.0"
}
}
},
"StackExchange.Redis/2.8.24": {
"dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "10.0.0-rc.2.25502.107",
"Pipelines.Sockets.Unofficial": "2.2.8"
},
"runtime": {
"lib/net8.0/StackExchange.Redis.dll": {
"assemblyVersion": "2.0.0.0",
"fileVersion": "2.8.24.3255"
}
}
},
"System.IdentityModel.Tokens.Jwt/7.2.0": {
"dependencies": {
"Microsoft.IdentityModel.JsonWebTokens": "7.2.0",
"Microsoft.IdentityModel.Tokens": "8.14.0"
},
"runtime": {
"lib/net8.0/System.IdentityModel.Tokens.Jwt.dll": {
"assemblyVersion": "7.2.0.0",
"fileVersion": "7.2.0.50110"
}
}
},
"YamlDotNet/9.1.0": {
"runtime": {
"lib/netstandard2.1/YamlDotNet.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.1.0.0"
}
}
},
"ZstdSharp.Port/0.8.6": {
"runtime": {
"lib/net9.0/ZstdSharp.dll": {
"assemblyVersion": "0.8.6.0",
"fileVersion": "0.8.6.0"
}
}
},
"StellaOps.Auth.Abstractions/1.0.0-preview.1": {
"dependencies": {
"SharpCompress": "0.41.0"
},
"runtime": {
"StellaOps.Auth.Abstractions.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
},
"StellaOps.Auth.Client/1.0.0-preview.1": {
"dependencies": {
"Microsoft.Extensions.Http.Polly": "10.0.0-rc.2.25502.107",
"Microsoft.IdentityModel.Tokens": "8.14.0",
"SharpCompress": "0.41.0",
"StellaOps.Auth.Abstractions": "1.0.0-preview.1",
"StellaOps.Configuration": "1.0.0"
},
"runtime": {
"StellaOps.Auth.Client.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
},
"StellaOps.Auth.Security/1.0.0-preview.1": {
"dependencies": {
"Microsoft.IdentityModel.Tokens": "8.14.0",
"SharpCompress": "0.41.0",
"StackExchange.Redis": "2.8.24",
"System.IdentityModel.Tokens.Jwt": "7.2.0"
},
"runtime": {
"StellaOps.Auth.Security.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
},
"StellaOps.Authority.Plugins.Abstractions/1.0.0": {
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0-rc.2.25502.107",
"SharpCompress": "0.41.0",
"StellaOps.Auth.Abstractions": "1.0.0-preview.1",
"StellaOps.Cryptography": "1.0.0"
},
"runtime": {
"StellaOps.Authority.Plugins.Abstractions.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
},
"StellaOps.Configuration/1.0.0": {
"dependencies": {
"Microsoft.Extensions.Configuration": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.Configuration.Binder": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.Configuration.FileExtensions": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.Configuration.Json": "10.0.0-rc.2.25502.107",
"NetEscapades.Configuration.Yaml": "2.1.0",
"SharpCompress": "0.41.0",
"StellaOps.Authority.Plugins.Abstractions": "1.0.0",
"StellaOps.Cryptography": "1.0.0"
},
"runtime": {
"StellaOps.Configuration.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
},
"StellaOps.Cryptography/1.0.0": {
"dependencies": {
"Konscious.Security.Cryptography.Argon2": "1.3.1",
"Microsoft.IdentityModel.Tokens": "8.14.0",
"SharpCompress": "0.41.0"
},
"runtime": {
"StellaOps.Cryptography.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
},
"StellaOps.DependencyInjection/1.0.0": {
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-rc.2.25502.107",
"SharpCompress": "0.41.0"
},
"runtime": {
"StellaOps.DependencyInjection.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
},
"StellaOps.Plugin/1.0.0": {
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0-rc.2.25502.107",
"SharpCompress": "0.41.0",
"StellaOps.DependencyInjection": "1.0.0"
},
"runtime": {
"StellaOps.Plugin.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
},
"StellaOps.Scanner.Analyzers.Lang/1.0.0": {
"dependencies": {
"SharpCompress": "0.41.0",
"StellaOps.Plugin": "1.0.0",
"StellaOps.Scanner.Core": "1.0.0"
},
"runtime": {
"StellaOps.Scanner.Analyzers.Lang.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
},
"StellaOps.Scanner.Core/1.0.0": {
"dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "10.0.0-rc.2.25502.107",
"Microsoft.Extensions.Options": "10.0.0-rc.2.25502.107",
"SharpCompress": "0.41.0",
"StellaOps.Auth.Client": "1.0.0-preview.1",
"StellaOps.Auth.Security": "1.0.0-preview.1"
},
"runtime": {
"StellaOps.Scanner.Core.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
}
}
},
"libraries": {
"StellaOps.Scanner.Analyzers.Lang.Python/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"Konscious.Security.Cryptography.Argon2/1.3.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-T+OAGwzYYXftahpOxO7J4xA5K6urxwGnWQf3M+Jpi+76Azv/0T3M5SuN+h7/QvXuiqNw3ZEZ5QqVLI5ygDAylw==",
"path": "konscious.security.cryptography.argon2/1.3.1",
"hashPath": "konscious.security.cryptography.argon2.1.3.1.nupkg.sha512"
},
"Konscious.Security.Cryptography.Blake2/1.1.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-odwOyzj/J/lHJZNwFWJGU/LRecBShupAJ2S8TQqZfhUe9niHzu/voBYK5wuVKsvSpzbfupKQYZguVyIk1sgOkQ==",
"path": "konscious.security.cryptography.blake2/1.1.1",
"hashPath": "konscious.security.cryptography.blake2.1.1.1.nupkg.sha512"
},
"Microsoft.Extensions.Configuration/10.0.0-rc.2.25502.107": {
"type": "package",
"serviceable": true,
"sha512": "sha512-273Ggibh3DdVrj47ENbUGIirOiqmLTAizpkvOD584Ps6NL/CMXPzesijnJgsjp7Fv/UCp69FKYBaSxZZ3q5R9g==",
"path": "microsoft.extensions.configuration/10.0.0-rc.2.25502.107",
"hashPath": "microsoft.extensions.configuration.10.0.0-rc.2.25502.107.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.Abstractions/10.0.0-rc.2.25502.107": {
"type": "package",
"serviceable": true,
"sha512": "sha512-H+i/Qy30Rg/K9BcW2Z6DCHPCzwMH3bCwNOjEz31shWTUDK8GeeeMnrKVusprTcRA2Y6yPST+hg2zc3whPEs14Q==",
"path": "microsoft.extensions.configuration.abstractions/10.0.0-rc.2.25502.107",
"hashPath": "microsoft.extensions.configuration.abstractions.10.0.0-rc.2.25502.107.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.Binder/10.0.0-rc.2.25502.107": {
"type": "package",
"serviceable": true,
"sha512": "sha512-aA6/V6lw1Gueyb1PqhHAl/i/qUUuv+Fusfk4oaMOzzOjspBkYtPpNHCmml/0t1x0/DnZoed+u2WwpP+mSwd8Dg==",
"path": "microsoft.extensions.configuration.binder/10.0.0-rc.2.25502.107",
"hashPath": "microsoft.extensions.configuration.binder.10.0.0-rc.2.25502.107.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.EnvironmentVariables/10.0.0-rc.2.25502.107": {
"type": "package",
"serviceable": true,
"sha512": "sha512-2SV60IUAWfluZv2YHNZ+nUOljYHGIsy96FpJs+N9/bgKDYs9qr6DdzPeIhiHrz+XvRzbybvcwtTBf5dKrYN4oA==",
"path": "microsoft.extensions.configuration.environmentvariables/10.0.0-rc.2.25502.107",
"hashPath": "microsoft.extensions.configuration.environmentvariables.10.0.0-rc.2.25502.107.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.FileExtensions/10.0.0-rc.2.25502.107": {
"type": "package",
"serviceable": true,
"sha512": "sha512-5KrgXSTFR8cFLmDXXoT7GLVvDyHNw0Z9xG4doD78Q/HdlAR4jiMzmLLS9GFXrPGopmC6qqEZr2VBJHEu16INcA==",
"path": "microsoft.extensions.configuration.fileextensions/10.0.0-rc.2.25502.107",
"hashPath": "microsoft.extensions.configuration.fileextensions.10.0.0-rc.2.25502.107.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.Json/10.0.0-rc.2.25502.107": {
"type": "package",
"serviceable": true,
"sha512": "sha512-USwHuFz4BFKoaqSydHWH/d7Mr+fVsAh9S0S9pdsdHro1IixMbqQ9Gpo2sEZf25e3tZSq/ts6XsVmrQWmxmDhYA==",
"path": "microsoft.extensions.configuration.json/10.0.0-rc.2.25502.107",
"hashPath": "microsoft.extensions.configuration.json.10.0.0-rc.2.25502.107.nupkg.sha512"
},
"Microsoft.Extensions.DependencyInjection/10.0.0-rc.2.25502.107": {
"type": "package",
"serviceable": true,
"sha512": "sha512-mDw80K98jBWCyLFCra51PRv+Ttnjse1lZIzXEFybKby0/ajBFTEeHj/4r/QJexmb8Uun0yaFH1HlFtmHP1YEVA==",
"path": "microsoft.extensions.dependencyinjection/10.0.0-rc.2.25502.107",
"hashPath": "microsoft.extensions.dependencyinjection.10.0.0-rc.2.25502.107.nupkg.sha512"
},
"Microsoft.Extensions.DependencyInjection.Abstractions/10.0.0-rc.2.25502.107": {
"type": "package",
"serviceable": true,
"sha512": "sha512-8jujunpkNNfTkE9PFHp9/aD6GPKVfNCuz8tUbzOcyU5tQOCoIZId4hwQNVx3Tb8XEWw9BYdh0k5vPpqdCM+UtA==",
"path": "microsoft.extensions.dependencyinjection.abstractions/10.0.0-rc.2.25502.107",
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.10.0.0-rc.2.25502.107.nupkg.sha512"
},
"Microsoft.Extensions.Diagnostics/10.0.0-rc.2.25502.107": {
"type": "package",
"serviceable": true,
"sha512": "sha512-tQfQFXI+ZQcL2RzDarDLx3Amh0WCp1KPGp1ie3y/CMV5hDhEq98WTmcMoXrFY0GkYLEaCQlVi2A6qVLcooG2Ow==",
"path": "microsoft.extensions.diagnostics/10.0.0-rc.2.25502.107",
"hashPath": "microsoft.extensions.diagnostics.10.0.0-rc.2.25502.107.nupkg.sha512"
},
"Microsoft.Extensions.Diagnostics.Abstractions/10.0.0-rc.2.25502.107": {
"type": "package",
"serviceable": true,
"sha512": "sha512-x6XVv3RiwOlN2unjyX/Zat0gI0HiRoDDdjkwBCwsMftYWpbJu4SiyRwDbrv2zAF8v8nbEEvcWi3/pUxZfaqLQw==",
"path": "microsoft.extensions.diagnostics.abstractions/10.0.0-rc.2.25502.107",
"hashPath": "microsoft.extensions.diagnostics.abstractions.10.0.0-rc.2.25502.107.nupkg.sha512"
},
"Microsoft.Extensions.FileProviders.Abstractions/10.0.0-rc.2.25502.107": {
"type": "package",
"serviceable": true,
"sha512": "sha512-dOpmW14MkOZIwV6269iXhoMp6alCHBoxqCR4pJ37GLjFaBIyzsIy+Ra8tsGmjHtFvEHKq0JRDIsb1PUkrK+yxw==",
"path": "microsoft.extensions.fileproviders.abstractions/10.0.0-rc.2.25502.107",
"hashPath": "microsoft.extensions.fileproviders.abstractions.10.0.0-rc.2.25502.107.nupkg.sha512"
},
"Microsoft.Extensions.FileProviders.Physical/10.0.0-rc.2.25502.107": {
"type": "package",
"serviceable": true,
"sha512": "sha512-3+RiR6TEakDL0dCUqR7PjFffyrVMLdx/vAVBiN1mGmwScKYCTePIkYVkWsX85CTKh7R9J4M9C1MHzVdjbKcg3g==",
"path": "microsoft.extensions.fileproviders.physical/10.0.0-rc.2.25502.107",
"hashPath": "microsoft.extensions.fileproviders.physical.10.0.0-rc.2.25502.107.nupkg.sha512"
},
"Microsoft.Extensions.FileSystemGlobbing/10.0.0-rc.2.25502.107": {
"type": "package",
"serviceable": true,
"sha512": "sha512-XtcPOKB7sMFzj8SxaOglZV3eaqZ1GxUMVZTwaz4pRpBt0S45ghb836uUej4YaI8EzsnUJoqzOIKrTW4CDJMfVw==",
"path": "microsoft.extensions.filesystemglobbing/10.0.0-rc.2.25502.107",
"hashPath": "microsoft.extensions.filesystemglobbing.10.0.0-rc.2.25502.107.nupkg.sha512"
},
"Microsoft.Extensions.Http/10.0.0-rc.2.25502.107": {
"type": "package",
"serviceable": true,
"sha512": "sha512-d60bvi/NpzkpVlSpxZqOfdjX1hrQgL/byWVc3PryjbmB7zvfLtqQbYifjEWToqtS0Fb1rGnkuVI5JEdOnK1tNQ==",
"path": "microsoft.extensions.http/10.0.0-rc.2.25502.107",
"hashPath": "microsoft.extensions.http.10.0.0-rc.2.25502.107.nupkg.sha512"
},
"Microsoft.Extensions.Http.Polly/10.0.0-rc.2.25502.107": {
"type": "package",
"serviceable": true,
"sha512": "sha512-aY5vLcrhdXCHsCjYI2lNwfat2vdSuiPs0FFZiy7IM6zcyqdxaefG8J8ezTKkZyiuAtznjVJJT70B660l/WlsxA==",
"path": "microsoft.extensions.http.polly/10.0.0-rc.2.25502.107",
"hashPath": "microsoft.extensions.http.polly.10.0.0-rc.2.25502.107.nupkg.sha512"
},
"Microsoft.Extensions.Logging/10.0.0-rc.2.25502.107": {
"type": "package",
"serviceable": true,
"sha512": "sha512-q2C5gq86qkTmcYSJJSnw8sgTUyuqENYSOjk/NOYjHnYlKSrK3oI9Rjv1bWFpx2I3Btq9ZBEJb9aMM+IUQ0PvZA==",
"path": "microsoft.extensions.logging/10.0.0-rc.2.25502.107",
"hashPath": "microsoft.extensions.logging.10.0.0-rc.2.25502.107.nupkg.sha512"
},
"Microsoft.Extensions.Logging.Abstractions/10.0.0-rc.2.25502.107": {
"type": "package",
"serviceable": true,
"sha512": "sha512-SKKKZjyCpBaDQ7yuFjdk6ELnRBRWeZsbnzUfo59Wc4PGhgf92chE3we/QlT6nk6NqlWcUgH/jogM+B/uq/Qdnw==",
"path": "microsoft.extensions.logging.abstractions/10.0.0-rc.2.25502.107",
"hashPath": "microsoft.extensions.logging.abstractions.10.0.0-rc.2.25502.107.nupkg.sha512"
},
"Microsoft.Extensions.Options/10.0.0-rc.2.25502.107": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Ib6BCCjisp7ZUdhtNpSulFO0ODhz/IE4ZZd8OCqQWoRs363BQ0QOZi9KwpqpiEWo51S0kIXWqNicDPGXwpt9pQ==",
"path": "microsoft.extensions.options/10.0.0-rc.2.25502.107",
"hashPath": "microsoft.extensions.options.10.0.0-rc.2.25502.107.nupkg.sha512"
},
"Microsoft.Extensions.Options.ConfigurationExtensions/10.0.0-rc.2.25502.107": {
"type": "package",
"serviceable": true,
"sha512": "sha512-MFbT8+JKX49YCXEFvlZDzQzI/R3QKzRZlb4dSud+569cMgA9hWbndjWWvOgGASoRcXynGRrBSq1Bw3PeCsB5/Q==",
"path": "microsoft.extensions.options.configurationextensions/10.0.0-rc.2.25502.107",
"hashPath": "microsoft.extensions.options.configurationextensions.10.0.0-rc.2.25502.107.nupkg.sha512"
},
"Microsoft.Extensions.Primitives/10.0.0-rc.2.25502.107": {
"type": "package",
"serviceable": true,
"sha512": "sha512-9pm2zqqn5u/OsKs2zgkhJEQQeMx9KkVOWPdHrs7Kt5sfpk+eIh/gmpi/mMH/ljS2T/PFsFdCEtm+GS/6l7zoZA==",
"path": "microsoft.extensions.primitives/10.0.0-rc.2.25502.107",
"hashPath": "microsoft.extensions.primitives.10.0.0-rc.2.25502.107.nupkg.sha512"
},
"Microsoft.IdentityModel.Abstractions/8.14.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-iwbCpSjD3ehfTwBhtSNEtKPK0ICun6ov7Ibx6ISNA9bfwIyzI2Siwyi9eJFCJBwxowK9xcA1mj+jBWiigeqgcQ==",
"path": "microsoft.identitymodel.abstractions/8.14.0",
"hashPath": "microsoft.identitymodel.abstractions.8.14.0.nupkg.sha512"
},
"Microsoft.IdentityModel.JsonWebTokens/7.2.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-zLFA9IBxDWw6Y1nz2PPZyQvF+ZZ4aW1pwgtwusQB39lgxOc2xVqZ8gitsuT1rwyuIbchGOWbax4fsJ8OgGRxSQ==",
"path": "microsoft.identitymodel.jsonwebtokens/7.2.0",
"hashPath": "microsoft.identitymodel.jsonwebtokens.7.2.0.nupkg.sha512"
},
"Microsoft.IdentityModel.Logging/8.14.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-eqqnemdW38CKZEHS6diA50BV94QICozDZEvSrsvN3SJXUFwVB9gy+/oz76gldP7nZliA16IglXjXTCTdmU/Ejg==",
"path": "microsoft.identitymodel.logging/8.14.0",
"hashPath": "microsoft.identitymodel.logging.8.14.0.nupkg.sha512"
},
"Microsoft.IdentityModel.Tokens/8.14.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-lKIZiBiGd36k02TCdMHp1KlNWisyIvQxcYJvIkz7P4gSQ9zi8dgh6S5Grj8NNG7HWYIPfQymGyoZ6JB5d1Lo1g==",
"path": "microsoft.identitymodel.tokens/8.14.0",
"hashPath": "microsoft.identitymodel.tokens.8.14.0.nupkg.sha512"
},
"NetEscapades.Configuration.Yaml/2.1.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-kNTX7kvRvbzBpLd3Vg9iu6t60tTyhVxsruAPgH6kl1GkAZIHLZw9cQysvjUenDU7JEnUgyxQnzfL8627ARDn+g==",
"path": "netescapades.configuration.yaml/2.1.0",
"hashPath": "netescapades.configuration.yaml.2.1.0.nupkg.sha512"
},
"Pipelines.Sockets.Unofficial/2.2.8": {
"type": "package",
"serviceable": true,
"sha512": "sha512-zG2FApP5zxSx6OcdJQLbZDk2AVlN2BNQD6MorwIfV6gVj0RRxWPEp2LXAxqDGZqeNV1Zp0BNPcNaey/GXmTdvQ==",
"path": "pipelines.sockets.unofficial/2.2.8",
"hashPath": "pipelines.sockets.unofficial.2.2.8.nupkg.sha512"
},
"Polly/7.2.4": {
"type": "package",
"serviceable": true,
"sha512": "sha512-bw00Ck5sh6ekduDE3mnCo1ohzuad946uslCDEENu3091+6UKnBuKLo4e+yaNcCzXxOZCXWY2gV4a35+K1d4LDA==",
"path": "polly/7.2.4",
"hashPath": "polly.7.2.4.nupkg.sha512"
},
"Polly.Extensions.Http/3.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-drrG+hB3pYFY7w1c3BD+lSGYvH2oIclH8GRSehgfyP5kjnFnHKQuuBhuHLv+PWyFuaTDyk/vfRpnxOzd11+J8g==",
"path": "polly.extensions.http/3.0.0",
"hashPath": "polly.extensions.http.3.0.0.nupkg.sha512"
},
"SharpCompress/0.41.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-z04dBVdTIAFTRKi38f0LkajaKA++bR+M8kYCbasXePILD2H+qs7CkLpyiippB24CSbTrWIgpBKm6BenZqkUwvw==",
"path": "sharpcompress/0.41.0",
"hashPath": "sharpcompress.0.41.0.nupkg.sha512"
},
"StackExchange.Redis/2.8.24": {
"type": "package",
"serviceable": true,
"sha512": "sha512-GWllmsFAtLyhm4C47cOCipGxyEi1NQWTFUHXnJ8hiHOsK/bH3T5eLkWPVW+LRL6jDiB3g3izW3YEHgLuPoJSyA==",
"path": "stackexchange.redis/2.8.24",
"hashPath": "stackexchange.redis.2.8.24.nupkg.sha512"
},
"System.IdentityModel.Tokens.Jwt/7.2.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Z3Fmkrxkp+o51ANMO/PqASRRlEz8dH4mTWwZXMFMXZt2bUGztBiNcIDnwBCElYLYpzpmz4sIqHb6aW8QVLe6YQ==",
"path": "system.identitymodel.tokens.jwt/7.2.0",
"hashPath": "system.identitymodel.tokens.jwt.7.2.0.nupkg.sha512"
},
"YamlDotNet/9.1.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-fuvGXU4Ec5HrsmEc+BiFTNPCRf1cGBI2kh/3RzMWgddM2M4ALhbSPoI3X3mhXZUD1qqQd9oSkFAtWjpz8z9eRg==",
"path": "yamldotnet/9.1.0",
"hashPath": "yamldotnet.9.1.0.nupkg.sha512"
},
"ZstdSharp.Port/0.8.6": {
"type": "package",
"serviceable": true,
"sha512": "sha512-iP4jVLQoQmUjMU88g1WObiNr6YKZGvh4aOXn3yOJsHqZsflwRsxZPcIBvNXgjXO3vQKSLctXGLTpcBPLnWPS8A==",
"path": "zstdsharp.port/0.8.6",
"hashPath": "zstdsharp.port.0.8.6.nupkg.sha512"
},
"StellaOps.Auth.Abstractions/1.0.0-preview.1": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"StellaOps.Auth.Client/1.0.0-preview.1": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"StellaOps.Auth.Security/1.0.0-preview.1": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"StellaOps.Authority.Plugins.Abstractions/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"StellaOps.Configuration/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"StellaOps.Cryptography/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"StellaOps.DependencyInjection/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"StellaOps.Plugin/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"StellaOps.Scanner.Analyzers.Lang/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"StellaOps.Scanner.Core/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
}
}
}

View File

@@ -0,0 +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
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

@@ -0,0 +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
}
}
]
}

View File

@@ -0,0 +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

View File

@@ -0,0 +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
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

@@ -0,0 +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
}
}
]
}

View File

@@ -0,0 +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

4
out/notify-bench.csv Normal file
View File

@@ -0,0 +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
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

84
out/notify-bench.json Normal file
View File

@@ -0,0 +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
}
}
]
}

39
out/notify-bench.prom Normal file
View File

@@ -0,0 +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

2
out/policy-bench.csv Normal file
View File

@@ -0,0 +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
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

25
out/policy-bench.json Normal file
View File

@@ -0,0 +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
}
}
]
}

17
out/policy-bench.prom Normal file
View File

@@ -0,0 +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

View File

@@ -0,0 +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"
}
}
]