What problem does it solve? In event-driven Go backends, read models drift out of sync when projection update logic is scattered or inconsistent. This Skill provides the canonical patterns for writing Projectors — the single event-driven writers of a projection — so every mutation follows the correct find → ApplyX → save flow with proper idempotency and missing-row handling. ## Core Features & Use Cases - Canonical Mutation Flows: Enforces find → projection.ApplyX(event) → save for mutations, InsertIfNew for creation events, and atomic repo ops only when justified by hot-row or bulk scenarios. - Mediator Integration: Guides registration with InternalMediator for domain events and ExternalMediator for integration events inside the fx module's registerHandlers func. - Defensive Semantics: Missing rows log slog.Warn and return nil instead of stalling the mediator; duplicates from InsertIfNew log at Debug, not error. - Use Case: When adding a new event like channel.message_edited to a Go service, use this Skill to generate a MessageEditedProjector struct with the correct repository interface, EventName constant, and fx registration. ## Quick Start Ask the AI to create a Go projector for a specific event, for example: create a projector that handles the message delivered event and updates the message projection.