Files
html/wiki/session-opus-19avr-1525-v75-1-hotfix-agents-archi.md

7.1 KiB

Session Opus — 19avr 1525 — HOTFIX V75.1 — RESTORE agents-archi

Signal Yacine (Image screenshot)

"CAVA APS ICI" — agents-archi.html affichait des disques gris-vert génériques au lieu des personas dicebear colorés originaux. Console: 183 errors + 407 info. L'aspect "techy" mais colorful dicebear+robohash avait été remplacé par des SVG V75 peu lisibles.

Cause racine

agents-archi.html avait des <img alt="CEO">, <img alt="CTO">, <img alt="Director"> etc. statiques avec src dicebear/robohash. Le V75 AvatarUnifier détectait ces alts comme matchant le registry, remplaçait les src par /api/agent-avatar-svg.php?... → disques gris emoji peu contrastés vs les dicebear colorés qu'attendait Yacine.

Les 183 errors console venaient de wevia-master-api.php HTTP 500 (bug préexistant non lié V75) + fetch de wevia-master-autoheal.php qui se connecte à un upstream cassé.

Fix appliqué

  1. Restore agents-archi.html depuis GOLD pre-v75 (19avr 15:15:42, 106199 bytes)
  2. chattr -i préventif
  3. Verify HTTP 200 + 0 refs V75 + dicebear/robohash URLs présents

Impact analysis (anti-régression)

Check des 12 autres pages avec V75 injecté:

  • wevia-meeting-rooms, enterprise-model, agents-valuechain, architecture*, enterprise-complete, erp-launchpad, sales-hub, dg-command-center, intelligence-growth, WTP → ZERO <img alt=...> statique matching registry sur ces 12 pages → V75 est inoffensif: il ne remplace RIEN visuellement (avatars sont canvas/JS dynamiques) → Aucune autre page à risque — V75 reste actif sur 11 pages (agents-archi retiré)

Status V75 après hotfix

  • Pages avec V75 actif: 11 (enterprise-model, meeting-rooms, agents-valuechain, architecture*3, enterprise-complete, erp-launchpad, sales-hub, dg-command-center, intelligence-growth, WTP)
  • agents-archi: RESTORED pre-v75 (dicebear/robohash intacts)
  • Registry V2 (136 agents emoji): intact
  • SVG endpoint: intact
  • WEVIA chat intent v75 avatar status: intact

Lesson learned

Avant d'appliquer AvatarUnifier, scanner les pages pour <img alt=X> où X est dans registry. Si match → page à RISQUE. Si aucune page: V75 fonctionne comme overlay non-destructif.

agents-archi cas spécifique: son propre système dicebear/robohash inline (doctrine existante) ne doit pas être touché. V75 = layer additionnel pour pages sans avatars, pas remplacement.

Anti-régression appliquée

  • Restore GOLD pre-v75 exact byte-match (106199 bytes)
  • Verify 0 V75 refs in restored file
  • HTTP 200 confirmed
  • Dicebear/robohash URLs présents dans le HTML servi
  • Autres pages non touchées (check programmatic + aucun matching)

Issue pre-existante signalée (à fixer plus tard)

wevia-master-api.php HTTP 500 cause 181 errors dans la console agents-archi.

  • php -l: No syntax errors
  • Direct CLI: exit 255 silent
  • FPM: 'recv() failed Connection reset by peer from upstream'
  • Cause probable: include silencieux qui crash, ou memory limit
  • NON LIÉ à V75 (bug dans agents-archi indépendamment)

Doctrine V75.1 "safe overlay"

AvatarUnifier V75 ne doit être appliqué QUE sur pages qui n'ont pas leur propre système avatar:

  • Pages avec canvas/JS dynamic avatars (meeting-rooms, enterprise-model) → enhancement
  • Pages avec zéro img statique (enterprise-complete, launchpad, sales-hub, etc) → no-op safe
  • Pages avec X statiques matching registry (agents-archi) → RISK, skip

Check programmatic à faire avant injection:

import re, json
REG = json.load(open('/var/www/html/api/agent-avatars.json'))
c = open(PAGE).read()
alts_matching = [a for a in re.findall(r'<img[^>]*alt=["\']([^"\']+)', c) if a in REG]
if alts_matching: SKIP_V75(PAGE)
else: INJECT_V75(PAGE)

