| Read model query returns empty / stale | projection not wired: event→read-model property names differ (AutoMap only maps matching names), or a default value masks missing wiring | add-projection, cratis-readmodel; [SetFrom<T>] for name diffs; no default values on [ReadModel] props |
| App crashes on startup with a projection error | duplicate [FromEvent<T>] for the same event on one read model | add-projection (one [FromEvent<T>] per event) |
| Command always "not successful" with no validation errors | [Roles]/authorization: an unauthorized result isn't successful and carries no validation errors | auth-and-identity, cratis-command; assert ShouldNotBeAuthorized() |
| Command rejected unexpectedly | a CommandValidator/ConceptValidator rule, or Provide() short-circuited with ValidationResult.Error | add-business-rule, cratis-command |
| Handler returns HTTP 500 instead of rejecting | threw from Provide()/Handle() for a business rule (that's an exception, not a rejection) | return Result<TEvent, ValidationResult> — add-business-rule |
| Reactor's returned events never appended | returned EventForEventSourceId on a Chronicle version before reactor support | return event objects, or ReactorSideEffect for another target — reactors.md |
| Projection/reactor stops processing ("quarantined") | a handler threw; the partition paused and the observer quarantined (does not auto-resume) | fix the handler (make it idempotent); an operator calls ClearObserverQuarantine() — reactors.md |
| Duplicate side effect on replay | non-idempotent reactor without [OnceOnly] | mark the handler [OnceOnly] — reactors.md |
| Chronicle analyzer warns on an event property | a nullable event property | model the optional fact as a separate event — vertical-slices.md, event-modeling |
| A read model needs a field from another slice | wrong stream boundary / missing event | re-model (information completeness) — event-modeling; never cross-read another read model at runtime |