data-quality
Data validation and quality assurance tools using Pydantic v2, schema validation, data contracts, and quality monitoring for PlanetScale PostgreSQL databases
View on GitHubTable of content
Data validation and quality assurance tools using Pydantic v2, schema validation, data contracts, and quality monitoring for PlanetScale PostgreSQL databases
Installation
npx claude-plugins install @greyhaven-ai/grey-haven-plugins/data-quality
Contents
Folders: agents, commands, hooks, skills
Included Skills
This plugin includes 3 skill definitions:
data-modeling
Design database schemas for Grey Haven multi-tenant SaaS - SQLModel models, Drizzle schema, multi-tenant isolation with tenant_id and RLS, timestamp fields, foreign keys, indexes, migrations, and relationships. Use when creating database tables.
View skill definition
Grey Haven Data Modeling Standards
Design database schemas for Grey Haven Studio’s multi-tenant SaaS applications using SQLModel (FastAPI) and Drizzle ORM (TanStack Start) with PostgreSQL and RLS.
Multi-Tenant Principles
CRITICAL: Every Table Requires tenant_id
// ✅ CORRECT - Drizzle
export const users = pgTable("users", {
id: uuid("id").primaryKey().defaultRandom(),
tenant_id: uuid("tenant_id").notNull(), // REQUIRED!
created_at: timestamp("created_at").defaultNow().notNull(),
updated_at: timestamp("updated_at").defaultNow().notNull(),
// ... other fields
});
# ✅ CORRECT - SQLModel
class User(SQLModel, table=True):
__tablename__ = "users"
id: UUID = Field(default_factory=uuid4, primary_key=True)
tenant_id: UUID = Field(foreign_key="tenants.id", index=True) # REQUIRED!
created_at: datetime = Field(default_factory=datetime.utcnow)
updated_at: datetime = Field(default_factory=datetime.utcnow)
# ... other fields
Naming Conventions
ALWAYS use snake_case (never camelCase):
// ✅ CORRECT
email_address: text("email_address")
created_at: timestamp("created_at")
is_active: boolean("is_active")
tenant_id: uuid("tenant_id")
// ❌ WRONG
emailAddress: text("emailAddress") // WRONG!
createdAt: timestamp("createdAt") // WRONG!
Standard Fields (Required on All Tables)
// Every table should have:
id: uuid("id").primaryKey().defaultRandom()
created_at: tim
...(truncated)
</details>
### data-validation
> "Comprehensive data validation using Pydantic v2 with data quality monitoring and schema alignment for PlanetScale PostgreSQL. Use when implementing API validation, database schema alignment, or data quality assurance. Triggers: 'validation', 'Pydantic', 'schema', 'data quality'."
<details>
<summary>View skill definition</summary>
# Data Validation Skill
Comprehensive data validation using Pydantic v2 with data quality monitoring and schema alignment for PlanetScale PostgreSQL.
## Description
Implement robust data validation, quality monitoring, and schema contracts using Pydantic v2 models.
## What's Included
- **Examples**: Pydantic v2 models, validation patterns
- **Reference**: Schema design, validation strategies
- **Templates**: Pydantic model templates
## Use When
- API request/response validation
- Database schema alignment
- Data quality assurance
## Related Agents
- `data-validator`
**Skill Version**: 1.0
</details>
### database-conventions
> "Apply Grey Haven database conventions - snake_case fields, multi-tenant with tenant_id and RLS, proper indexing, migrations for Drizzle (TypeScript) and SQLModel (Python). Use when designing schemas, writing database code, creating migrations, setting up RLS policies, or when user mentions 'database', 'schema', 'Drizzle', 'SQLModel', 'migration', 'RLS', 'tenant_id', 'snake_case', 'indexes', or 'foreign keys'."
<details>
<summary>View skill definition</summary>
# Grey Haven Database Conventions
**Database schema standards for Drizzle ORM (TypeScript) and SQLModel (Python).**
Follow these conventions for all Grey Haven multi-tenant database schemas.
## Supporting Documentation
- **[examples/](examples/)** - Complete schema examples (all files <500 lines)
- [drizzle-schemas.md](examples/drizzle-schemas.md) - TypeScript/Drizzle examples
- [sqlmodel-schemas.md](examples/sqlmodel-schemas.md) - Python/SQLModel examples
- [migrations.md](examples/migrations.md) - Migration patterns
- [rls-policies.md](examples/rls-policies.md) - Row Level Security
- **[reference/](reference/)** - Detailed references (all files <500 lines)
- [field-naming.md](reference/field-naming.md) - Naming conventions
- [indexing.md](reference/indexing.md) - Index patterns
- [relationships.md](reference/relationships.md) - Foreign keys and relations
- **[templates/](templates/)** - Copy-paste schema templates
- **[checklists/](checklists/)** - Schema validation checklists
## Critical Rules
### 1. snake_case Fields (ALWAYS)
**Database columns MUST use snake_case, never camelCase.**
```typescript
// ✅ CORRECT
export const users = pgTable("users", {
id: uuid("id").primaryKey().defaultRandom(),
created_at: timestamp("created_at").defaultNow().notNull(),
tenant_id: uuid("tenant_id").notNull(),
email_address: text("email_address").notNull(),
});
// ❌ WRONG - Don't use camelCase
export const users = pgTable("users", {
createdAt: timestamp("cre
...(truncated)
</details>
## Source
[View on GitHub](https://github.com/greyhaven-ai/claude-code-config)