The SFC type resolver resolves `@robonen/*` package imports (e.g. PrimitiveProps,
used in `defineProps<X extends PrimitiveProps>()`) via the package `exports` →
`dist/*.d.ts`, independently of the Vite source-alias. On a fresh checkout (CI /
Vercel) those dist files don't exist yet, so the compiler throws 'Failed to
resolve extends base type'. `build`/`generate` now run `build:deps` first.
Nuxt's dev vite-node IPC uses a unix socket under $TMPDIR. macOS's default /var/folders/… tmp dir pushes the path to ~110 chars, past the ~104-char sun_path limit, so every request 500s with 'connect EINVAL'. Point $TMPDIR at /tmp on darwin (guarded; other platforms untouched) before the builder generates the socket path.
Replace the single monorepo CI job with a dynamic matrix: a discover job enumerates workspace packages, then one job per package builds it (with its workspace deps), lints and tests in parallel (fail-fast: false). Chromium is installed only for the browser-mode suites (primitives, editor). Adds a 'test' script to @robonen/docs so its suite runs under the per-package model (the root vitest projects list isn't used by CI anymore).
The docs build pulls composables (via demos) and doc sections into its bundle, which transitively import workspace packages like @robonen/platform/multi. Aliasing each @robonen/* package to its src means the build no longer requires every package's dist to be built first, fixing CI where dists are absent.
Adds a hand-authored .vue doc-sections system (intro + guide pages per package, #docs/sections map, sidebar Guide group, client-side TOC), registers @robonen/crdt, renders demos client-only, base64-encodes the server-metadata virtual, plus the MCP docs endpoint and responsive/overflow fixes across pages and tables.