SKILL.md
Convex Retention
Overview
ClawHub retention is code-owned. Every current Convex table must be classified in convex/lib/retentionPolicy.ts, and ephemeral tables need an indexed, bounded cleanup path unless their lifecycle is handled by usage-time validation or a documented component.
Checklist
- Use
clawhub-convexand readconvex/_generated/ai/guidelines.mdfirst. - Add every new schema table to
RETENTION_POLICIES; theRecord<TableNames, RetentionPolicy>type
is the enforcement gate.
- For ephemeral tables, prefer an explicit expiration field plus index, then prune with
.withIndex()
and .take(...).
- For new generic TTL tables, prefer
expirationTimeto match Convex Auth. Keep existingexpiresAt,
dayStart, and processedAt fields unless that table already needs a real migration.
- Use
RETENTIONSTANDARDBATCH_SIZEfor ordinary retention jobs. Keep incident-tested special cases,
such as skillStatEvents, on their documented caps.
- Cron jobs should schedule bounded cleanup entrypoints only. Large one-off production migrations or
destructive backfills still start with convex-migration-helper.
- Do not bulk-clear active auth state. Expired
authSessionsandauthRefreshTokensare pruned by
convex/retention.ts.
Verification
- Add or update focused tests for policy classification and cleanup behavior.
- Run the focused Vitest slice for touched cleanup modules.
- Run
bunx convex codegenafter schema/API changes. - Run a real Convex runtime check such as
bunx convex dev --once --typecheck=disable.