Aller au contenu

BC-066B — Catalog Intelligence Boundary & Dependencies

Status: HISTORICAL For the current architecture, see: ./dependances.md, ../runtime/overview.md.

Projet : /mnt/data/cmonchoix-platform Branche : bc-048-samsung-wearable-enrichment

Verdict

BC-066B est fermable.

Cette tranche :

  • rend explicite le port canonique du repository catalogue ;
  • conserve PriceAggregationEngine et CatalogRankingEngine comme dépendances legacy retenues ;
  • retire l’alias de test devenu inutile ;
  • garde la chaîne dormante, sans nouvel entrypoint runtime.

Avant / après

Élément Avant Après
repository injecté dans CatalogIntelligenceEngine CMonChoix\Domain\Catalog\Repository\CatalogRepositoryInterface CMonChoix\Platform\Domain\Catalog\Repository\CatalogRepositoryInterface
alias de test local oui non
comportement métier implicite et partiellement non testé caractérisé et inchangé
mutation item existant mutation directe d’un CatalogItem readonly reconstruction d’un CatalogItem équivalent puis save() unique

Repository

Interface canonique retenue :

  • CMonChoix\Platform\Domain\Catalog\Repository\CatalogRepositoryInterface

Implémentation prouvée :

Implementation Current interface Target interface Storage Active
CMonChoix\Platform\Infrastructure\Catalog\InMemoryCatalogRepository canonique canonique mémoire oui

Le FQCN legacy CMonChoix\Domain\Catalog\Repository\CatalogRepositoryInterface n’était pas une vraie interface maintenue : aucun fichier source ne le définissait, et aucun autoload Composer ne le supportait.

PriceAggregationEngine

Statut retenu :

  • legacy conservé ;
  • helper pur ;
  • aucune migration canonique en BC-066B.
Method Input Output Side effects
aggregate(array $offers) liste d’offres min/max/count/best aucun

CatalogRankingEngine

Statut retenu :

  • legacy conservé ;
  • aucune migration canonique en BC-066B ;
  • comportement figé par test.
Rule Input Output Complexity
score descendant liste d’offres liste triée par score décroissant O(n log n)

Note : aucune stabilité de tri supplémentaire n’a été introduite.

CatalogIntelligenceEngine

Invariants conservés :

Invariant Avant Après Identique
rebuild(string $productId, array $offers): void oui oui oui
findById() avant write oui oui oui
return immédiat si item absent oui oui oui
agrégation prix oui oui oui
normalisation merchant oui oui oui
metadata offers / best oui oui oui
save() unique oui oui oui
propagation d’exception oui oui oui

RealtimeCatalogRebuilder

Aucun changement d’ordre ni d’entrypoint :

  • boot() inchangé
  • process() inchangé
  • ordre ranking -> intelligence inchangé
  • événements supportés inchangés
  • extraction d’identifiant inchangée

Compatibilité / réflexion

API FQCN avant FQCN après Runtime compat Reflection compat
repository constructor param legacy inexistant en pratique canonique oui non significatif hors surface interne
PriceAggregationEngine legacy legacy oui oui
CatalogRankingEngine legacy legacy oui oui

Dette restante

  • PriceAggregationEngine encore en namespace legacy
  • CatalogRankingEngine encore en namespace legacy
  • chaîne Realtime toujours dormante
  • ProjectionEngine placeholder
  • AsyncEventQueue placeholder

BC-066C pourra traiter la rationalisation de l’orchestration dormante sans rouvrir cette frontière repository.

Note postérieure BC-066C

BC-066C a confirmé que cette frontière repository peut rester stable pendant la rationalisation Projection/Realtime :

  • aucun changement supplémentaire sur CatalogIntelligenceEngine ;
  • aucune activation de worker/queue/rebuild ;
  • aucune dépendance plugin/runtime ajoutée.

Note postérieure BC-066D

BC-066D confirme que cette frontière reste une surface interne non activée :

  • CatalogIntelligenceEngine garde son rôle applicatif/testé ;
  • aucun usage live n’est autorisé ;
  • toute activation future doit d’abord résoudre les gaps opérationnels documentés.

Note postérieure BC-066E

BC-066E clôture la trajectoire :

  • frontière repository canonique certifiée ;
  • CatalogIntelligenceEngine confirmé dormant ;
  • aucun branchage runtime/plugin introduit.