Puertas de Calidad de HyperFrames
Visión General
La diferencia entre una gran ejecución de HyperFrames y una mediocre no es la creatividad, sino la disciplina de verificación. Las grandes ejecuciones tratan cada fotograma como no probado hasta que se han visto sus píxeles, en múltiples tiempos de búsqueda. Las ejecuciones mediocres confían en el verificador y entregan lo primero que pasa la sintaxis.
Principio fundamental: el linter verifica rectángulos y atributos; solo los píxeles renderizados dicen la verdad. Nunca declares un fotograma como terminado sin haberlo visto.
Puertas No Negociables
Trabaja a través de estas EN ORDEN para cada fotograma que construyas o edites. Saltarse una puerta porque "es un cambio pequeño" es como la calidad disminuye.
- Lee el bloque
## Dirección del vídeodel storyboard y síguelo por encima del boilerplate predefinido. Cuando el storyboard dice minúscula y elframe.mddel preset dice mayúscula, el storyboard gana. Dirección del proyecto > valores predeterminados del preset. - Un movimiento dominante por fotograma. Si tu fotograma tiene dos elementos resolviéndose a la vez, corta uno. Tanto precargar todo y luego congelar ("modo presentación de diapositivas") como tener todo flotando ("modo salvapantallas") son fallos.
- Autoverifica las trampas mecánicas (tabla abajo) haciendo grep en tu propio archivo antes de darlo por terminado.
- Realiza pruebas de búsqueda en un navegador antes de declarar terminado. Clona el
<template>, registra la línea de tiempo, y haztimeline.seek(t, false)en: t=0, cada límite de escena ±0.05s, y el fotograma final. Captura la pantalla de cada uno. MÍRALOS. Un informe de fotograma sin una prueba de búsqueda es una reclamación no verificada.- Trampa de
suppressEvents: usar.seek(t)sin más suprime las devoluciones de llamadaonUpdate— contadores/escritura se ven rotos en tu arnés pero bien en el renderizador. Siempre pasafalse.
- Trampa de
- Después de CUALQUIER reajuste de tiempo, vuelve a derivar
data-start/data-durationen los clips afectados. Los tiempos de los tweens de GSAP y las ventanas de visibilidad de los clips son dos sistemas separados; reajustar uno sin el otro crea elementos invisibles o espacios de silencio. Esta es la fuente de regresión #1. - Después del ensamblaje, captura una instantánea del vídeo completo en cada límite de corte y en el punto medio de cada fotograma, y lee tú mismo la hoja de contactos de la imagen. Arregla lo que se vea mal, vuelve a tomar la instantánea, solo entonces renderiza.
Tabla de Trampas Mecánicas (haz grep en tu propio archivo)
| Trampa | Síntoma | Solución |
|---|---|---|
id que comienza con dígito + querySelector("#...") | SyntaxError mata silenciosamente el registro de la línea de tiempo → fotograma en blanco | Prefija los ids con una letra, o usa getElementById primero |
transform: CSS en un elemento animado con GSAP | GSAP sobrescribe el desplazamiento CSS en el primer tween | Incorpora el desplazamiento en left/top; las transformaciones pertenecen solo a GSAP |
Falta de box-sizing: border-box en tarjetas con relleno | Los anchos se inflan, el centrado se desvía, las tarjetas chocan | Establécelo en cada tarjeta con relleno |
@font-face apuntando a fonts.gstatic.com / cualquier CDN | Renderizado no determinista; se rompe sin conexión | Archivos locales bajo assets/fonts/, relativos a la raíz del proyecto |
| Cálculo de superposición a ojo | Las tarjetas posteriores entierran el texto de las anteriores | Calcula rectángulos con getBoundingClientRect() en el tiempo de espera; verifica que el texto clave de CADA elemento apilado sea visible en una captura de pantalla |
| Hallazgos de superposición del verificador en texto ajustado/con interlineado apretado | Falso positivo (los rectángulos se superponen, los glifos no) | Verifica los píxeles primero, luego data-layout-allow-overlap — nunca suprimas a ciegas |
| Captura estirada/recoloreada en maqueta de teléfono | Dispositivo inquietante | Relación de aspecto nativa siempre; recorta con overflow:hidden, nunca escales de forma no uniforme |
Archivos ._* de AppleDouble en volúmenes externos | Rompe compilaciones/renderizados | find . -name '._*' -delete antes de ensamblar/renderizar |
| Node < 22 | CLI falla | Prefijo: export PATH="$HOME/.nvm/versions/node/v22*/bin:$PATH" (o nvm use 22) |
Patrón de Orquestación (compilaciones de múltiples fotogramas)
- Un trabajador por fotograma, un archivo por trabajador; los trabajadores nunca tocan archivos compartidos.
- Escenifica los activos compartidos (fuentes, logotipos, capturas de pantalla) ANTES de despachar los trabajadores; los paquetes nombran rutas exactas.
- Cada paquete lleva: el bloque del storyboard del fotograma textualmente, el bloque global de Dirección del vídeo, la tabla de trampas anterior, y el requisito de la prueba de búsqueda.
- El orquestador vuelve a ejecutar lint + check + inspección de la hoja de contactos después del ensamblaje independientemente de lo que informaran los trabajadores — los autoinformes de los trabajadores son reclamaciones, no pruebas.
Banderas Rojas — Detente y Verifica
- "La lint y la verificación pasaron, así que el fotograma es correcto" → las verificaciones no ven texto enterrado ni silencio. Mira los píxeles.
- "Reajusté los tweens; terminado" → ¿reajustaste también las ventanas
data-*del clip? - "Me saltaré la prueba de búsqueda, el código es sencillo" → el error de fotograma en blanco (selector de id con dígito) estaba en código sencillo y solo una prueba de búsqueda lo detectó.
- "La tarjeta probablemente no cubre a la otra" → calcula los rectángulos; luego captura la pantalla.
- "La fuente CDN está bien solo esta vez" → no lo está; los renderizados deben ser sin red.
Todo lo anterior significa: ejecuta la puerta que estabas a punto de saltarte.