---
title: ARCCHR0019 - Read-model fold may be exposed as a query
editUrl: https://github.com/Cratis/Arc/edit/main/Documentation/backend/csharp/chronicle/code-analysis/ARCCHR0019.md
description: Preview explicit endpoint selection when a conventional query resembles a fold.
---


<!-- Copyright (c) Cratis. All rights reserved. -->
<!-- Licensed under the MIT license. See LICENSE file in the project root for full license information. -->

## When this warning appears

A conventional `[ReadModel]` has a public/internal static `Create(event[, context])` returning its model or `Task` of the model, **without a self parameter**. The first parameter resembles an event: a class or interface other than a string or concept. This is a heuristic, not proof of event registration, and it does not change query discovery.

Methods with a parameter of their own read-model type are never queries, nullable or not and in any position. Static self-reducer `Reduce(event, current[, EventContext])` methods therefore need no warning and no explicit-selection workaround. Adding `[Query]` to such a method is an [ARC0026](/arc/backend/csharp/code-analysis/arc0026/) error.

In `RequireQueryAttribute = true` mode, unmarked helpers produce no query diagnostics, including this warning. Arc does not globally reserve fold or callback names.

## Choose the endpoint surface

If the method is a helper, [opt the read model into explicit query selection](/arc/backend/csharp/queries/model-bound/static-methods/#choose-endpoints-explicitly-when-a-model-has-helpers). Add `[Query]` to intended queries, not to the fold. Preserve endpoint paths, HTTP methods, arguments, and authorization.

If the method is an intentional query, keep it and suppress this heuristic with a justification. Adding an event attribute or context parameter does not exclude it from conventional discovery.

## Quick fix

**Require [Query] and mark existing queries (preview endpoints)** changes the whole read model, including its partial declarations. It opts the type into explicit selection and marks eligible existing methods other than recognized fold-like shapes. Preview the complete endpoint diff: return shapes cannot distinguish an intentional query from every other helper. Partial query methods receive one marker across their definition and implementation. The fix is not offered for already-invalid explicit query declarations, declarations in generated or otherwise uneditable documents, or a migration that introduces compiler errors. It has no unattended Fix All.

The warning remains a creator heuristic, not a test of Chronicle backing eligibility. See [self-reducing read models](/arc/backend/csharp/chronicle/read-models/#self-reducing-read-models) for the supported reduction and command-injection shape.
