Runtime¶
Status¶
Status: CURRENT
Last consolidated by: BC-068D
This document describes the current runtime boundary. For the live operational posture, see ../operations/runtime-current-state.md.
Mission¶
Le Runtime exécute les traitements techniques de la Platform.
Il orchestre techniquement les jobs, batchs, locks, métriques et reprises d'erreur sans contenir la logique métier profonde.
Pourquoi ce composant existe¶
La Platform doit pouvoir exécuter des traitements longs, fiables et contrôlés sans mélanger :
- logique métier
- orchestration technique
- persistance
- monitoring
- interfaces utilisateur
Le Runtime existe pour rendre l'exécution fiable, observable et reprise en cas d'échec.
Responsabilités¶
Le Runtime est responsable de :
- orchestration technique
- queue
- batch planning
- batch execution
- locks
- retries
- métriques d'exécution
- logs runtime
- reprise après erreur
- contrôle d'état d'exécution
Le Runtime n'est pas la source de vérité métier et n'est pas le propriétaire des règles frontend, catalogues, projections publiques ou décisions de gouvernance.
La chaîne dormant Projection / Realtime n'est plus un runtime actif. L'état courant certifié est :
- aucune activation runtime de cette chaîne ;
- aucun worker/queue/event path live ;
- noyau de référence synchrone final seulement :
CatalogRankingEngine
→ CatalogIntelligenceRebuildService
→ CatalogIntelligenceEngine
→ CatalogRepositoryInterface
Ce qui lui appartient¶
Appartiennent au Runtime :
- Queue Runner
- Batch Planner
- Batch Executor
- Lock Manager
- Metrics Logger
- Run Repository
- Feed Reader runtime
- Settings runtime
- Retry policy
- Error handling technique
- adapters techniques de state/transient/lock
- adapters techniques cron/rewrite
- adapters techniques schema/install/migration
Ce qui lui est interdit¶
Le Runtime ne doit jamais contenir :
- règles métier profondes
- logique d'identité produit
- scoring vertical
- rendu frontend
- HTML
- règles de navigation
- décisions humaines
- patchs marchands
- corrections SQL opportunistes
Dépendances autorisées¶
Le Runtime peut dépendre de :
- Pipeline
- Infrastructure
- Settings techniques
- repositories runtime
- logs
- locks
- métriques
- stores techniques WordPress pour l'état runtime non métier
- adapters WordPress Cron / Rewrite pour la maintenance technique
- adapters WordPress Schema pour les probes/installations techniques explicites
Dépendances interdites¶
Le Runtime ne doit pas dépendre de :
- Frontend
- templates
- pages admin
- règles verticales directes
- Domain Core direct si le Pipeline doit servir d'intermédiaire
- décisions humaines de gouvernance
- endpoints HTTP de présentation
Dans l'état transitoire validé par BC-051 :
- le bootstrap runtime commun ne charge plus directement les hooks HTTP ;
- le frontend public est bootstrapé séparément ;
- les fonctions legacy Product Models de
includes/application/ne sont plus chargées depuisccx-feeds.phpmais via un loader ciblé frontend/CLI ; includes/feeds-pipeline.phpn'est plus chargé parincludes/bootstrap/runtime.phpet passe par un loader cibléincludes/bootstrap/pipeline.phpdans les contextes qui exécutent réellement le Pipeline.
Dans l'état transitoire validé par BC-052 :
includes/feeds-mapping.phpet la familleincludes/mapping/*ne sont plus chargés parincludes/bootstrap/runtime.php;- le mapping technique passe par
includes/bootstrap/mapping.phpet n'est chargé qu'avec le Pipeline ; includes/quality/*ne sont plus chargés parincludes/bootstrap/runtime.php;includes/bootstrap/quality.phpcharge Quality uniquement dans les contextes read-only de health/audit explicitement visés ;includes/strict/*ne sont plus chargés parincludes/bootstrap/runtime.php;includes/bootstrap/strict.phpexpose la capacité Strict (registry + règles) sans installer de schéma ;includes/bootstrap/strict-schema.phpajoute uniquement les déclarations de schéma Strict nécessaires aux points d'entrée de schéma explicites ;includes/bootstrap/verticals.phpcharge le registry vertical commun sans charger les modules métier ;includes/bootstrap/verticals.phpexpose aussi un detection registry léger pour le scoring vertical ;ccx_v5_choose_vertical()charge uniquement les détecteurs légersverticals/*/detect.phppendant la résolution ;- les
verticals/*/module.phpsont maintenant chargés à la demande viaccx_bootstrap_vertical_module(); - le Runtime commun ne charge plus les modules verticaux "au cas où".
Dans l'état transitoire validé par BC-063E2 :
- les writes techniques WordPress hors métier passent par un adapter explicite
includes/infrastructure/technical-state.php; CCX_WordPressTechnicalStateStoreconfine les options techniques ;CCX_WordPressTransientStoreconfine les transients techniques ;CCX_TechnicalLockServiceconfine les named locks MySQL ;- les wrappers legacy publics restent inchangés et conservent les mêmes clés, TTL et timeouts.
Dans l'état transitoire validé par BC-063E3 :
CCX_CronScheduleServiceetCCX_WordPressCronAdapterconfinent le scheduling technique WordPress ;CCX_RewriteMaintenanceServiceetCCX_WordPressRewriteAdapterconfinent la maintenance technique des rewrites ;- le fingerprint des routes Product Models reste stocké via le store technique WordPress ;
- aucun flush rewrite n'est autorisé sur le frontend public ;
- le cron passif n'acquiert aucun scheduling additionnel au chargement.
Dans l'état transitoire validé par BC-063E4 :
- les installations de schéma, migrations structurelles et tables temporaires actives passent par des services explicites ;
WP_CLIpassif et admin read-only ne doivent plus suffire à déclencher un install/migrate implicite ;- le versioning de schéma reste technique et passe par le store WordPress technique ;
- le SQL legacy de schéma reste inchangé mais n'est plus l'entrypoint public.
Entrées¶
Le Runtime peut recevoir :
- job
- feed à traiter
- configuration technique
- contexte d'exécution
- batch plan
- run_id
- priorité
- état précédent
Les contrôleurs WordPress admin-post n'orchestrent pas directement le Runtime. Ils délèguent à une façade applicative dédiée qui charge le minimum technique requis puis traduit un résultat explicite vers HTTP.
Le même principe s'applique progressivement à WP-CLI : les reads ccx sync passent désormais par une façade dédiée, et l'adapter CLI ne charge plus Quality au chargement du fichier. Le bootstrap Pipeline reste réservé aux sous-commandes qui exécutent réellement une action runtime.
Depuis BC-062B4C, les writes/orchestrations ccx sync passent aussi par un noyau d'actions commun :
- le point d'entrée WordPress/CLI ne décide plus de l'exécution runtime ;
sync-runtime-actions.phpcharge le Pipeline uniquement pour les actions qui en ont besoin ;cancel,cleanup-stage,cleanup-spooletsnapshots prunerestent hors Pipeline ;- la dette restante concerne surtout le bootstrap CLI global, pas l'adapter
sync-runtime.phplui-même.
Depuis BC-062B4D, la CLI Taxonomy suit à son tour cette séparation :
- l'adapter
taxonomy-v2.phpne pilote plus directement schéma, SQL, transactions ni temp tables ; taxonomy-v2-actions.phprend explicites les effets techniques de chaque commande ;auditetdry-runrestent classés comme diagnostics à effets techniques potentiels, et non comme lectures pures.
Depuis BC-062B4E, la frontière CLI est considérée certifiée :
- les commandes Sync read passent par
cli-sync-runtime-read.php; - les commandes Sync action et diagnostic passent par
cli-sync-runtime-actions.phpetsync-runtime-actions.php; profilerejoint aussi cette façade et ne reste plus une exception runner-direct ;- la dette qui subsiste concerne le chargement CLI global autour de
includes/bootstrap/cli.php/includes/runtime/bootstrap.php, non la logique des adapters.
Depuis BC-062C, cette dette de chargement CLI global est réduite :
includes/bootstrap/cli.phppasse parincludes/bootstrap/runtime-cli.phpau lieu du bootstrap runtime générique ;runtime-cli.phpcharge les repositories/runtime classes,sync-runner.php,sync-health.php,rebuild-chain.php,taxonomy-v2/core.phpet les manifestes CLI, mais pasqueue-runner.php;- le CLI simple ne rend plus disponibles
ccx_bootstrap_pipeline(),ccx_bootstrap_quality()niccx_health_admin_context(); - le chargement du Pipeline reste déclenché à l'exécution par
sync-runtime-actions.phppourstart,resume,batch,retry_failed,tick,maintain,doctor,profile,replayetrebuild_chain.
Depuis BC-062C3, les contextes admin/HTTP sont réduits à leur tour :
includes/bootstrap/admin.phppasse parincludes/bootstrap/runtime-admin.phpau lieu du bootstrap runtime générique ;runtime-admin.phpcharge les classes runtime requises pour les façades admin sansqueue-runner.phpni bootstrap Pipeline ;includes/bootstrap/http.phpdélègue uniquement à l'adapter HTTP ;- l'adapter HTTP charge
runtime-http.phpet le Pipeline uniquement dans la branche worker autorisée ; - les façades
http-admin-post-actions.phpdistinguent désormais : - runtime léger pour
enqueue_all,sync_health,rebuild_chain; - runtime + Pipeline pour
worker_groupseulement ; http-health.phpchargeccx-health-reconcile.phpà la demande, après validation de la route et de la clé.
Depuis BC-062C4, le fichier principal du plugin est à son tour réduit :
ccx-feeds.phpse limite au garde d'accès, aux constantes techniques, au chargement éventuel de la config locale, àbootstrap/platform.phppuis àbootstrap/plugin.php;- le contrat de routes Product Models et la maintenance de rewrites ne sont plus connus du point d'entrée ;
- ces responsabilités passent par
includes/bootstrap/route-maintenance.php, donc par un bootstrap technique interne plutôt que par le file-scope du plugin principal.
Depuis BC-062C5, cette frontière bootstrap WordPress est considérée certifiée :
ccx-feeds.phpconnaît seulement le bootstrap Platform puis le bootstrap plugin ;plugin.phpdistribue les contextes sans retour arrière :route-maintenanceworkerhttpadminclifrontendadmindépend deruntime-admin.php;httpdépend de l'adapter HTTP puis deruntime-http.phpuniquement dans les branches autorisées ;clidépend deruntime-cli.php;workerdépend du runtime commun ;- le frontend public reste projection-first et n'embarque ni bootstrap admin, ni bootstrap HTTP, ni runtime worker.
Invariants certifiés :
- aucun bootstrap croisé frontend/admin/HTTP/CLI/worker ;
- aucun Pipeline prématuré en frontend, HTTP forbidden, admin read-only ou CLI simple ;
- le Pipeline n'est autorisé qu'au moment d'une action explicite qui l'exige ;
- la maintenance de routes reste technique, séparée du rendu frontend public.
Depuis BC-063C3, un premier rebuild de projection métier sort aussi des orchestrateurs applicatifs directs :
ccx_product_models_rebuild()ne porte plus le SQL write deccx_product_models_v1;- le remplacement destructif scoped par
vertical_idpasse parCCX_ProductModelProjectionWriteService; - le SQL legacy reste confiné dans un writer technique dédié ;
- aucune transaction globale supplémentaire n'est ajoutée par cette frontière.
Depuis BC-063C4, les rebuilds d'enrichissement Product Models suivent le même principe :
ccx_product_model_variants_rebuild()ne porte plus le SQL write deccx_product_model_variants_v1;ccx_product_specs_rebuild()ne porte plus le SQL write deccx_product_specs_v1;ccx_product_gallery_rebuild()ne porte plus le SQL write deccx_product_gallery_v1;- chacun délègue un replace destructif scoped par
vertical_idà un write service dédié ; - aucune transaction globale supplémentaire n'est ajoutée.
Depuis BC-062D5, la certification de contexte WordPress complète ajoute :
- aucun adapter WordPress ne dépend d'un autre adapter WordPress ;
- les services partagés restent transport-neutral ;
- les globals transport restent confinés à leurs adapters ;
- le worker / cron ne dépend ni du frontend, ni de l'admin, ni du CLI ;
- le cron passif et la queue vide n'amorcent pas le Pipeline ;
- le Pipeline runtime worker n'est chargé qu'après détection d'un run reprenable.
Depuis BC-062E, cette frontière est aussi certifiée globalement au niveau Adapter :
- l'entry point WordPress ne connaît ni runtime direct, ni pipeline direct, ni logique métier ;
- les bootstraps restent des sélecteurs/chargeurs, pas des couches d'orchestration métier ;
- les writes legacy encore présents derrière des façades ou dans l'infrastructure/runtime ne doivent pas remonter dans les adapters.
Le même principe s'applique à l'endpoint WordPress de health : le hook init garde seulement la détection de route, l'authentification, le mapping de requête et la traduction HTTP, tandis que la façade applicative renvoie un résultat explicite contenant le payload JSON et les flags d'encodage attendus.
La surface admin WordPress Sync Runtime obéit au même principe :
- contrôleur admin pour hooks, capability, nonce, mapping et redirects ;
- façade de lecture pour le view model ;
- façade d'actions pour l'orchestration runtime et les writes ;
- renderer dédié pour l'HTML.
Le rendu read-only de la page admin ne doit pas charger le pipeline ni déclencher d'effet runtime. Le pipeline n'est autorisé qu'au moment des actions explicites qui en ont besoin (tick, maintain, start, resume).
Sorties¶
Le Runtime peut produire :
- statut d'exécution
- logs
- métriques
- erreurs contrôlées
- événements techniques
- état de queue
- résultat de batch
- information de reprise
Contrats utilisés¶
Le Runtime peut utiliser :
- contrats de Pipeline
- contrats de persistance technique
- contrats de logging
- contrats de lock
- contrats de métriques
Il ne doit pas contourner les contrats métier.
BC-063E5 — writes techniques certifiés¶
Les writes techniques WordPress utilisés par le Runtime sont désormais attendus uniquement via frontières explicites :
- état technique / transients / locks ;
- scheduling cron ;
- maintenance rewrite ;
- installation / migration / schéma temporaire.
Les helpers legacy encore présents dans le Runtime ne doivent plus déclencher de write technique au simple chargement. Les nettoyages ou installations résiduels doivent rester attachés à un contexte d'exécution explicite.
Composants internes¶
Organisation cible :
runtime/
queue/
queue-runner
job-repository
batch/
batch-planner
batch-executor
batch-persister
locks/
lock-manager
metrics/
metrics-logger
runs/
run-repository
errors/
retry-policy
failure-handler