All errors are generic Error instances, making it impossible for users to programmatically distinguish between Redis failures, AI API timeouts, Playwright action failures, and validation errors. Create a PassmarkError base class with specific subclasses (TimeoutError, AIModelError, CacheError, ValidationError) each with an error code property.