pub fn validate_world_name(world_name: &str) -> Result<(), &'static str>
Returns the specific rejection reason so adapters can surface precise diagnostics instead of a blanket invalid-path error.