<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Brian B. Tung</title><description>Hello! Welcome to my personal webpage!</description><link>https://briantung.me/</link><atom:link href="https://briantung.me/rss.xml" rel="self" type="application/rss+xml"/><item><title>[Emdash] How an Unchecked Empty Submit and a Falsy-ID Guard in convertPTBlock Created a Permanent Autosave-Erasure Loop for YouTube Embeds</title><link>https://briantung.me/blog/emdash-youtube-embed-autosave-erasure-bug/</link><guid isPermaLink="true">https://briantung.me/blog/emdash-youtube-embed-autosave-erasure-bug/</guid><description>An unchecked form submission in EmDash&apos;s PluginBlockModal inserts YouTube blocks with empty IDs, which a falsy check in convertPTBlock converts to placeholder text on reload — and autosave permanently overwrites the original data two seconds later. The patch removes the falsy guard from the serializer and adds a form validation check to the modal.</description><pubDate>Mon, 25 May 2026 03:57:53 GMT</pubDate></item><item><title>[EmDash] A Vitest Regression Guard for publicHoistPattern and ssr.optimizeDeps.include on Cloudflare Workers</title><link>https://briantung.me/blog/ssr-deps-vitest-regression-guard-cloudflare-workers/</link><guid isPermaLink="true">https://briantung.me/blog/ssr-deps-vitest-regression-guard-cloudflare-workers/</guid><description>A Vitest test that verifies every package in ssr.optimizeDeps.include is both hoisted to node_modules/ and resolvable — so a missing publicHoistPattern entry surfaces as a named, actionable test failure instead of exports is not defined deep inside a workerd stack trace.</description><pubDate>Mon, 25 May 2026 03:54:03 GMT</pubDate></item><item><title>[EmDash] Why @atproto/api Caused exports is not defined in workerd and How pnpm Hoisting + ssr.optimizeDeps.include Fixes It</title><link>https://briantung.me/blog/atproto-cjs-exports-not-defined-cloudflare-workers/</link><guid isPermaLink="true">https://briantung.me/blog/atproto-cjs-exports-not-defined-cloudflare-workers/</guid><description>@atproto/api is CJS and lives only in pnpm&apos;s content-addressable store, so Vite&apos;s SSR optimizer can&apos;t find or convert it — meaning raw CJS reaches Cloudflare workerd, which has no exports global, and crashes. The fix requires both hoisting the package via publicHoistPattern and listing it in ssr.optimizeDeps.include.</description><pubDate>Mon, 25 May 2026 03:45:01 GMT</pubDate></item><item><title>[EmDash] Note `ssr.optimizeDeps.include` Fixes Vite 7&apos;s SSR Dep Optimizer Race Condition and Stale Chunk Crashes on Cloudflare Workers</title><link>https://briantung.me/blog/vite-ssr-optimizer-race-condition-cloudflare-workers/</link><guid isPermaLink="true">https://briantung.me/blog/vite-ssr-optimizer-race-condition-cloudflare-workers/</guid><description>Vite 7 separates SSR and client dep optimization, and packages discovered lazily at request time trigger re-optimization rounds that invalidate shared chunks mid-request. The fix is `ssr.optimizeDeps.include` to pre-bundle all CMS sub-paths at startup before any request arrives.
</description><pubDate>Mon, 25 May 2026 03:38:54 GMT</pubDate></item><item><title>Getting Started With Wagtail CMS</title><link>https://briantung.me/blog/getting-started-wagtail-cms/</link><guid isPermaLink="true">https://briantung.me/blog/getting-started-wagtail-cms/</guid><description>Wagtail is a powerful, flexible, open-source content management system for the Django web framework. However, it might not be the off-the-shelf solution you&apos;re looking for.</description><pubDate>Thu, 13 Aug 2020 10:00:00 GMT</pubDate></item></channel></rss>