Bug
`loadBlogPosts`/`loadBlogPost`/`loadChangelogEntries` in `packages/framework/src/content.ts` parse frontmatter with:
date: typeof data.date === 'string' ? data.date.slice(0, 10) : '',
An unquoted YAML date, e.g.
is parsed by `gray-matter` (via `js-yaml`) as a native JS `Date` object, not a string — YAML's own spec treats YYYY-MM-DD as the built-in !!timestamp type. Because the check is a bare typeof === 'string', the Date instance fails it and the loader silently writes date: '' for that post.
Downstream effects:
- The post sorts last (
'' is the smallest string) regardless of actual publish date.
- Anything rendering the date (post header, sitemap
lastmod, RSS) shows Invalid Date or an empty value.
status: scheduled posts never go live, since isLive() compares date <= today and '' <= today is false... actually '' <= anything is true lexicographically for this comparison in JS, so behavior is inconsistent/surprising either way — the real point is the date is silently wrong, not documented, and easy to ship without noticing (build succeeds, no warning).
Found while auditing three live sites — confirmed content/blog/*.mdx in ai-charan-dev (and likely hardware-charan-dev, mlnotes-dev) all use unquoted dates today, so their blogs are shipping with this bug live.
Why it's easy to hit
Nothing in the blog guide (framework.inkform.dev/guides/blog) or the example frontmatter tells authors to quote the date. The example in the guide itself (date: 2026-09-05) is unquoted.
Fix
Coerce a Date instance to YYYY-MM-DD instead of dropping it, in both toBlogPost() and loadChangelogEntries(). PR incoming.
Bug
`loadBlogPosts`/`loadBlogPost`/`loadChangelogEntries` in `packages/framework/src/content.ts` parse frontmatter with:
An unquoted YAML date, e.g.
is parsed by `gray-matter` (via `js-yaml`) as a native JS `Date` object, not a string — YAML's own spec treats
YYYY-MM-DDas the built-in!!timestamptype. Because the check is a baretypeof === 'string', theDateinstance fails it and the loader silently writesdate: ''for that post.Downstream effects:
''is the smallest string) regardless of actual publish date.lastmod, RSS) showsInvalid Dateor an empty value.status: scheduledposts never go live, sinceisLive()comparesdate <= todayand'' <= todayisfalse... actually'' <= anythingistruelexicographically for this comparison in JS, so behavior is inconsistent/surprising either way — the real point is the date is silently wrong, not documented, and easy to ship without noticing (build succeeds, no warning).Found while auditing three live sites — confirmed
content/blog/*.mdxinai-charan-dev(and likelyhardware-charan-dev,mlnotes-dev) all use unquoted dates today, so their blogs are shipping with this bug live.Why it's easy to hit
Nothing in the blog guide (
framework.inkform.dev/guides/blog) or the example frontmatter tells authors to quote the date. The example in the guide itself (date: 2026-09-05) is unquoted.Fix
Coerce a
Dateinstance toYYYY-MM-DDinstead of dropping it, in bothtoBlogPost()andloadChangelogEntries(). PR incoming.