1dca9d7d05
Phase 2 increment 5: - FaceIndexingService: a FileLifecycleHook that, on image upload, detects + embeds faces in a background task and stores them. Dedup-aware (clones an identical blob's faces instead of re-running inference), reindexes on overwrite, and relies on the DB cascade for deletes. Completely inert when no model is ready. - DI: registers the hook in the FileLifecycleService chain and exposes PeopleService in AppState — both gated on OXICLOUD_ENABLE_FACES, both using the default no-op analyzer until the operator wires a real ONNX model. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JW6ghFMDtnRYuYNzZhb47M