Aller au contenu

ADR-004 — Identity Domain Service

Statut

Accepted.

Contexte

CMonChoix Platform doit produire une identité produit stable à partir de données marchands incomplètes, divergentes ou bruitées.

Le legacy contient déjà une logique précieuse dans :

  • includes/platform/domain-core/identity
  • includes/platform/domain-core/identity/conflicts.php

Décision

La résolution d'identité devient une responsabilité officielle du Domain.

Elle est portée par un Identity Domain Service.

Ce service orchestre :

  • Candidate
  • Identifier
  • Canonical Identity
  • Identity Resolver
  • Conflict Policies
  • Candidate Selection Policy
  • Quality Evaluation
  • Projection preparation

Règles

L'Identity Domain Service ne doit jamais dépendre de :

  • WordPress
  • SQL
  • Frontend
  • Runtime
  • Pipeline
  • Marchands
  • Flux
  • Verticales concrètes

Conséquences

Le fichier legacy conflicts.php ne sera pas migré comme fichier unique.

Sa logique sera extraite en policies testables.

Classification

  • Concept : KEEP
  • Structure actuelle : REWRITE
  • Logique métier : MIGRATE

État d'implémentation P1.5B4B2B1

La première boundary terminale automatique conforme à cette ADR est portée par :

src/Domain/Product/IdentityResolution/
src/Application/Product/IdentityResolution/
src/Infrastructure/Product/IdentityResolution/

Le legacy includes/platform/domain-core/identity reste une source de logique à migrer et n'est pas promu comme nouvelle autorité Runtime.

La décision terminale automatique est matérialisée dans :

ccx_product_identity_resolutions_v1

créée via la migration versionnée IDENTITY-001 du composant identity-resolution.

Le store durable applique une idempotence par decision_fingerprint et generation.

À ce stade B1, le sync Runtime n'appelle pas encore ce use case. Le câblage des preuves product-grain, la génération d'un événement/outbox durable et l'émission capacity sont explicitement reportés à P1.5B4B2B2.

État d'implémentation P1.5B4B2B2A

La boundary terminale reste inchangée côté Domain. B2A ajoute uniquement une responsabilité Infrastructure de transport durable :

ccx_product_identity_capacity_outbox_v1
migration IDENTITY-002

Le staging de l'outbox est transactionnel avec l'écriture de la génération terminale. La clé durable resolution_id + generation empêche les retries identiques de créer plusieurs événements.

Cette outbox ne modifie ni le vocabulaire resolved/unknown/ambiguous/conflict, ni la policy du Resolver. Elle ne fait pas de CCX_MetricsLogger une dépendance du Domain ou de l'Application.

Le Runtime product-grain et le delivery de la métrique restent séparés dans B2B/B2C.