← All changelog entries
May 8, 2026 · Feature

Better rendering for YAML conventions, markdown through a refactored callout system

A day that started as a chase for two YAML parse errors and ended with a fully refactored LFM callout system, two new shared conventions documented across the pseudomonorepo, three new Kauffman Fellows in the directory, and a polished design system page demonstrating it all. The thread running through everything: when a one-line indentation mistake crashes the whole build, the right answer isn't just to fix the line — it's to make the pipeline tolerant in the first place. Small disciplined moves compounding into something that will keep paying off across every astro-knots site.

Authors
Michael Staton
Augmented with
Claude Code on Opus 4.7
Tags
#YAML-Conventions#Lenient-Parsing#LFM-Rendering#Callout-System#Mode-Awareness#Design-System#Component-Libraries#Session-Classifiers

Why Care?

Build pipelines that crash on one author’s typo are pipelines that punish authoring. Today started with two such crashes — a misindented list item in one participant’s frontmatter, and a duplicate title key in one tool entry. Each was a 30-second fix in isolation. Each took down the whole pnpm build until found.

The story isn’t the bugs. The story is what we did with the bugs: instead of just fixing the lines and moving on, we wrote the principle down — YAML parsing for human-authored content must always be lenient, drop bad properties not whole files, and escalate only when load-bearing keys (like slug or handle) fail — and codified it as a reminder that lives at the pseudomonorepo root, where every astro-knots site can find it. Then we did the same for the value side: long YAML strings (descriptions, URLs, ledes with punctuation) wrap in double quotes. Cheap insurance. Cheaper than the bug it would have prevented this morning.

That habit — fix the line, document the principle, propagate the convention — is what the rest of the day did, at every layer. The callout system got refactored, the participant card got a real name and a “joined on” date, three Kauffman Fellows joined the directory, and a design system page now demonstrates the whole markdown rendering pipeline live in three modes. None of it is huge in isolation. The compounding is the point.

What’s New?

