Technical notes on web development, DevOps, and AI integration.
1 article
Lowercasing an enum looks trivial; the values are compared literally in scope enforcement, so DDL, rows, constants, spec, and label maps move together.
TL;DR: A simple request to lowercase bidang values became a contract change since backend scopes match strings exactly and fail closed. Migration 000059 updated three database columns, backend constants, API specs and frontend types, normalizing rows while keeping ALL uppercase as the superadmin sentinel. The separate categories module was left untouched and a down migration was added for a clean rollback.