Dashboard › byk.github.io › Distillation
939f6651-595c-4cc6-aa98-97f1fd44d229["68d71b04ed3d7ca188d92b83eaee37ec","ce9dac2b5934db5dacf8dde4473932e2","36a129e068806ff58605e02d11cd3e07","1ecf9390e08033cbc39cc4aceb5d8354","97e622a8010a25d47d9c8633dd627494","66162038ff05edd82baa0a9166426885","e0cb4759333f7f9b8192a88e7aea3d38","6275a4ae3ec92f2732f8e6729bc36a02","28e777b9217b0d5ce696ce9a2da17b7f","be723bf5e098fbadf42f8c2763bc05eb","ad0d6f384cd67121c05d8d9a5f939079","d9d0d54c7950a3de89c405129da4a857","6b943f5d8dfb57271f7a30b7680ee8b8","5a45d7f897f4feae161fc360a0b33f4e","385dba4187d95cb9939336642e1a1dbc","2bb450b78877c8d07c752a2a19e442d8","2303bca32e8e8c5dbbab5884f7a6c64c","c312db03aa3db83b081d303c13c2cb43","12b83bb1cc3e59a84cfe676390c7c2d8","4fe009be7be160cf1a9b26a2fd7ea6ea","21d1bb85e5e25826c53334fb4d9cb0d8","fd9c7b846f9135755f0ed1c2338f17f4","c1e6ae37b3f81f8193478b0e020ea8fd","3b40e5df9cea37e660024ba072601e15","c05fcbceafed416a1b4e8d0252ccc8ee","671c77746ff18a7f299648cd16b20cf8","d3d2d1a10a3dc7ef33ac96a1358260f6"]
Date: Jul 21, 2026
pnpm build succeeded on Astro 7 β 17 pages built in 4.20s, 30 images optimized (cache reused), standard-site.json and index.html generated, no compiler errors.compressHTML: 'jsx' whitespace regression.https://byk.im/posts/ultimate-setup-labs/, og:title "My ultimate setup: a Β£40 box that codes while I poop", og:url matches canonical, og:image https://byk.im/_astro/ultimate-setup-labs.DxoFZ7ad.png β all intact. Word count text ("words"/"minutes") not found in rendered HTML. RSS confirmed 10 items with content, including titles "Read at BYK's", "My ultimate setup: a Β£40 box that codes while I poop", "Teaching my agent to wait".compressHTML: 'jsx' whitespace change; (2) RSS output includes draft/uncommitted post "Teaching my agent to wait" β noted as pre-existing build-from-working-tree behavior, not caused by the Astro 7 upgrade.~ minutes ( words) β the numeric word/minute values are missing from the rendered ReadingInfo component output, confirming a real regression (not a whitespace-only compressHTML issue since numbers, not spaces, are missing).const { remarkPluginFrontmatter } = await render(postData); Post.astro:46 uses <ReadingInfo words={remarkPluginFrontmatter.words} />; ReadingInfo.astro:2 destructures words from Astro.props, line 3 computes readingTimeMinutes = Math.ceil(words / 200), line 4 pluralizes "minute"/"minutes", line 10 renders ~{readingTimeMinutes} {minutesText} ({words} words); same pattern in src/pages/posts/[slug].astro:24 and :38. Conclusion: remarkPluginFrontmatter.words is undefined, causing NaN/empty render.reading-time, mdast-util-to-string, @astrojs/markdown-remark; documented v7 config pattern wires the remark plugin via top-level markdown.processor using unified({ remarkPlugins: [...] }) imported from @astrojs/markdown-remark, not via mdx({ remarkPlugins }); confirms remarkPluginFrontmatter is still read via await render(entry) in content-collection pages, or via Astro.props.frontmatter in plain layouts β the data.astro.frontmatter.X injection mechanism itself is still valid in v7.data.astro.frontmatter.X pattern and remarkPluginFrontmatter access are still correct in v7, so the injection mechanism is intact β root cause must be in how/whether the plugin executes, not in the read side.~10 minutes (1859 words) for a post; new v7 dist build has 47 occurrences of empty ~ minutes ( across all built posts β confirms the word-count regression affects every post, not just one.WORDCOUNT_DEBUG console.log inside the inline remark plugin factory in the mdx() config, rebuilt β no debug output appeared at all. Root cause identified: the wordCount remark plugin is not being invoked at all under Astro 7 / MDX 7 with the current config shape (not merely failing to set the value).mdx({ remarkPlugins: [() => (tree, { data }) => { const words = wordCount(tree); data.astro.frontmatter.words = words; }] }), icon(); site: "https://byk.im"; build.assetsPrefix: "https://byk.im/"; vite.plugins: [tailwindcss()].extendMarkdownConfig defaults to true; isUnifiedProcessor(processor) branch copies remarkPlugins/rehypePlugins/remarkRehype/gfm/smartypants from config.markdown.processor; isSatteriProcessor(processor) branch (SΓ€tteri, the new v7 default) only copies gfm/smartypants from processor.options.features β NOT remarkPlugins/rehypePlugins; warnDeprecatedMdxPluginOptions warns when remarkPlugins, rehypePlugins, or remarkRehype are passed directly as mdx() integration options (deprecated in v7).defaultMdxOptions = { extendMarkdownConfig: true } and the warnDeprecatedMdxPluginOptions deprecation-check function (checks for remarkPlugins, rehypePlugins, remarkRehype keys).remarkPlugins directly to the mdx() integration is now deprecated in @astrojs/mdx 7; (2) since Astro 7's default markdown processor is SΓ€tteri (not unified), the isSatteriProcessor code path in @astrojs/mdx does NOT forward remarkPlugins/rehypePlugins from config.markdown.processor, unlike the isUnifiedProcessor path β explaining why the wordCount plugin never executes. Planned fix: migrate to the documented v7 approach β configure the wordCount remark plugin via a top-level markdown: { processor: unified({ remarkPlugins: [...] }) } config (imported from @astrojs/markdown-remark) rather than via mdx({ remarkPlugins }), to restore data.astro.frontmatter population.