- DirectorAppointment entity + Liquibase migration (0347) - CRUD API: POST/GET/PUT/DELETE /v1/election/directors with @Valid Bean Validation - GET /v1/election/directors/pending — WON candidates not yet appointed - Duplicate prevention: existsByElectionIdAndCandidateId check on appoint - Business validation: tenure end must be after start; tenure start cannot be before appointment date - @Scheduled daily midnight job to auto-expire tenure-ended directors via bulk JPQL UPDATE - Full audit logging for all director actions (success + failure) via ElectionAuditService - PendingDirectorData DTO; DirectorAppointmentStatus enum (ACTIVE/RESIGNED/REMOVED/TENURE_ENDED) - ElectionAuditAction: added APPOINT_DIRECTOR, UPDATE_DIRECTOR_APPOINTMENT, REMOVE_DIRECTOR_APPOINTMENT + FAILED variants - ElectionResultRepository: findByResult(String) for pending director lookup Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>