**The `0.21.4` line is a coordinated PATCH across all four registries** (npm `0.21.4` · PyPI `0.21.4` · NuGet `0.21.4` · Maven `7.21.4`) — ten fixes, most adopter-reported; PyPI and NuGet publish as **version-parity bumps** (no changed product file). Two were hard blockers: **[#287](https://github.com/metaobjectsdev/metaobjects/issues/287)** made the browser packages unbundleable outright (a single *value* import from `@metaobjectsdev/metadata`'s root barrel drags `MetaDataLoader` → `library/library-sources.ts` → `node:url` into the graph, and `runtime-web` had one — so **no client consuming the generated hooks could build**; fixed by a new pure-constants **`@metaobjectsdev/metadata/constants`** subpath that browser packages import values from, types still coming from the root since `import type` is erased), and **every sqlite table-rebuild migration was un-appliable by the tool that emits it** (the emitted script carries its own `BEGIN TRANSACTION` while the apply runner already owns one; the runner now strips transaction control and rewrites `PRAGMA foreign_keys = OFF` → `defer_foreign_keys = ON`, since the former is a no-op inside a transaction). Also: **[#286](https://github.com/metaobjectsdev/metaobjects/issues/286)** Hono CRUD 500ing on Postgres (`.all()`/`.get()` are libsql-only), **`meta gen --dry-run` actually previewing** (it had been writing every file), **[#285](https://github.com/metaobjectsdev/metaobjects/issues/285)** an un-appliable `DROP INDEX` for a constraint-backed index, a `metaobjects.config.ts` load permanently corrupting `Error.prepareStackTrace` for the rest of the process, **three silent-wrong-rows defects in the Java query lowering** (no case-sensitive `LIKE`; `in` hand-composed as an unparenthesized OR-chain, so `in` + any second predicate regrouped as `a=1 OR (a=2 AND b=3)`; `Range` documented 0-indexed while the drivers emit `OFFSET start-1`), and the **grid-discoverability half of #287** — `tanstackGrid()`/`tanstackGridHook()` emit only for an entity declaring a `layout.dataGrid`, which is intended but was documented nowhere, so each generator now emits one self-extinguishing `meta gen` warning naming the objects and the metadata that enables them (plus a TPH fix: the grid-hook filter lacked its sibling's TPH clause, emitting a `<Sub>.grid.ts` whose `<Sub>.columns.tsx` never exists). **The durable lesson of the cut: six of the ten were invisible to a gate that existed for them** — a bundle checked only under a test runner that never bundles; sqlite SQL proven statement-by-statement but never through the tool that applies it; a conformance fixture whose seed data is case-aligned "so the test passes whether a port wires `LIKE` or `ILIKE`"; and a CI lane (`ts-unit`) that ran the browser suites **without ever building them**, so the gate failed its own precondition on every clean checkout while passing on any warm developer box. That lane now builds what it gates and runs the **seven server packages that were gated by nothing at all** (`codegen-ts-{tanstack,react,angular}`, `sdk`, `ai-runtime`, `conformance`, `docs-site`). See `CHANGELOG.md` [0.21.4].
0 commit comments