feat: add expectSchema() with better errors