- Shipped
- August 14, 2026 at 5:06 PM UTC
- Author
- Kamo
- Commit
- 2aef5d6
dropStaleEnumWhitelistChecks() looked for '% IN (%', which is how CockroachDB stored a @Enumerated(EnumType.STRING) whitelist. PostgreSQL and YugabyteDB normalize the identical constraint to '(col)::text = ANY ((ARRAY[...])::text[])', so since the cutover the sweep has matched ZERO rows while logging success — 495 live whitelists frozen at whatever values existed when their table was made. The failure surfaces far from here. TimecardEventType.PUNCH_VOIDED was appended after hr_timecard_audit_event was created, so every void's audit insert failed the stale CHECK with SQLState 23514; because that insert flushed inside a nested @Transactional the tx went rollback-only and the caller saw an opaque UnexpectedRollbackException, surfacing in the timecard editor as "editor void failed" with nothing actually saved. Verified against the live database: the widened predicate matches 495 stale whitelists (including **************** and zero of the hand-written invariant CHECKs this runner declares — those all carry AND/OR/IS NULL and stay excluded. '=' deliberately is NOT an exclusion; the ANY-ARRAY rendering contains one.