Cybersecurity-Projects/PROJECTS/beginner/canary-token-generator/frontend/src
CarterPerez-dev 44927b245c 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.
2026-05-17 17:58:13 -04:00
..
api fix(canary): accept null events from manage response 2026-05-17 17:58:13 -04:00
components fix(canary-phase-ui-design): single-source form fields + URL revoke + eventExtra schema 2026-05-17 15:07:50 -04:00
core feat(canary): manage dossier page + /m/:manageId route + 404 fallback 2026-05-17 14:54:27 -04:00
pages feat(canary): web fonts — Archivo Black / Space Grotesk / Departure Mono 2026-05-17 17:27:35 -04:00
styles feat(canary): web fonts — Archivo Black / Space Grotesk / Departure Mono 2026-05-17 17:27:35 -04:00
App.tsx fix(canary-phase-ui-design): single-source form fields + URL revoke + eventExtra schema 2026-05-17 15:07:50 -04:00
config.ts feat(canary): manage dossier page + /m/:manageId route + 404 fallback 2026-05-17 14:54:27 -04:00
main.tsx fix(canary-phase-ui-design): single-source form fields + URL revoke + eventExtra schema 2026-05-17 15:07:50 -04:00
styles.scss feat(canary): UI design layer — vector-minimalism tokens + primitives 2026-05-17 14:39:30 -04:00