Skip to content

All versions since 1.6.1

1.6.1

Fixed

  • Starlight plugins that extend the Markdown processor no longer stop working. Astro 7 renders Markdown with the Sätteri processor and hands every integration the same live processor object. Plugins extend the pipeline by changing that object. The theme replaced it with a unified() processor from two astro:config:setup hooks, which run after Starlight has already set up its plugins, so everything those plugins had registered was thrown away.

    The visible effect was starlight-links-validator 0.25 or newer: it validated zero links on every build and still printed “All internal links are valid”, so broken internal links passed unnoticed. Any plugin that configures itself against the Sätteri processor was affected the same way.

    defineNorthwesternConfig() now sets markdown.processor to unified() while astro.config.* is evaluated, before starlight() is created. No plugin ever sees Sätteri, and the theme only extends the processor it is given instead of replacing it. A processor you configure yourself is left alone.

  • Mermaid no longer swaps the Markdown processor either. astro-mermaid 2.1 supports Sätteri on its own.

1.6.2

Fixed

  • OG image text no longer unescapes twice. Entities were decoded in sequence with &amp; first, so a title containing the escaped text &amp;lt; came out as <. Decoding is now a single pass, and escaped text stays escaped.
  • The meta-refresh patterns used to rewrite legacy .html redirect pages are bounded. The previous patterns scanned the rest of the page from every start position, so time grew with the square of the page size: a 200 KB page of near-matches took over half a second. A tag longer than the bound is left alone, which skips hash forwarding for that page but keeps the redirect.

1.6.3 Latest

Fixed

  • A CDN blip fetching an OG font no longer fails the whole build. The fonts for OG images are fetched from the Northwestern CDN at build time, because their licenses do not allow shipping them inside the package. Each font was fetched once, with no timeout, and any failure threw: one refused connection took down a docs build, and with it the deploy behind it.

    Font requests now time out after 10 seconds and retry twice with exponential backoff. Network errors, timeouts, and 5xx responses are retried; a 4xx is a wrong URL rather than a blip, so it is reported immediately. A font that still will not load is logged as a warning and the image renders in whichever font did load, since an OG image in the wrong typeface beats a failed build. Only an empty font list still throws, because satori has nothing to draw text with. Results are cached per URL, failures included, so an outage costs one retry sequence for the build instead of one per page.