Sugerencias
← TIL
~2 min de lectura
#astro#rust#migracion#pnpm

El compilador Rust de Astro 7 me cazó 2 bugs que llevaban meses en producción

pnpm build falló al minuto de instalar Astro 7.0.0. El error: un <section> abierto dos veces y un <div> sin cerrar en mi página de design system. Los dos llevaban meses en producción; el compilador de Go los autocorregía en silencio siguiendo la especificación HTML. El de Rust, que en la v7 es obligatorio, los rechaza de plano.

El diff completo de la migración#

src/pages/[lang]/design.astro
diff
                 </section>
-                <section>
     <section>
       <h2 class="section-title">{t("design.sect.media")}</h2>
@@
     </section>
+    </div>
   </main>

Eso fue todo el código que tocó la migración de 248 páginas. Dos líneas; el resto fue package.json y el lockfile.

Los 2 gotchas que el changelog no te grita#

Uso rehype-slug y rehype-autolink-headings, así que el nuevo procesador Markdown nativo (Sätteri) no me alcanzaba: tuve que instalar @astrojs/markdown-remark a mano y envolver los plugins con unified() en la config. Sin plugins, no hacés nada.

El segundo fue de pnpm, no de Astro. minimumReleaseAge bloquea paquetes recién publicados, y un major del mismo día no pasa el filtro:

pnpm-workspace.yaml
minimumReleaseAgeExclude:
  - astro@7.0.0
  - "@astrojs/mdx@7.0.0"
  - "@astrojs/vercel@11.0.0"

Lo que no te va a romper#

Según la documentación oficial de migración, hay más breaking changes, pero ni las constantes removidas de astro:transitions ni el nombre reservado src/fetch.ts afectan a un sitio estático típico. Las optimizaciones que ya tenías, como las navegaciones instantáneas con Speculation Rules, siguen funcionando igual. Verificalo con grep antes de entrar en pánico.

Mi postura: un compilador que rechaza tu HTML inválido no es fricción, es una auditoría gratis. La Cerca de Chesterton funciona al revés acá; el permiso que nadie recordaba haber dado (autocorrección silenciosa) escondía deuda técnica real.

Este sitio presume de Lighthouse 100/100 y aun así tenía HTML inválido en producción. Ningún linter lo vio; lo vio un compilador nuevo.

Enlace copiado al portapapeles