CreaRack-SL

Incidente: Stencils del Catalyst 9000 de Cisco rotos en importación (PROD)

Fecha

2026-07-13 (reporte), fix en v1.54.1

Severidad

Alta — funcionalidad completamente ausente (165/165 masters sin imagen).

Síntomas

  • Usuario (Edu) importa stencil .vss de Cisco Catalyst 9000.
  • Modal de stenciles: miniaturas muestran icono de imagen rota.
  • Stencil en editor: vacío (sin puertos, sin serigrafía, sin imagen).
  • Internar: no hay errores en logs; libvisio-ng genera SVGs válidos en XML, pero llenos de <image href="data:image/emf">.

Investigación

Raíz

Cisco no dibuja sus stencils con geometría Visio standard. En su lugar, incrusta el arte en un formato bitmap nativo de Windows (EMF — Enhanced Metafile). libvisio-ng extrae estos datos y los envuelve en una etiqueta SVG <image> con el EMF codificado en base64:

<svg xmlns="...">
  <image xlink:href="data:image/emf;base64,AQ..."/>
</svg>

El navegador web NO sabe renderizar EMF. Chrome, Firefox, Safari: todos lo ignoran → imagen rota.

Del fichero Catalyst 9000 (40 MB, 165 masters): los 165 son solo-EMF (sin geometría vectorial).

Verificación

  • Catalyst 9200, 9300: mismo patrón (Cisco usa el mismo motor para todos).
  • Eaton (Racks, UPS): SVGs con geometría real, no tocados.

Impacto en PROD

  • Usuarios que importan stencils de Cisco reciben librerías no funcionales.
  • Sin forma de arreglarlo sin fix en el servidor.
  • Reporte urgente por Edu (early user).

Resolución

v1.54.1 (mismo día):

  • Detección automática: función svg_is_emf_only() identifica SVGs con solo EMF.
  • Conversión: LibreOffice + rsvg convierten a PNG en lote (una invocación por operación = costo amortizado).
  • Fallback: si rsvg falla, EMF→PNG directo de LibreOffice.
  • Postproceso: blanco→transparente, autocrop, escalado mínimo.
  • Desaprobación: master fallido se descarta (mejor ausente que roto).

Memoria: compose.yml (dev) 512M → 1024M (libvisio pica ~515 MB).

Testing

  • Unit: detección, conversión, descarte.
  • Integration: Catalyst 9000 real (27/27 masters convertidos con éxito en Docker).
  • Verificación visual: Catalyst 9200/9300 nítidos, con puertos y serigrafía.

Limitaciones

  • Los stencils importados rotos (pre-fix) no se auto-reparan. Solución: borrarlos de la librería y re-importar el .vss.
  • Memoria: ficheros >100 MB pueden no caber. Mitigación: guards en QA + logs de warning.

Prevención futura

  1. Ampliar QA: añadir tests con otros fabricantes que usen EMF (si los hay).
  2. Monitoreo: loguear ratio EMF-solo vs. vectoriales (señal temprana de nuevos formatos).
  3. Documentación: en README, aclarar que stencils rotos pre-v1.54.1 deben re-importarse.

Véase también

  • [[feature—stencils—visio-emf-to-png]]
  • [[decision—20260713—visio-emf-detection-and-fallback]]
  • [[entity—racks—service—emf-converter]]