All checks were successful
CI / Unit & Component Tests (pull_request) Successful in 3m20s
CI / OCR Service Tests (pull_request) Successful in 22s
CI / Backend Unit Tests (pull_request) Successful in 3m31s
CI / fail2ban Regex (pull_request) Successful in 45s
CI / Semgrep Security Scan (pull_request) Successful in 20s
CI / Compose Bucket Idempotency (pull_request) Successful in 1m4s
CI / Unit & Component Tests (push) Successful in 3m23s
CI / OCR Service Tests (push) Successful in 23s
CI / Backend Unit Tests (push) Successful in 3m37s
CI / fail2ban Regex (push) Successful in 43s
CI / Semgrep Security Scan (push) Successful in 22s
CI / Compose Bucket Idempotency (push) Successful in 1m5s
Addresses Sara's review concerns: - Add a negative Testcontainers test: saveAndFlush of a RANGE with end < start throws DataIntegrityViolationException, proving chk_meta_date_end_after_start actually fires (H2 wouldn't) and exercising the backstop's trigger end-to-end. Guards against silent app/DB drift if the service guard ever regresses. - Tighten updateDocument_acceptsRange_whenEndAfterStart to assert the persisted end value, not just that save was called. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>