Docs & Rules

ARKlab/Ark.ToolsGitHubLast refreshed Oct 3, 2026

This is a public, read-only report. Striff reads this repository's docs, turns each sentence that makes a claim about the code into a rule, and checks the rule against the code on the default branch. How this works

mastera846d73listed 5h ago

Is this yours? Install to manage it

Once installed, Striff checks every pull request.

67
67
15
2
13
27
19
3
8
8
8
8
24
24
1
215 docs, listed Oct 3
ARKlab/Ark.ToolsOpen repository

ARKlab/Ark.Tools — documented rules

67 of 67 rules, printed October 3, 2026.

The sentence in your docs
Read Oct 3
API ComplianceRedactionOptions.PiiScan, Meaning PiiScanMode.Off (default) or MessageAndProperties — the NLog last-resort text scan
ComplianceRedactionOptions has PiiScan
Holds
Read Oct 3
API ComplianceRedactionOptions.HmacKey, Meaning Programmatic HMAC key for ComplianceRedactor
ComplianceRedactionOptions has HmacKey
Holds
Read Oct 3
Type EmailAddress, Classification [PersonalData], Redaction Mask, Validation RFC-shaped address, ≤ 320 chars, normalized to lower-case trimmed
EmailAddress is annotated with PersonalData
Holds
Read Oct 3
Type PhoneNumber, Classification [PersonalData], Redaction Mask, Validation 7–15 digits, optional leading + , separators stripped
PhoneNumber is annotated with PersonalData
Holds
Read Oct 3
Type PersonName, Classification [PersonalData], Redaction Mask, Validation 1–200 chars, trimmed
PersonName is annotated with PersonalData
Holds
Read Oct 3
Type PostalAddressLine, Classification [PersonalData], Redaction Erase, Validation 1–500 chars
PostalAddressLine is annotated with PersonalData
Holds
Read Oct 3
Type NationalIdentifier, Classification [SensitivePersonalData], Redaction Erase, Validation 1–100 chars
NationalIdentifier is annotated with SensitivePersonalData
Holds
Read Oct 3
Type ApiKey, Classification [Secret], Redaction Erase, Validation 1–4096 chars
ApiKey is annotated with Secret
Holds
Read Oct 3
Package Ark.Tools.Compliance.Dapper, Registration SensitiveValueDapper.RegisterBuiltIn() and SensitiveValueDapper.Register<CustomerReference>()
SensitiveValueDapper has a RegisterBuiltIn method
Holds
Read Oct 3
Package Ark.Tools.Compliance.Dapper, Registration SensitiveValueDapper.RegisterBuiltIn() and SensitiveValueDapper.Register<CustomerReference>()
SensitiveValueDapper has Register
Holds
Read Oct 3
Package Ark.Tools.Compliance.NewtonsoftJson, Registration SensitiveValueNewtonsoftJson.RegisterBuiltIn(settings) / Register<T>(settings)
SensitiveValueNewtonsoftJson has a RegisterBuiltIn method
Holds
Read Oct 3
Package Ark.Tools.Compliance.NewtonsoftJson, Registration SensitiveValueNewtonsoftJson.RegisterBuiltIn(settings) / Register<T>(settings)
SensitiveValueNewtonsoftJson has Register
Holds
Read Oct 3
Package Ark.Tools.Compliance.MessagePack, Registration add SensitiveValueFormatterResolver.Instance to the resolver chain SensitiveValueFormatterResolver.RegisterBuiltIn() / Register<T>()
SensitiveValueFormatterResolver has a RegisterBuiltIn method
Holds
Read Oct 3
Package Ark.Tools.Compliance.MessagePack, Registration add SensitiveValueFormatterResolver.Instance to the resolver chain SensitiveValueFormatterResolver.RegisterBuiltIn() / Register<T>()
SensitiveValueFormatterResolver has Register
Holds
Read Oct 3
Package Ark.Tools.Compliance.Reqnroll, Registration SensitiveValueReqnroll.Register() in test setup — feature tables then bind columns to sensitive value objects
SensitiveValueReqnroll has a Register method
Holds
Read Oct 3
The mapping lives in the **library** (Ark.Tools.MediatorFramework.Grpc), as ArkGrpcErrorInterceptor, not in application code: the interceptor maps BusinessRuleViolationException to an RpcException with StatusCode.FailedPrecondition and a Google.Rpc.Status whose details contain one ArkBusinessRuleViolation (packed as Any), and ValidationException to InvalidArgument + BadRequest field violations.
ArkGrpcErrorInterceptor is in Ark.Tools.MediatorFramework.Grpc
Holds
Read Oct 3
Ark.Tools.Core.EvolvableEnum is an opt-in readonly struct that lets a contract member carry unknown enum values safely:
EvolvableEnum is a value type, and EvolvableEnum is declared readonly
Holds
Read Oct 3
Ark.Tools.Core.EvolvableEnum is an opt-in readonly struct that lets a contract member carry unknown enum values safely:
EvolvableEnum is declared readonly, and EvolvableEnum is a value type
Holds
Read Oct 3
Add a transport-neutral McpToolAttribute to Ark.Tools.MediatorFramework:
McpToolAttribute is in Ark.Tools.MediatorFramework
Holds
Read Oct 3
It does not reference McpServerToolAttribute or McpServerToolTypeAttribute.
McpToolAttribute may not use McpServerToolAttribute
Holds
Read Oct 3
It does not reference McpServerToolAttribute or McpServerToolTypeAttribute.
McpToolAttribute may not use McpServerToolTypeAttribute
Holds
Read Oct 3
McpToolAttribute field ReadOnly, Meaning MCP tool annotation defaults to true for IQuery<T> and false for IRequest<T> / ICommand
McpToolAttribute has a ReadOnly field
Holds
Read Oct 3
McpToolAttribute field Destructive, Meaning MCP tool annotation defaults to false for IQuery<T> and true for IRequest<T> / ICommand
McpToolAttribute has a Destructive field
Holds
Read Oct 3
McpToolAttribute field Idempotent, Meaning MCP tool annotation defaults to false
McpToolAttribute has an Idempotent field
Holds
Read Oct 3
McpToolAttribute field OpenWorld, Meaning MCP tool annotation defaults to true
McpToolAttribute has an OpenWorld field
Holds
Read Oct 3
The generated bridge therefore exposes an attachment input as a bounded McpAttachmentInput object supplied by Ark.Tools.MediatorFramework.Mcp:
McpAttachmentInput is in Ark.Tools.MediatorFramework.Mcp
Holds
Read Oct 3
Element Send seam, File IMessagingTransport.cs:9-66, Behaviour SendAsync , PublishAsync , native sizing/measuring Adequate unchanged by this PRD
IMessagingTransport has SendAsync
Holds
Read Oct 3
Element Send seam, File IMessagingTransport.cs:9-66, Behaviour SendAsync , PublishAsync , native sizing/measuring Adequate unchanged by this PRD
IMessagingTransport has PublishAsync
Holds
Read Oct 3
Element Dispatch, File MessagingDispatcher.cs:92-175, Behaviour Per-delivery classify headers, prepare payload, DI scope, pipeline, settle, metrics Handler stage is bounded by retryPolicy.MaximumHandlerDuration a per-message renewal loop runs alongside
IMessagingRetryPolicy has MaximumHandlerDuration
Holds
Read Oct 3
Element Retry policy, File IMessagingRetryPolicy.cs, Behaviour MaximumDeliveryCount , SecondLevelRetriesEnabled , MaximumHandlerDuration , RetryDelay MaximumHandlerDuration is the natural input for lock and prefetch budgeting
IMessagingRetryPolicy has MaximumDeliveryCount
Holds
Read Oct 3
Element Retry policy, File IMessagingRetryPolicy.cs, Behaviour MaximumDeliveryCount , SecondLevelRetriesEnabled , MaximumHandlerDuration , RetryDelay MaximumHandlerDuration is the natural input for lock and prefetch budgeting
IMessagingRetryPolicy has SecondLevelRetriesEnabled
Holds
Read Oct 3
Element Retry policy, File IMessagingRetryPolicy.cs, Behaviour MaximumDeliveryCount , SecondLevelRetriesEnabled , MaximumHandlerDuration , RetryDelay MaximumHandlerDuration is the natural input for lock and prefetch budgeting
IMessagingRetryPolicy has RetryDelay
Holds
Read Oct 3
async loops (not threads) reading the channel and calling the unchanged MessagingDispatcher.OnDeliveryAsync.
MessagingDispatcher has OnDeliveryAsync
Holds
Read Oct 3
Unchanged rules (MessagingSettlement.Decide), but settlement now runs **on the worker task**, off the receive path, and releases credit only after the settle call completes.
MessagingSettlement has Decide
Holds
Read Oct 3
Target TypeConverter, Artifact SensitiveValueTypeConverter<T> (see below), Where Ark.Tools.Compliance (in-box)
SensitiveValueTypeConverter is in Ark.Tools.Compliance
Holds
Read Oct 3
Target Dapper, Adapter SensitiveValueTypeHandler<T> + SensitiveValueDapper.Register<T>(), Package Ark.Tools.Compliance.Dapper
SensitiveValueDapper is in Ark.Tools.Compliance.Dapper
Holds
Read Oct 3
Target Dapper, Adapter SensitiveValueTypeHandler<T> + SensitiveValueDapper.Register<T>(), Package Ark.Tools.Compliance.Dapper
SensitiveValueTypeHandler is in Ark.Tools.Compliance.Dapper
Holds
Read Oct 3
Target protobuf-net, Adapter surrogate + RuntimeTypeModel registration, in the shape of Ark.Tools.Protobuf 's EvolvableEnumSurrogate<T>, Package Ark.Tools.Compliance.Protobuf
EvolvableEnumSurrogate is in Ark.Tools.Protobuf
Holds
Read Oct 3
Adapters share the SensitiveValueSerialization.ToTransport/FromTransport helpers, so a new target is a reader/writer mapping and nothing else.
SensitiveValueSerialization has ToTransport
Holds
Read Oct 3
Adapters share the SensitiveValueSerialization.ToTransport/FromTransport helpers, so a new target is a reader/writer mapping and nothing else.
SensitiveValueSerialization has FromTransport
Holds
Read Oct 3
Package Ark.Tools.Compliance.NLog, Contents ComplianceLayout / PiiScanner , redaction wired by default into WithArkDefaultTargetsAndRules WithComplianceRedaction / WithoutComplianceRedaction for override/opt-out, TFMs net8.0;net10.0
ComplianceLayout is in Ark.Tools.Compliance.NLog
Holds
Read Oct 3
Package Ark.Tools.Compliance.NewtonsoftJson, Contents SensitiveValueJsonConverter<T> and SensitiveValueNewtonsoftJson registrations, TFMs net8.0;net10.0
SensitiveValueNewtonsoftJson is in Ark.Tools.Compliance.NewtonsoftJson
Holds
Read Oct 3
Setting AdaptiveConcurrency, Default true, What it is for Let the limit follow measured throughput and latency false pins it and disables measurement
MessagingProcessingOptions has AdaptiveConcurrency
Holds
Read Oct 3
Setting InitialConcurrency, Default processor count, What it is for Starting worker count, and the fixed limit when adaptation is off
MessagingProcessingOptions has InitialConcurrency
Holds
Read Oct 3
Setting MinimumConcurrency, Default 1, What it is for Floor the controller may never go below
MessagingProcessingOptions has MinimumConcurrency
Holds
Read Oct 3
Setting MaximumConcurrency, Default 8 × processor count, What it is for Ceiling, and the natural place to express a downstream limit
MessagingProcessingOptions has MaximumConcurrency
Holds
Read Oct 3
Setting ConcurrencyEvaluationInterval, Default 5 s, What it is for How often the controller decides
MessagingProcessingOptions has ConcurrencyEvaluationInterval
Holds
Read Oct 3
Setting ThroughputImprovementThreshold, Default 0.05, What it is for Throughput noise band that growth must beat
MessagingProcessingOptions has ThroughputImprovementThreshold
Holds
Read Oct 3
Setting GradientIncreaseThreshold, Default 0.9, What it is for Latency gradient required to grow
MessagingProcessingOptions has GradientIncreaseThreshold
Holds
Read Oct 3
Setting LittlesLawSlack, Default 2, What it is for Slack over the useful concurrency implied by throughput × latency
MessagingProcessingOptions has LittlesLawSlack
Holds
Read Oct 3
Setting BaselineRearmInterval, Default 10 min, What it is for How often the no-load latency baseline is re-measured
MessagingProcessingOptions has BaselineRearmInterval
Holds
Read Oct 3
Setting ThreadPoolStarvationThreshold, Default 250 ms, What it is for Scheduling delay treated as host starvation
MessagingProcessingOptions has ThreadPoolStarvationThreshold
Holds
Read Oct 3
Setting PrefetchMultiplier, Default 2, What it is for Buffered deliveries per worker higher hides broker latency, and holds more locks
MessagingProcessingOptions has PrefetchMultiplier
Holds
Read Oct 3
Setting MaximumPrefetch, Default 8 × MaximumConcurrency, What it is for Hard ceiling on buffered plus in-flight deliveries
MessagingProcessingOptions has MaximumPrefetch
Holds
Read Oct 3
Setting ExpectedHandlerDuration, Default 1 s, What it is for Per-message estimate used to bound the buffer on transports that cannot renew locks
MessagingProcessingOptions has ExpectedHandlerDuration
Holds
Read Oct 3
Setting LockSafetyFactor, Default 0.5, What it is for Fraction of the native lock duration a full buffer may take to drain
MessagingProcessingOptions has LockSafetyFactor
Holds
Read Oct 3
Setting ShutdownTimeout, Default 30 s, What it is for Drain window before unprocessed deliveries are abandoned
MessagingProcessingOptions has ShutdownTimeout
Holds
Read Oct 3
Setting ReceiveChannels, Default 1, What it is for Reserved on the host Service Bus fan-out is declared on the transport instead
MessagingProcessingOptions has ReceiveChannels
Holds
Read Oct 3
Setting ReceiveWaitTime, Default 1 s, What it is for Maximum wait asked of the broker per receive
MessagingProcessingOptions has ReceiveWaitTime
Holds
Read Oct 3
Setting MinPollInterval, Default 50 ms, What it is for Shortest wait after an empty result
MessagingProcessingOptions has MinPollInterval
Holds
Read Oct 3
Setting MaxPollInterval, Default 30 s, What it is for Longest wait after consecutive empty results, and the maximum idle latency
MessagingProcessingOptions has MaxPollInterval
Holds
Read Oct 3
Setting ErrorCooldown, Default 10 s, What it is for Jittered pause after a transport error
MessagingProcessingOptions has ErrorCooldown
Holds
Read Oct 3
Setting AdvancedMetrics, Default false, What it is for Record the opt-in advanced metric tier AddArkMessagingAdvancedInstrumentation() turns it on for you
MessagingProcessingOptions has AdvancedMetrics
Holds
Read Oct 3
Setting RenewalSafetyMargin, Default 10 s, What it is for Smallest headroom kept before a lock expires
MessagingProcessingOptions has RenewalSafetyMargin
Holds
Read Oct 3
Setting RenewalScanInterval, Default 1 s, What it is for How often due locks are scanned
MessagingProcessingOptions has RenewalScanInterval
Holds
Read Oct 3
Setting MaximumRenewalBatch, Default 64, What it is for Locks renewed per scan, so a large in-flight set cannot stall the timer
MessagingProcessingOptions has MaximumRenewalBatch
Holds
Read Oct 3
The Modified property on IResourceMetadata is compared against the stored state:
IResourceMetadata has Modified
Holds
67 rules from 8 docs

See these where the change is. The browser extension puts a pull request's doc findings, and a diagram of what it changed, on the GitHub page itself, so the code and what your docs say about it are side by side.