Conventions, written once, used everywhere

  • YAML-Frontmatter-Parsing-Must-Be-Lenient — a new reminder at astro-knots/context-v/reminders/. Specifies property-level recovery (drop the bad key, keep the file), required behavior for any custom content loader, the small “load-bearing keys” set whose failure escalates to a prominent end-of-build error, and the rule that a build never aborts site-wide because of one author’s typo.
  • Wrap-Long-String-Values-in-Double-Quotes — companion reminder. Any human-authored YAML value longer than a few words, or containing URL syntax / punctuation / symbols, is double-quoted by convention. Covers the full set of YAML-significant characters (: # & * > | ! % @ etc.) that bite when they appear unquoted.
  • astro-knots skill updated with a new “Frontmatter & YAML conventions (toward standardization)” section, codifying both rules at the skill level so they show up wherever the skill is loaded.

New schema fields

  • participants.directory_profile_kauffman (URL, optional) — the first of a directory_profile_{slug} family. The _{slug} suffix is intentional convention so future directories (Endeavor, Techstars, On Deck) become one-line schema additions.
  • sessions.classifiers (Train-Case array, optional) — distinct from the free-form tags. A small intentional vocabulary the site can render as section headers or filter facets. First two values: All-Hands and Setupathons.

Callout system refactor

The biggest single piece. The old Callout.astro was a 92-line all-in-one with hardcoded rgba() colors and zero mode awareness. Replaced with a clean three-file split:

packages/lfm-astro/components/
├── Callout.astro       # structure only — icon row + header + body slot
├── callout-types.ts    # registry: 10 types + 7 alias entries + inline SVG icons
└── callout.css         # base layout + per-type accent + per-mode overrides

The split is along the seam where change actually happens: the structure (icon + label + body) is identical across all 10 types, so it stays single-file; only the data (icon, default label, accent color) varies, and that’s where the split goes. Adding a new callout type is now: one entry in callout-types.ts + one line in callout.css.

Every callout type now obeys the light/dark/vibrant mode contract — non-negotiable per Maintain-Themes-Mode-Across-CSS-Tailwind. Light mode deepens accents via color-mix(... var(--color__ink)) so cyan becomes deep teal, lime becomes forest green; dark mode gently desaturates the loudest accents toward graphite-600; vibrant mode keeps the raw named tokens (cyan-vapor, lime-terminal, magenta-fuse) at full neon.

The info callout is the brand hero: bigger padding, thicker left bar, gradient background, glowy edges. Its glow effects key off the existing --fx-glow-opacity and --fx-glow-spread tokens (light: 0.06/8px, dark: 0.22/24px, vibrant: 0.55/48px), so the “loudness” of the info box scales automatically per mode without a single hardcoded magic number. That pattern is now the documented way to mode-adapt any future hero variant.

Lists, paragraphs, and inline code now render correctly inside callouts — Tailwind v4 preflight zeroes <p> margins and list bullets globally, so the callout stylesheet restores prose flow scoped to .ak-callout-body p / ul / ol / li / code.

The component files were also propagated into the canonical packages/lfm-astro/components/ (this is the pattern source every astro-knots site copies from), with a new Callout.md doc and a sitemap entry at astro-knots/context-v/sitemap/components/Component__Callout-System.md.

Three new members as presenters/hosts

Agents now have the skills to create the SSG files for new members from the Kauffman Fellows directory, fetching data and content from the Kauffman directory. Named per the headshot__First-Last.jpeg convention, and linked through the new directory_profile_kauffman field.

Two new tools, two new sessions

  • openclaw — the open-source AI platform Jehan is hosting tomorrow’s Setupathon around. Toby’s already running it. Jehan’s aspirational on it (the whole point of the Setupathon).
  • microsoft-copilot — Mike’s daily driver. Body note flags that Copilot is a family of products (consumer chat, M365, GitHub, Windows) with different licensing — useful if any future stack entry needs to disambiguate.
  • 2026-05-09 OpenClaw Setupathon — host: Jehan Chu. Classifier: Setupathons.
  • 2026-05-27 Monthly All-Hands — host: Michael Staton. Three presenters TBD (Kauffman team needs names + emails by 2026-05-20 for Zoom invites; Dani is the contact during the May 20–26 PTO window). Classifier: All-Hands.

Design system gets a markdown wing

  • /design-system/markdown/ — index page listing AstroMarkdown, Callout, CodeBlock, MarkdownImage, Sources, MarkdownReader. Each card carries purpose, CSS contract, canonical source path, and a link to the demo (where one exists yet).
  • /design-system/markdown/callouts — kitchen-sink demo. Renders all 10 callout types through the production LFM pipeline (parseMarkdown()AstroMarkdownCallout), with the mode toggle live at the top so reviewers can flip light/dark/vibrant and see every accent adapt. Includes header-less variants, multi-paragraph + lists + code inside callouts, and the alias table.

PersonCard--Thumb

The participant chip used on /people and /stacks got a real name. ParticipantCard.astroPersonCard--Thumb.astro, establishing the PersonCard--{variant}.astro naming convention so future siblings (--Full, --Hero, --Mini) have an obvious slot. Added a joinedOn? prop that renders “Joined on: May 8, 2026” formatted via Intl.DateTimeFormat. Pluralized the tool count (1 TOOL vs 5 TOOLS). Three callers updated, old file removed.

Astro 6.3 release note

Appended an update to the keeping-up doc at content/lost-in-public/keeping-up/Astro 6 is Released.md covering the four meaningful changes in 6.3:

  • <Image /> no longer processes SVGs by default. Security-driven. To re-enable: image: { dangerouslyProcessSVG: true }. Audit candidates flagged across hypernova-site brand-kit, twf_site partner marks, and anywhere <Image> receives an SVG source instead of importing it as a component.
  • AstroCookies.consume() instance method (deprecates the static form). Affects fullstack-vc’s OAuth callbacks if any use the static call — non-breaking deprecation.
  • External image redirects (up to 10 hops, validated against remotePatterns).
  • Experimental advanced routing via fetch handlers + Hono integration. Skip until graduated.

Site upgraded to Astro 6.3.1 (and version bumped to 0.0.5)

After documenting the 6.3 release notes, we upgraded the site itself. All Astro-family packages bumped in lockstep:

PackageBeforeAfter
astro6.1.1 (resolved)6.3.1
@astrojs/check0.9.80.9.9
@astrojs/db0.21.00.21.1
@astrojs/svelte8.0.58.1.0
@astrojs/vercel10.0.510.0.6

Pre-flight audit confirmed zero exposure to the 6.3 breaking changes for this site: no <Image src="*.svg"> usage anywhere in src/, and no static AstroCookies.consume( calls. The OAuth callbacks under src/pages/api/auth/ were specifically checked — they’re already on the instance-method form. Build passed clean on the first attempt; all routes generated; Vercel adapter packaged successfully.

Site version bumped 0.0.4 → 0.0.5 (patch) — non-breaking dep upgrade, no source changes required.

The arc

The shape of the day was: bug → principle → convention → propagation → application. We hit two YAML parse errors. Instead of just fixing the lines, we wrote down what the pipeline should do (lenient parsing, property-level recovery, escalation only for load-bearing keys). Then we wrote a sister rule for authors (quote your long strings). Then we put both into the astro-knots skill so they show up wherever someone is working in the ecosystem.

By the time we got to the callout refactor, that same shape repeated at the component layer: an existing Callout.astro with hardcoded colors and no mode awareness wasn’t broken in the “build fails” sense — but it was broken in the “violates the law of mode obedience across all astro-knots sites” sense. Same move: principle (every callout obeys the mode switcher), convention (effects key off --fx-* tokens, not magic numbers), propagation (canonical source updated in packages/lfm-astro/, sitemap entry written, design system page built to demo it), application (existing session file can now use > [!info] Why this matters and have it render correctly in all three modes).

Three new community members and two new tools rode along — we needed real participants to fill out the design system and exercise the new schema fields. The headshots, the directory_profile_kauffman URLs, the new microsoft-copilot tool entry, the OpenClaw setupathon and the May 27 all-hands — all of it landed in the same hour as the callout refactor, because by then the pipeline was lenient enough to absorb the inevitable small frontmatter mistakes without us having to hold our breath each time.

What this enables next

  • A lenient content loader is the next piece the YAML reminder calls for explicitly. The reminder says it; we haven’t built it yet. First implementation goes into sites/fullstack-vc/src/lib/, then promotes to a shared package once the shape is right. Strong candidate for @lossless-group/lfm or a sibling @lossless-group/astro-content-loaders.
  • The directory_profile_{slug} convention is now in place; adding directory_profile_endeavor, directory_profile_techstars, directory_profile_on_deck is one line each whenever the first member from each network joins.
  • PersonCard--Full.astro is the obvious next sibling. The --Thumb variant is the chip; --Full is the page-header treatment for /people/[handle].
  • CodeBlock, MarkdownImage, and Sources still need their own design system demo pages. Slots for them already exist in /design-system/markdown/ — marked “Demo TBD” — so adding them is additive, not a refactor.
  • Three presenters confirmed by 2026-05-20 for the May 27 all-hands. Two Kauffman Fellows + one Founder, per the email. Names and emails go to the Kauffman team for Zoom invites.
Files modified (31)
  • sites/fullstack-vc/src/content.config.ts
  • sites/fullstack-vc/src/content/participants/mpstaton.md
  • sites/fullstack-vc/src/content/participants/jehanchu.md
  • sites/fullstack-vc/src/content/participants/tobyrush.md
  • sites/fullstack-vc/src/content/participants/mikemoradi.md
  • sites/fullstack-vc/src/content/tools/openclaw.md
  • sites/fullstack-vc/src/content/tools/microsoft-copilot.md
  • sites/fullstack-vc/src/content/tools/papermark.md
  • sites/fullstack-vc/src/content/sessions/2026-05-09_openclaw-setupathon.md
  • sites/fullstack-vc/src/content/sessions/2026-05-27_monthly-all-hands.md
  • sites/fullstack-vc/src/components/markdown/Callout.astro
  • sites/fullstack-vc/src/components/markdown/callout-types.ts
  • sites/fullstack-vc/src/components/markdown/callout.css
  • sites/fullstack-vc/src/components/stack/PersonCard--Thumb.astro
  • sites/fullstack-vc/src/pages/design-system/index.astro
  • sites/fullstack-vc/src/pages/design-system/markdown/index.astro
  • sites/fullstack-vc/src/pages/design-system/markdown/callouts.astro
  • sites/fullstack-vc/src/pages/people/index.astro
  • sites/fullstack-vc/src/pages/stacks/index.astro
  • sites/fullstack-vc/public/images/participant-headshots/headshot__Jehan-Chu.jpeg
  • sites/fullstack-vc/public/images/participant-headshots/headshot__Toby-Rush.jpeg
  • sites/fullstack-vc/public/images/participant-headshots/headshot__Mike-Moradi.jpeg
  • astro-knots/context-v/reminders/YAML-Frontmatter-Parsing-Must-Be-Lenient.md
  • astro-knots/context-v/reminders/Wrap-Long-String-Values-in-Double-Quotes.md
  • astro-knots/context-v/sitemap/components/Component__Callout-System.md
  • astro-knots/packages/lfm-astro/components/Callout.astro
  • astro-knots/packages/lfm-astro/components/callout-types.ts
  • astro-knots/packages/lfm-astro/components/callout.css
  • astro-knots/packages/lfm-astro/components/Callout.md
  • content/lost-in-public/keeping-up/Astro 6 is Released.md
  • sites/fullstack-vc/package.json