What changed
Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.
Affects payload.rollbackDescription.userId on UserEvent reachable from 1 operation. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.
no longer guaranteed present
Who is affected
Code that reads Vercel's UserEvent objects, used by 1 Vercel operation.
Before and after
| Where | Before | After |
|---|---|---|
| UserEvent.payload.rollbackDescription.userId | always present | may be missing |
| GET /v1/microfrontends/groups/{groupId}/projects · projects[].rollbackDescription.userId | always present | may be missing |
| POST /v1/projects/{idOrName}/avatar · rollbackDescription.userId | always present | may be missing |
| DELETE /v1/projects/{idOrName}/avatar · rollbackDescription.userId | always present | may be missing |
| PATCH /v1/projects/{projectId}/microfrontends · rollbackDescription.userId | always present | may be missing |
| GET /v10/projects · projects[].rollbackDescription.userId | always present | may be missing |
| POST /v11/projects · rollbackDescription.userId | always present | may be missing |
| GET /v9/projects/{idOrName} · rollbackDescription.userId | always present | may be missing |
| PATCH /v9/projects/{idOrName} · rollbackDescription.userId | always present | may be missing |
Code that breaks
// response.payload.rollbackDescription.userId may now be absent or null const userId = response.payload.rollbackDescription.userId ?? fallback;
Based on Vercel’s published API specification. How severity is decided.