What problem does it solve? When building admin panels, developers repeatedly re-implement list loading, pagination, sorting, filtering, busy-state handling, and error management for every entity store. This Skill encodes the conventions for creating an entity store as a thin heir of the shared BaseListStoreService, so the store declares only its API service, error keys, and config instead of duplicating infrastructure. ## Core Features & Use Cases - Base store inheritance: Extend BaseListStoreService with typed state, sort, filter, and draft generics, then toggle pagination, sorting, filtering, and search via setConfig. - Mutation harness: Route save and remove operations through the built-in mutate method, which manages busy state, clears previous errors, re-reads the list after success, and maps refusal keys. - Naming conventions: Name files <entity>.store.ts and methods after the action (save, remove, load) rather than the domain, keeping stores compliant with the linter rule and rule gate. - Use Case: When creating a PromoCodesStore for an admin panel, apply this pattern to get a fully working list store with pagination, sorting, filtering, and a save method returning Observable<IPromoCode.State | null> in just a few lines. ## Quick Start Create a new entity store for the promo codes admin panel following the entity-store pattern with a save method that uses the mutate harness.