Skip to content

chore(deps): bump astro to 7.3.2 and Starlight to 0.42.0 - #390

Merged
marc0olo merged 2 commits into
mainfrom
infra/astro-7.3-security-bump
Sep 14, 2026
Merged

chore(deps): bump astro to 7.3.2 and Starlight to 0.42.0#390
marc0olo merged 2 commits into
mainfrom
infra/astro-7.3-security-bump

Conversation

@marc0olo

Copy link
Copy Markdown
Member

Summary

Closes #384, which cannot resolve: astro 7.2.10 changed its @astrojs/markdown-remark peer from an exact pin to ^7.3.0, and only @astrojs/mdx 8 satisfies that, which only arrives with Starlight 0.42. Dependabot bumps one package, so npm ci fails with ERESOLVE. Same shape as #337#339.

Clears three advisories:

severity patched in
GHSA-26w7-cxv4-gfx2 — astro RCE via AVIF image optimization critical astro 7.2.8
GHSA-376h-93r7-7g6f — astro auth bypass when stripping base medium astro 7.2.4
GHSA-2v37-7h3g-55p8 — nanoid infinite loop (transitive, via postcss) high nanoid 3.3.18

npm audit reports 0 vulnerabilities after the bump.

Starlight 0.42 breaking changes

  • Mobile menu moved to popover + .sl-menu-button, dropping starlight-menu-button, aria-expanded and data-mobile-menu-expanded. Nothing in src/ or custom.css targets those.
  • tagline config option removed. Our Hero.astro uses the hero.tagline frontmatter field, which is unaffected.
  • Package now ships JS + .d.ts instead of TS source. We only import @astrojs/starlight/loaders, /schema and /components.
  • Browser floor raised to Chrome/Edge 116, Safari 17, Firefox 125.

Verification

Built against a main baseline, both on node 22:

  • llms.txt, llms-full.txt, sitemap.xml and all 210 .md endpoints byte-identical; feed.xml differs only by lastBuildDate and item order (pre-existing nondeterminism)
  • HTML diffs across all 210 pages are confined to the new mobile-menu markup, the generator meta tags, and page-local tab ids (a 0.41.8 change)
  • package-lock.json keeps its libc metadata; a macOS npm install strips it, so it was restored by hand and re-validated with npm ci

One upstream bug worked around

Under astro 7.3 / mdx 8, an .astro component with scoped styles rendered inside another component's slot in MDX gets xmlns serialized as :xmlns. It reproduces with a minimal component inside <TabItem> and is specific to xmlns (xmlns:xlink, viewBox and ordinary attributes are fine). Here it hit the two footer icons of CodeExample, so those SVGs now omit xmlns — inline SVG does not need it. To be reported upstream; nothing is filed yet.

astro 7.1.6 is affected by GHSA-26w7-cxv4-gfx2 (critical, RCE via AVIF
image optimization, patched in 7.2.8) and GHSA-376h-93r7-7g6f (base-path
auth bypass, patched in 7.2.4).

astro 7.2.10 moved its @astrojs/markdown-remark peer from an exact pin to
^7.3.0, which only @astrojs/mdx 8 satisfies, which in turn only arrives
with Starlight 0.42. The three have to move together, which is why
dependabot's astro-only bump (#384) cannot resolve.

CodeExample drops xmlns from its footer SVGs: astro 7.3 / mdx 8 serialize
it as `:xmlns` when the component renders inside a <TabItem> slot.
@marc0olo
marc0olo requested a review from a team as a code owner September 14, 2026 13:40
A macOS `npm install` with node_modules present reuses the local tree and
drops the top-level @emnapi packages, which npm ci needs on Linux.
Regenerated with --package-lock-only and no node_modules, then the libc
fields restored.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The Node.js runtime requirement and dependency engine floor are not consistently documented or enforced.

Get a fresh assessment by requesting another Copilot review.

Pull request overview

Updates Astro and Starlight to resolve dependency conflicts, address security advisories, and fix an MDX SVG serialization issue.

Changes:

  • Bumps Astro ecosystem dependencies and refreshes the lockfile.
  • Removes xmlns from CodeExample footer SVGs.
  • Updates transitive dependencies.
File summaries
File Description
src/components/CodeExample.astro Applies the inline SVG serialization workaround.
package.json Updates framework dependency versions.
package-lock.json Records the resolved dependency graph.
Review details
  • Files reviewed: 2/3 changed files
  • Comments generated: 1
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread package.json
@marc0olo

Copy link
Copy Markdown
Member Author

Copilot feedback reviewed, no change needed. Replied in thread: the Node floor is unchanged (astro@7.1.6 on main already requires >= 22.12.0), the one new package declaring >= 22.19.0 is undici via unifont, which is advisory and off our code path, and the build is verified on 22.18.0. The missing engines / .nvmrc / documented Node version is a real but pre-existing gap, to be handled separately.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approval recommended

The dependency updates and targeted workaround have no unresolved blocking issues.

Review details
  • Files reviewed: 2/3 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

@marc0olo
marc0olo merged commit 0c2dc8f into main Sep 14, 2026
9 checks passed
@marc0olo
marc0olo deleted the infra/astro-7.3-security-bump branch September 14, 2026 16:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants