BC-067B — Dormant Runtime Retirement Decision¶
Status: HISTORICAL
For the current architecture, see: ./dependances.md, ../runtime/overview.md, ./bc-067d-reference-core-final-certification.md.
Projet : /mnt/data/cmonchoix-platform
Branche : bc-048-samsung-wearable-enrichment
Verdict¶
BC-067B est fermable.
Décision globale¶
RETIREMENT_DECISION: REDUCE_TO_REFERENCE_CORE
BC-067A a déjà verrouillé DO_NOT_ACTIVATE.
BC-067B ajoute la seconde moitié de la décision : il ne faut pas garder toute la chaîne dormante indéfiniment telle quelle.
La meilleure décision au 15 juillet 2026 est :
- conserver un noyau de référence très limité ;
- préparer le retrait futur des placeholders et shells runtime dormants ;
- ne supprimer aucun code dans BC-067B elle-même.
Synthèse par composant¶
| Component | Decision | Justification | BC de mise en œuvre |
|---|---|---|---|
CatalogIntelligenceEngine |
KEEP_AS_REFERENCE |
seul composant portant encore des règles métier directement testées sur repository canonique | aucune requise pour le garder |
ProjectionEngine |
RETIRE |
moteur placeholder, sans comportement projection utile prouvé | BC-067C or dedicated BC |
ProjectionCatalogWiring |
RETIRE |
wiring de compatibilité autour d’un moteur placeholder, sans consumer live | BC-067C or dedicated BC |
EventSubscriberRegistry |
RETIRE |
valeur limitée à la chaîne realtime dormante, remplaçable par tests de caractérisation | BC-067C or dedicated BC |
AsyncEventQueue |
RETIRE |
queue mémoire purement test/prototype, non production-ready, concept déjà couvert ailleurs | BC-067C or dedicated BC |
AsyncWorker |
RETIRE |
worker dormant sans consumer live ni logique unique indispensable | BC-067C or dedicated BC |
RealtimeCatalogRebuilder |
REDUCE_TO_REFERENCE_CORE |
garde encore un flow unique ranking -> intelligence et l’extraction aggregateId/productId, mais pas un avenir runtime live |
BC-067C or dedicated BC |
Inventaire final¶
| Component | Rôle | Consumers prod | Consumers tests | Valeur actuelle |
|---|---|---|---|---|
CatalogIntelligenceEngine |
mise à jour d’intelligence catalogue via repository canonique | 0 | 3 | référence architecturale / règles métier testables |
ProjectionEngine |
replay/dispatch placeholder | 0 | 2 | placeholder / prototype |
ProjectionCatalogWiring |
wiring de compatibilité store -> writer | 1 interne seulement | 1 | compatibilité / prototype |
EventSubscriberRegistry |
registre ordonné d’abonnés | 0 | 3 | orchestration cohérente locale |
AsyncEventQueue |
FIFO mémoire | 0 | 3 | test helper / placeholder |
AsyncWorker |
consommateur de queue dormant | 0 | 2 | test helper / prototype |
RealtimeCatalogRebuilder |
orchestration ranking -> intelligence | 0 | 2 | référence de design / orchestration cohérente |
Note : le seul “consumer prod” encore visible est ProjectionCatalogWiring -> new ProjectionEngine() à l’intérieur même de la chaîne. Il ne constitue pas un consumer live plugin/runtime.
Preuve d’usage¶
| Component | Production use | Test use | Reflection | Serialization | Verdict |
|---|---|---|---|---|---|
CatalogIntelligenceEngine |
non | oui | non | non | keep as reference |
ProjectionEngine |
non live | oui | non | non | retire |
ProjectionCatalogWiring |
interne à la chaîne seulement | oui | non | non | retire |
EventSubscriberRegistry |
non | oui | non | non | retire |
AsyncEventQueue |
non | oui | non | non | retire |
AsyncWorker |
non | oui | non | non | retire |
RealtimeCatalogRebuilder |
non | oui | non | non | reduce to reference core |
Preuves structurantes :
- aucun import plugin/runtime live ;
- aucun hook WordPress, cron, CLI, HTTP, worker runtime ;
- aucune reflection prouvée ;
- aucun FQCN sérialisé/persisté prouvé ;
- les usages restent confinés à
src/et aux tests.
Valeur réelle conservée¶
| Component | Valeur de test | Valeur de compat | Valeur de design | Coût de maintenance |
|---|---|---|---|---|
CatalogIntelligenceEngine |
élevée | moyenne | élevée | moyen |
ProjectionEngine |
faible | faible | faible | moyen |
ProjectionCatalogWiring |
moyenne | moyenne | faible | moyen |
EventSubscriberRegistry |
moyenne | faible | moyenne | faible |
AsyncEventQueue |
moyenne | faible | faible | moyen |
AsyncWorker |
moyenne | faible | faible | moyen |
RealtimeCatalogRebuilder |
élevée | moyenne | élevée | moyen |
Focus CatalogIntelligenceEngine¶
| Élément | Unique | Dupliqué | Retirable |
|---|---|---|---|
agrégation min/max/best avant persist |
oui | non prouvé | non |
normalisation marchands dans metadata['offers'] |
oui | non prouvé | non |
| no-op si item absent | oui | non prouvé | non |
| shell realtime autour | non | oui, via RealtimeCatalogRebuilder |
oui |
Décision :
- conserver
CatalogIntelligenceEngine; - retirer plus tard l’orchestration dormante autour ;
- ne pas confondre ce service métier testable avec la chaîne runtime inactive.
Focus ProjectionEngine¶
| Capability | Implémentée | Placeholder | Utilisée |
|---|---|---|---|
rebuildAll() appelle replayAll() |
oui | non | oui, tests |
dispatch product.created |
partiel | oui | tests seulement |
| construction de read model | non | oui | non |
| projection utile persistée | non | oui | non |
Décision :
- candidat clair au retrait futur.
Focus ProjectionCatalogWiring¶
| Consumer | Reason | Replaceable |
|---|---|---|
ProjectionCatalogWiring::build() |
construit ProjectionEngine placeholder |
oui |
ProjectionCatalogWiringCompatibilityTest |
couvre le pont vers CatalogProjectionWriter |
oui |
Décision :
- le pont vers
CatalogProjectionWriterdoit être caractérisé ; - le shell de wiring n’a pas de raison forte de survivre ensuite.
Focus EventSubscriberRegistry¶
Il n’existe aucune preuve locale de réutilisation hors RealtimeCatalogRebuilder.
Décision :
- pas de statut de composant générique stable ;
- retrait futur probable avec la réduction du shell realtime.
Focus AsyncEventQueue¶
| Capability | Nécessaire aux tests | Disponible ailleurs |
|---|---|---|
| FIFO mémoire | oui | oui, conceptuellement |
| queue durable | non | oui ailleurs dans le repo |
| retry / DLQ / claim | non | oui ailleurs sous autres abstractions |
Décision :
- ne surtout pas la conserver comme “fausse prod queue” ;
- candidat naturel au retrait.
Focus AsyncWorker¶
Sa seule logique propre est :
- pop d’un objet ;
- si
DomainEvent:process() - sinon :
boot()
Cette valeur est faible et déjà contournable via tests directs du rebuilder.
Décision :
- candidat au retrait.
Focus RealtimeCatalogRebuilder¶
| Flow | Unique | Used elsewhere | Candidate extraction |
|---|---|---|---|
boot() idempotent avec abonnements |
oui | non prouvé | oui |
extraction productId/aggregateId |
oui | non prouvé | oui |
ranking -> intelligence->rebuild() |
oui | non prouvé | oui |
Décision :
- ne pas le garder comme shell realtime complet ;
- réduire plus tard à un noyau de référence synchrone, ou en extraire seulement les règles utiles.
Graphe transversal¶
AsyncEventQueue
→ AsyncWorker
→ RealtimeCatalogRebuilder
→ EventSubscriberRegistry
→ CatalogRankingEngine
→ CatalogIntelligenceEngine
→ CatalogRepositoryInterface
ProjectionCatalogWiring
→ ProjectionEngine
→ CatalogProjectionWriter
| Source | Target | Nécessaire si retrait partiel |
|---|---|---|
AsyncEventQueue |
AsyncWorker |
non |
AsyncWorker |
RealtimeCatalogRebuilder |
non |
RealtimeCatalogRebuilder |
EventSubscriberRegistry |
non, si flow extrait directement |
RealtimeCatalogRebuilder |
CatalogRankingEngine |
oui |
RealtimeCatalogRebuilder |
CatalogIntelligenceEngine |
oui |
CatalogIntelligenceEngine |
CatalogRepositoryInterface |
oui |
ProjectionCatalogWiring |
ProjectionEngine |
non |
ProjectionCatalogWiring |
CatalogProjectionWriter |
non, si test direct du writer conservé |
Scénarios comparés¶
| Option | Gain | Risque | Effort | Réversibilité |
|---|---|---|---|---|
KEEP_ALL_DORMANT |
nul | confusion future et dette continue | faible | forte |
REDUCE_TO_REFERENCE_CORE |
bon compromis dette/valeur | faible à moyen | moyen | forte |
RETIRE_ALL |
dette minimale | trop agressif sans extraction préalable des règles utiles | moyen | moyenne |
Conclusion : REDUCE_TO_REFERENCE_CORE est la meilleure décision prouvable aujourd’hui.
Périmètre du noyau de référence¶
Ce qui doit rester comme noyau cible :
CatalogIntelligenceEngine- les tests métier qui prouvent ses règles
- la documentation de la chaîne et de la décision
- la caractérisation du flow
ranking -> intelligence
Ce qui est candidat au retrait futur :
ProjectionEngineProjectionCatalogWiringEventSubscriberRegistryAsyncEventQueueAsyncWorker- le shell realtime complet de
RealtimeCatalogRebuilder
Risque de suppression future¶
| Component | Reflection | Serialization | External consumer | Removal risk |
|---|---|---|---|---|
CatalogIntelligenceEngine |
non | non | non live | moyen |
ProjectionEngine |
non | non | non | faible |
ProjectionCatalogWiring |
non | non | non live | faible |
EventSubscriberRegistry |
non | non | non | faible |
AsyncEventQueue |
non | non | non | faible |
AsyncWorker |
non | non | non | faible |
RealtimeCatalogRebuilder |
non | non | non | moyen |
Tests requis avant suppression en BC-067C+¶
- no-consumer gate
- no-reflection gate
- no-serialization gate
- no-plugin/runtime gate
- behavior extraction tests
- autoload absence test
- removed-FQCN guard
Impact runtime¶
- aucun changement runtime ;
- aucun changement plugin ;
- aucun sync runtime ;
- aucun worker réel ;
- aucun rebuild réel ;
- aucun event réel ;
- aucun write réel.
Conclusion¶
Au 15 juillet 2026 :
DO_NOT_ACTIVATEreste vrai ;REDUCE_TO_REFERENCE_COREest la bonne décision de retraite ;- BC-067B ferme donc la décision, mais pas la suppression ;
- toute suppression réelle relève d’une BC-067C ou dédiée.
Note postérieure BC-067C¶
BC-067C a exécuté cette réduction sans activer de runtime :
CatalogIntelligenceEnginereste conservé ;- le noyau de référence est maintenant
CatalogIntelligenceRebuildService -> CatalogIntelligenceEngine; ProjectionEngine,ProjectionCatalogWiring,EventSubscriberRegistry,AsyncEventQueue,AsyncWorkeretRealtimeCatalogRebuilderont été retirés ;- aucun wrapper live n’a été gardé.
Note postérieure BC-067D¶
BC-067D ferme la décision de retraite :
REDUCE_TO_REFERENCE_COREdevient l’état final certifié ;- le runtime demeure non activé ;
- aucun consumer live plugin/runtime du reference core n’est prouvé.