Skip to content

ARCCHR0038: Stream read guard widens

Use this diagnostic when another month’s activity unexpectedly conflicts. The guard is safe, but it is not as narrow as the per-stream model alone.

Info, in Measure or On. A per-stream model parameter accompanies a source-visible whole-source read on the command source, a model of another stream, or effective declared Concurrency containing EventSourceId without both EventStreamType and EventStreamId. Validator constructor parameters participate too.

You needDo this
Only this month’s folded stateUse only the per-stream model
The whole account balance as wellKeep both reads and accept the whole-source guard
Exact model event types within this streamDo not declare an additional broader Concurrency policy
Any event in this stream to conflictDeclare EventSourceId | EventStreamType | EventStreamId on the stream

Widening can add conflicts; it does not miss a change affecting a read. Under On, Chronicle retains each dimension the reads agree on: two months of the same stream type lose the id filter, while a whole-source read drops both stream filters. Measure reports read/read widening as coarsened with reason stream_dims_dropped. See the monthly limit for the interaction with source-level fallback policies.

This is a signature/declaration diagnostic, not dataflow analysis. Advisory reads, different known lookup keys and Off are excluded. Arbitrary IDecisionReads calls in helpers and dynamic providers are not inferred. Runtime guard merging remains authoritative; absence of this diagnostic does not prove a narrow guard. There is no code fix.