Fix content collection validation errors showing raw JSON
Since the Zod v3 → v4 migration, $ZodError.message returns a
JSON-stringified array instead of a human-readable string. Format
validation errors by iterating over error.issues, matching the
pattern already used in content/loaders/errors.ts.