Summary
A single unparseable .stx in any scanned route root throws an uncaught BuildMessage that kills ./buddy dev on startup — and it names no file, so there's nothing to go on. The failure is not isolated to the bad view, and it can be triggered by a framework-default fallback view the app never references.
What I saw
[buddy] uncaughtException: BuildMessage: Unexpected ===No path, no line. I traced it to a corrupted framework-default view:
storage/framework/defaults/resources/views/blog/category.stx:145
<li class=": ? '' 'active' === cat.slug categorySlug">The app does not use this view. It's only in the build because the file-router scans the defaults dir as a fallback root (packages/router/src/file-router.ts — the pagesDirs stack; packages/bun-plugin/src/serve.ts then builds every discovered view). So one broken optional view — shipped by the framework itself — takes down the entire dev server, with an error that points nowhere.
Impact
- One malformed/optional view aborts the whole build.
- The terse
Unexpected ===(no file, no line) makes it very hard to locate — I had to binary-search the scanned views by hand. - Apps inherit build failures from framework-default views they never opted into.
Asks
- Isolate per-view compile failures — skip + warn and continue building the rest, rather than aborting everything. At minimum for default-fallback roots.
- Name the offending file (and line) in the error message.
- Reconsider auto-routing framework-default demo views (
cart,checkout/*,dashboard/*,orders/*, blog demos) into apps that didn't opt in — a real app gets phantom routes and inherits the framework's view bugs.
Repro
Drop any malformed .stx into a scanned views root:
<li class=": ? '' === a b">x</li>./buddy dev → uncaught BuildMessage: Unexpected ===, no file named, whole dev server down.