← All changelog entries
August 17, 2026 · Maintenance

LFM 0.5.0 lands: the table of contents deletes its local scaffolding, and starts leaving callout headings alone

The helpers this site was carrying locally shipped in the package, so `toc-types.ts` was deleted rather than migrated — which was the point of writing it that way. `inContainer` arrived with it, so headings nested inside callouts no longer show up as phantom sections. Also: the ToC was rendering twice on every guide, and had been since it shipped this morning.

Authors
Michael Staton
Augmented with
Claude Code on Opus 5
Tags
#LFM#Table-Of-Contents#Dependencies#Bug-Fix

LFM 0.5.0 lands

Why Care?

This morning’s release shipped a table of contents built on scaffolding this site was carrying locally, with a known gap: a ### inside a callout appeared in the outline as though it were a real section. Both were tracked, both were package-side, and both are now closed.

What’s New?

@lossless-group/lfm 0.4.1 → 0.5.0. nestHeadings and filterHeadings shipped in the package, so src/components/markdown/toc-types.ts was deleted, not migrated — same names, same signatures, no extra behaviour. That was the explicit design goal when it was written this morning, and it held: the swap was an import change and an rm.

Callout headings are out of the outline. 0.5.0 stamps inContainer on each entry, carrying the container’s name rather than a boolean — so the decision can be made per container. The ToC now takes an excludeContainers prop defaulting to ['callout', 'image-carousel', 'blockquote']. A :::details heading is genuinely navigable and stays in; a callout aside does not.

Anchors are unaffected either way. A share link pointing into a callout still lands — the heading just stops advertising itself as a waypoint.

The ToC was rendering twice

Caught while verifying the upgrade: link counts had doubled on every guide, and the cause was two <aside> blocks in the guide template. One of this morning’s scripted edits inserted the aside before the article without removing the original, and the check at the time verified order but not count — so it passed.

Present in v0.3.0. Fixed here: one nav per page, counts back to 8 / 8 / 5 / 7 / 8 / 17 across the six guides.

The lesson is small and repeatable: when an edit moves a block, assert on the number of occurrences, not just their position.

What’s Next?

  • The eyebrow field is specced but not yet consumed — once eyebrow blocks land, the ToC can show a grouping label above each heading.
  • Roll the ToC to context-v and changelog renderings, per the astro-knots blueprint.
  • This is patch-shaped (0.3.1) if a tagged release is wanted; the duplicate ToC shipped in v0.3.0.