- Ya
- 14 Agosti 2026, 17:06 UTC
- Mwandishi
- Kamo
- Ahadi ya
- 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.