All checks were successful
CI / Unit & Component Tests (pull_request) Successful in 4m29s
CI / OCR Service Tests (pull_request) Successful in 23s
CI / Backend Unit Tests (pull_request) Successful in 5m22s
CI / fail2ban Regex (pull_request) Successful in 45s
CI / Semgrep Security Scan (pull_request) Successful in 28s
CI / Compose Bucket Idempotency (pull_request) Successful in 1m8s
SDD Gate / RTM Check (pull_request) Successful in 14s
SDD Gate / Contract Validate (pull_request) Successful in 23s
SDD Gate / Constitution Impact (pull_request) Successful in 17s
PersonLifeDateField and RelationshipDateField were the same DateInput + restricted precision <select>: identical onMount seeding (incl. the YEAR fallback for stored non-offered precisions), the setCustomValidity partial-date guard, and markup. Extract that into a domain-agnostic DateInputWithPrecision primitive (caller injects the precisions, labels, hint, and styling deltas); both fields become thin wrappers that keep their existing public props, so the person new/edit pages and the Stammbaum call sites are unchanged. Named to stay distinct from the full DatePrecisionField (documents/timeline, all seven precisions + RANGE). The relationship select drops its redundant sr-only label, keeping the equivalent aria-label. PersonLifeDateField, AddRelationshipForm and RelationshipChip specs (26) stay green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>