createSynastryFullReport counted today's reports with .gte(), which the self-hosted client did not implement; every create threw before any credit was reserved and surfaced as a generic 500 (BUG-1399). The synastry create path now uses the shared DataQueryBuilder type, and a scan test requires every builder method used in src to exist on the self-hosted client. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014Ad9rqAB8pXXvyzh7f4X8v