What problem does it solve? Adding a Chronicle projection to a Cratis-based .NET project requires choosing between model-bound attributes and fluent IProjectionFor<T> builders, applying correct AutoMap behavior, and respecting Chronicle-specific join semantics β mistakes like joining on read models or adding nonexistent Identifier properties cause build or runtime failures. ## Core Features & Use Cases - Model-Bound Projections (preferred): Generates read models annotated with [FromEvent<T>], [Key], [SetFrom<T>], [AddFrom<T>], [ChildrenFrom<T>], [Join<T>], and [RemovedWith<T>] attributes, with no separate projection class needed. - Fluent Projection Fallback: Produces IProjectionFor<T> builder-based projections only when attribute-based mapping cannot express the logic cleanly. - Rule Enforcement: Enforces AutoMap-first defaults, event-only joins (never on read models), and correct handling of appended event metadata such as tags, event stream types, and event source types. - Use Case: When asked to add a projection that keeps an Order read model up to date from OrderPlaced and OrderCancelled events, the Skill emits the correctly attributed record and verifies it with dotnet build. ## Quick Start Ask the AI to add a Chronicle projection for a specific read model from your domain events in the current Cratis project.