pub fn check_catalog(catalog: &Value) -> Result<(), String>
Checks a catalog’s shape and its payload rule: every field is an enum the catalog defines or a bounded integer, so no free text, money or name can enter an event.