fix(canary): accept null events from manage response
Backend serializes `Events []Event` as JSON `null` when the slice is nil (Go's zero value for slices). Spec §8.4 shows it as an array — stale spec, verified actual behavior with `curl http://localhost:22784/api/m/<uuid>` returning `"events": null` on a freshly-created token with no triggers. Zod schema was `events: z.array(eventResponseSchema)` — failed to parse the null, threw PARSE_ERROR, manage page rendered "CANNOT REACH ARCHIVE" instead of the empty dossier. Fixed: `.nullish().transform(v => v ?? [])` — accepts null/undefined and normalizes to []. Manage page's `events.length === 0` empty-state check ("No events recorded yet") now reachable; consumers always see an array. Caught by memory rule feedback_verify_data_shapes.md: trust reality > spec. I trusted §8.4's example object during Phase 14 schema design instead of hitting the live endpoint. Same kind of drift as the four Phase-14 spec-vs-code divergences cleared at the time — this one slipped through because TokenManagePage was never end-to-end exercised pre-UI.
This commit is contained in:
parent
915d471b8d
commit
44927b245c
|
|
@ -47,7 +47,10 @@ export type ManagePage = z.infer<typeof managePageSchema>
|
|||
|
||||
export const manageResponseSchema = z.object({
|
||||
token: manageTokenViewSchema,
|
||||
events: z.array(eventResponseSchema),
|
||||
events: z
|
||||
.array(eventResponseSchema)
|
||||
.nullish()
|
||||
.transform((v) => v ?? []),
|
||||
events_total: z.number().int().nonnegative(),
|
||||
events_silenced_active: z.number().int().nonnegative(),
|
||||
page: managePageSchema,
|
||||
|
|
|
|||
Loading…
Reference in New Issue