Erreur : alexandrecarette.fr — SSR rend un squelette vide depuis le ship du 2026-05-17 11:22 (deploy-alexandrecarette.sh). Logo letter manquant (?), <ul> nav vide, aria-labels et signature footer affichés en clés brutes (common.back_home, common.main_navigation, footer.signature_prefix, footer.signature_by). Toutes les routes SSR qui passent par useClientDb('ac-hub') répondent 500 : /api/megamenu, /api/footer-config, /api/prefooter-sections, /api/reviews, /api/site-config, /api/i18n (via resolveIdLang).
Check ajouté : 1) bin/check-pm2-env.sh <tenant> : vérifie via SSH que le pm2 process a bien PG_ENABLED_DOMAINS + PG_HOST + PG_DB + NODE_ENV=production. Appelé depuis ./ship post-deploy avant le smoke. 2) bin/smoke-tenants.sh étendu : pour alexandrecarette + codemyshop + codemyshop-demo, /api/megamenu doit retourner JSON 200 ET items.length >= 1 (sinon SSR rendrait un nav vide même si HTTP 200).
Cause racine : Process pm2 'alexandrecarette-nuxt' (pid 288823, port 3002 sur 51.68.126.67) lancé sans les vars PG_HOST / PG_PORT / PG_DB / PG_USER / PG_PASSWORD / PG_ENABLED_DOMAINS=* / NODE_ENV=production / NUXT_PUBLIC_PS_FRONT_URL. Dump pm2 confirme : son env n'a que PORT=3002 + HOST=127.0.0.1 + shell vars. Comparé au process 'codemyshop-nuxt' (qui marche) sur la même machine, toutes les vars PG manquent. Conséquence : useClientDb tombe sur le code path 'useClientDbById(ac-hub) : path mysql2 droppé (chantier #44 E.4). Tenant non vaisseau-mère AC ou PG_ENABLED_DOMAINS non wildcard.' Le deploy-alexandrecarette.sh utilise pm2 reload --update-env qui ne relit pas un .env manquant — il faudrait pm2 delete + pm2 start (cf cicatrice ecosystem-preprod-cookie-key).