First to Site
Release 3.8

Release Portal Fixes

MDX brace escaping and YAML title quoting patches that unblocked the Next.js build

Overview

The release portal at releases.ftsonline.com.au is a Next.js + Fumadocs app that compiles every release note's MDX at build time. Two brittle patterns in v3-6 and v3-7 release notes broke the build during deploys; both shipped in 3.8 as small but load-bearing fixes.

MDX Brace Escaping

MDX interprets {identifier} as a JSX expression. Release-note templates that wrote placeholders like LOT {N} ({streetNo}) {street} {suburb} {postcode} or ~/config/{env}/ crashed the fumadocs-mdx parser with errors like ReferenceError: N is not defined.

Fix: replace un-escaped curly placeholders with either backtick-wrapped code spans (which MDX treats as literal) or concrete examples.

Before (broken)After (fixed)
LOT {N} ({streetNo}) {street} {suburb} {postcode}`LOT 555 (5) KIELDER CRESCENT CLYDE 3978`
~/config/{env}/`~/config/<env>/`
LOT {LOT_NUMBER} ({STREET NUMBER}) ...LOT [lot_number] ([street_number]) ...

YAML Frontmatter Title Quoting

v3-7/optimistic-lock-iteration.mdx had:

---
title: Optimistic Lock: Iteration & Rollback
---

The unquoted colon after "Optimistic Lock" made the YAML parser read the title as a mapping key, failing with bad indentation of a mapping entry.

Fix: wrap titles containing colons in double quotes:

---
title: "Optimistic Lock: Iteration & Rollback"
---

Why this shipped as 3.8

Neither fix is a behavioural change to the platform itself - it's release-portal-only. But the releases workspace ships alongside the platform on every deploy. An unbuildable releases workspace fails the entire deploy. These two fixes were mandatory to unblock the 3.8 cut.

Memorialised going forward in feedback_trello_voice.md + CLAUDE.md release checklist. Any new MDX release note should pre-flight through a JSX-brace scan before committing.