Build read models and projections from event streams. Use when implementing CQRS read sides, building materialized views, or optimizing query performance in event-sourced systems.
85
66%
Does it follow best practices?
Impact
97%
1.59xAverage score across 6 eval scenarios
Passed
No known issues
Optimize this skill with Tessl
npx tessl skill review --optimize ./plugins/backend-development/skills/projection-patterns/SKILL.mdCore projection class structure
Event dataclass
83%
100%
stream_id field
0%
100%
global_position field
0%
100%
version field
0%
100%
Projection ABC
100%
100%
Abstract name property
0%
100%
Abstract handles method
0%
100%
Abstract apply method
0%
100%
asyncpg Pool usage
0%
100%
Pool acquire pattern
0%
100%
Handler dispatch dict
100%
100%
Denormalized table
100%
100%
Three event types handled
100%
100%
Separate handler methods
100%
100%
Projector checkpointing and rebuild
Projector constructor
100%
100%
Projections list
0%
100%
Register method
33%
100%
Polling interval
0%
100%
Default batch size 100
100%
100%
Rebuild batch size 1000
0%
100%
Checkpoint default to 0
100%
100%
Checkpoint save per event
0%
100%
Saves global_position
0%
100%
Rebuild deletes checkpoint
100%
100%
Rebuild uses projection name
42%
100%
Handles unregistered types
100%
100%
Aggregating upserts and multi-table transactions
ON CONFLICT upsert
100%
100%
Incremental counter update
100%
100%
Transaction for multi-table
58%
100%
Both tables in transaction
100%
100%
asyncpg Pool pattern
0%
100%
Idempotent daily upsert
100%
100%
Handler dispatch dict
0%
0%
Error handling present
25%
0%
Date extraction for daily key
50%
100%
Separate projection classes
100%
100%
Implementation notes file
100%
100%
Elasticsearch search projection
AsyncElasticsearch import
0%
100%
AsyncElasticsearch constructor param
0%
100%
Index attribute
100%
100%
Projection ABC inheritance
50%
100%
handles() returns product events
0%
100%
es.index() for creation
100%
100%
es.update() for ProductUpdated
100%
100%
es.update() for price change
100%
100%
es.delete() for removal
100%
100%
Async apply method
0%
100%
design_notes mentions client
71%
100%
design_notes maps operations
100%
100%
Independent projections and denormalized read models
Three separate classes
100%
100%
No cross-projection references
100%
100%
Projection ABC inheritance
0%
100%
asyncpg Pool pattern
0%
100%
Denormalized user profile
100%
100%
ON CONFLICT upsert for daily metrics
100%
100%
Date slice for daily key
0%
100%
Incremental counter in upsert
100%
100%
Support ticket schema
100%
100%
Handler dispatch dict
0%
100%
architecture_notes mentions independence
100%
100%
architecture_notes mentions denormalization
100%
100%
Projection lag monitoring and error resilience
Projector constructor args
40%
100%
Polling interval 0.1s
0%
100%
Lag calculation present
100%
100%
Lag warning logged
100%
100%
Configurable lag threshold
100%
100%
Exception catch in run loop
100%
100%
Error log with context
100%
100%
Checkpoint default to 0
100%
100%
Checkpoint save per event
62%
100%
global_position for checkpoint
25%
100%
observability_notes covers ordering
100%
100%
observability_notes covers lag detection
100%
100%
70444e5
Table of Contents
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.