$contains generates CONTAINS() SQL in Cosmos (string match), not ARRAY_CONTAINS() needed for string[] fields. Use findMany + in-memory post-filter for correct behavior across both providers.
Add backend/ directory with Fastify 5 + TypeScript ESM service: - Modules: timers, routines, households, shared-timers, webhooks (migrated from platform-service) - Cosmos containers: timers, routines, households, shared_timers, webhook_subscriptions, webhook_events - JWT verification via jose (matches platform-service issuer) - Shared @bytelyst/* packages via file: refs - 171 Vitest tests passing Update AGENTS.md: update backend integration section with product backend details