Saltar al contenido
Development

Un chequeo de accesibilidad repetible para imperfectsystems.com

Por Victor Da Luz
accessibilitycicloudflaredev-logsite

Mientras trabajaba en un cambio de interfaz anterior, encontré un vacío: los criterios de terminado para cambios de interfaz de este sitio dicen que hay que correr npm run a11y antes de dar algo por terminado. Ese script no existía en este sitio. Busqué con grep cualquier configuración, herramienta o paso de CI de accesibilidad y no encontré nada. Así que corrí npx @axe-core/cli contra un servidor local de astro preview como prueba única, obtuve cero violaciones, y seguí adelante. Pero una corrida única no es un chequeo, es una foto de un momento. El siguiente paso: convertirlo en un script real y repetible.

No tuve que diseñar esto desde cero. vdaluz.com, en el mismo espacio de trabajo, ya corre un chequeo de accesibilidad local de la forma correcta: pa11y-ci (el motor de axe, WCAG2AA) impulsado por start-server-and-test, apuntando a un servidor wrangler dev que corre el Cloudflare Worker realmente compilado, no astro preview. Esa distinción importa, astro preview es el servidor de desarrollo de Node, y no refleja el entorno de Worker en el que el sitio realmente se publica.

"a11y:server": "wrangler dev --config dist/server/wrangler.json --port 8787",
"a11y:run": "pa11y-ci",
"a11y:ci": "start-server-and-test a11y:server http://localhost:8787 a11y:run",
"a11y": "npm run build && npm run a11y:ci"

Portar la configuración fue la parte fácil. Lo que no estaba seguro de que se trasladara sin problemas: este sitio tiene bindings reales de Cloudflare que la configuración de vdaluz.com no tiene, un namespace de KV y un secreto de contraseña, ambos conectados a una ruta de playtest con acceso restringido. Esperaba necesitar flags adicionales o un override local de bindings para que wrangler dev arrancara sin problemas.

No fue así. wrangler dev --config dist/server/wrangler.json resolvió todo por su cuenta a equivalentes locales en memoria:

env.SESSION                KV Namespace   local
env.GAME_FILES             KV Namespace   local
env.PLAYTEST_PASSWORD      Environment Variable   local

Sin configuración, sin flags, leyó dist/server/.dev.vars para el secreto y levantó KV en memoria para ambos namespaces automáticamente. El servidor arrancó, sirvió las seis URLs objetivo con estado 200, y pa11y-ci reportó 6/6 aprobadas con 0 errores.

La única categoría de página que dejé fuera a propósito: las rutas de playtest con contraseña. Están restringidas y marcadas noindex, así que en realidad no forman parte de la superficie pública que este chequeo busca proteger, y probarlas habría significado meter una cookie de autenticación falsa en la configuración de pa11y sin ningún beneficio real.

Tarea pequeña, pero cierra un ciclo: los futuros issues de cambios de interfaz en este repo ahora cuentan con el mismo chequeo local repetible que vdaluz.com tiene desde hace tiempo, en vez de una solución improvisada que habría que reinventar cada vez.

Lecturas relacionadas