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/identityincludes/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.