What problem does it solve? In event-driven DDD/CQRS architectures, read-model projection tables go stale unless a dedicated component subscribes to domain and integration events and applies mutations consistently. This Skill provides the canonical patterns, scaffolds, and review rules for building that component — the Projector — so developers avoid scattered per-event handlers, N+1 write loops, and replay-unsafe code. ## Core Features & Use Cases - Language-specific playbooks: Dispatches by file extension to a TypeScript playbook (single class per projection with a plain switch (event.name) and never exhaustiveness) or a Go playbook (concrete struct per event subscription implementing the mediator handler interface). - Canonical mutation flows: Enforces find → applyEvent → save for mutations, insertIfNew(Projection.create(event)) for creation, and justified atomic repo ops only for hot-row, bulk, monotonic, or cache-mirror cases. - Pattern registry and bad practices: Ships registry.yaml files with mandatory patterns (PRJTR-01..15, PRJR-GO-01..07) and mechanically detectable bad practices used by scaffolding and /review tooling. - Use Case: A developer adding a message_edited event to a chat projection uses this Skill to add a switch case in MessageProjector.ts that finds the row, calls applyEvent, and saves — returning silently on missing rows for replay safety. ## Quick Start Ask the AI to create a Projector for a given bounded context and projection name, for example by running the scaffold command bun cli projector channel Message and then filling in the event dispatch cases.