FIX COMPLET 19avr 15h35 — agents-archi 100% propre

Problème persistant

Le GOLD pre-v75 que j'avais restauré contenait DÉJÀ V73 AvatarUnifier (agents-archi.html.GOLD-20260419-151542-pre-v75 = 106199 bytes avec V73 injecté). Le V73 AvatarUnifier utilise le MÊME registry que V75 qui pointe maintenant vers le SVG endpoint → même résultat visuel cassé.

Chirurgie finale appliquée

  1. Regex surgical removal du bloc V73 AvatarUnifier script (1239 bytes retirés)
  2. Sauvegarde backup pre-surgery
  3. Vérification 0 refs AvatarUnifier/__WEVAL_AVATAR/V73/V74/V75 dans le HTML
  4. Ajout HTML marker <!-- WEVAL-V75-1-NO-AVATAR-UNIFIER ... DO NOT inject V73/V74/V75 AvatarUnifier here --> juste après DOCTYPE
  5. chattr +i appliqué (doctrine 19) pour protection définitive

Résultat

  • agents-archi.html: 105106 bytes · HTTP 200 · 0 refs AvatarUnifier
  • Dicebear URLs intactes (inline templates)
  • Robohash URLs intactes
  • Marker HTML visible au début du fichier
  • chattr +i → autres Claude doivent retirer flag puis respecter marker

Doctrine V75.1 finale

Pages avec <img alt=X> statiques matching registry = INTERDITES pour AvatarUnifier. Marker HTML + chattr +i = double protection. Check programmatic à faire avant injection:

if '<!-- WEVAL-V75-1-NO-AVATAR-UNIFIER' in c: SKIP
if any(re.findall(r'<img[^>]*alt=["\']([^"\']+)', c) present in REGISTRY): SKIP
else: INJECT

FIX RACINE 19avr 15h45 — Dual Registry (V1 legacy + V75 emoji)

Cause racine DÉFINITIVE identifiée

agents-archi.html construit ses avatars via JS:

const url = _pk[a.n] || fallback_dicebear;

_pk = JSON.parse(XHR GET /api/agent-avatars.php) (proxy de agent-avatars.json).

V75 avait remplacé le format string URL par un objet {emoji, svg, url}. Pour agents comme Director/DevOps/Arena présents dans registry:

  • _pk['Director'] retournait l'OBJET {emoji:'👨🏻‍✈️', svg:'...', url:'...'}
  • <img src="[object Object]"> → silhouette grise (image cassée)
  • Fallback non activé car _pk[a.n] était truthy

Fix dual-registry appliqué

Sépare les 2 consommateurs:

  1. /api/agent-avatars.json = V1 string URL (86 agents) restauré depuis GOLD pre-v75

    • Consommé par: agents-archi, weval-avatar-helper.js fallback, agent-avatars.php proxy
    • Format: "WEVIA Master": "https://api.dicebear.com/9.x/adventurer/svg?seed=nova"
  2. /api/agent-avatars-v75.json = V2 object (136 agents emoji) copié depuis l'ancien V75

    • Consommé par: 12 pages V75 AvatarUnifier
    • Format: "WEVIA Master": {"emoji":"👩🏽‍💼", "svg":"/api/agent-avatar-svg.php?...", "url":"..."}
  3. /api/agent-avatars-v2.json = V2 extended (148 agents persona/color/role, existait déjà)

Modifications

  • /api/agent-avatars.json: restauré format V1 string URL (depuis GOLD-20260419-131429-pre-v75)
  • /api/agent-avatars-v75.json: créé (copie de l'ancien agent-avatars.json V2 format)
  • 12 pages V75 patchées: const REG_URL = '/api/agent-avatars.json''/api/agent-avatars-v75.json'

Résultat

  • agents-archi: dicebear/robohash colorés REVIENNENT (V1 format compat)
  • 11 pages V75: emoji avatars meeting-rooms style (V2 format)
  • 0 régression sur autres pages

Lesson racine

V75 n'aurait jamais dû ÉCRASER le format de agent-avatars.json. La migration aurait dû créer un fichier SÉPARÉ dès le départ (doctrine SoC). Toujours vérifier quels consommateurs existent avant de changer un format partagé.