Skip to content

refactor(face): add signal provider boundary#10

Draft
rich7420 wants to merge 2 commits into
mainfrom
rich/face-signal-provider
Draft

refactor(face): add signal provider boundary#10
rich7420 wants to merge 2 commits into
mainfrom
rich/face-signal-provider

Conversation

@rich7420

Copy link
Copy Markdown
Collaborator

Moves face recognition behind a signal-provider boundary so DeepFace remains a face index while PersonService owns person profiles, candidates, facts, and review decisions.

Summary

  • Add FaceSignalProvider and a DeepFaceFaceSignalProvider compatibility adapter for identify/enroll/update/list/clear.
  • Route PersonService through face signals instead of a legacy person repository, keeping Unknown face matches as candidates until review.
  • Keep face_* tools on sanitized face-profile/index data only, rejecting malformed DeepFace success payloads instead of fabricating empty person IDs.
  • Update iOS/web People copy and contracts to describe confirmed people and facts as PersonService-owned, not DeepFace-owned.

Before: gateway/person paths could consume DeepFace profiles as if they were person records, so face matching and person ownership were still coupled.

After: face service/provider emits quality/match/profile-index signals; PersonService decides profile/candidate/fact outcomes; UI/tools consume the new bounded contract.

Validation

  • bun run typecheck
  • bun test ./tests/e2e-person-rpc.ts ./tests/integration/test-tool-invoke.ts ./tests/test-person-methods.ts ./tests/test-person-identity-contracts.ts ./tests/test-people-methods.ts
  • git diff --check origin/main...HEAD

Limitations / Follow-ups

  1. This is still a DeepFace compatibility path; it introduces the provider boundary but does not replace the DeepFace sidecar.
  2. Memory distillation is not switched to bounded person snapshots in this PR.
  3. Cross-modal voice/face/heard-name linking remains future work after the person-service boundary is stable.

rich7420 added 2 commits June 29, 2026 13:08
Make face_identify, face_enroll, face_update, and face_people return sanitized face-profile data only.

Reject malformed successful DeepFace payloads instead of fabricating empty ids, and require face_update name at the schema boundary.

Update iOS and web wording so person profiles and facts are described as PersonService-owned.
Add a shared FaceSignalProvider boundary around the legacy DeepFace index.

Route PersonService and face compatibility tools through the provider so face remains a signal/index source while person/candidate decisions stay in PersonService.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant