Skip to content

Commit 1fb7bad

Browse files
dmealingclaude
andcommitted
docs: propagate 0.21.4 / 7.21.4 across README, llms.txt, port docs and CLAUDE.md
Walks docs/RELEASING-docs-checklist.md section A for the 0.21.4 coordinated cut. Adds the 0.21.4 Status paragraph to CLAUDE.md and moves the current-release-line marker from 0.20.x/7.20.x to 0.21.x/7.21.x, which had been left behind by the 0.21.0-0.21.3 cuts. agent-context/ deliberately untouched: it is version-agnostic by design (Maven examples use ${metaobjects.version}, no hardcoded npm versions) — it changes only when a feature or API does, which it did earlier in this release for the grid opt-in. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KTGT5ksntpcJDZVJ5VyXHS
1 parent 3948bb9 commit 1fb7bad

8 files changed

Lines changed: 31 additions & 29 deletions

File tree

CLAUDE.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ Equal weight — all four ship per-language today across the five ports (TS / C#
1919

2020
_Last refreshed 2026-08-09._
2121

22-
**TypeScript reference implementation** is **published to npm at `0.21.3`** (14 `@metaobjectsdev/*` publish candidates on the `latest` tag, full lockstep; the two `angular` packages are on their own `0.6.x` line). C# at `0.21.3` (NuGet); Python at `0.21.3` (PyPI); Java / Kotlin at `7.21.3` (Maven Central). **All four registries share the same `minor.patch`, and stay locked in lockstep going forward** — the `0.20.15` cut moved Maven `7.20.12``7.20.15` to close the last per-registry drift.
22+
**TypeScript reference implementation** is **published to npm at `0.21.4`** (14 `@metaobjectsdev/*` publish candidates on the `latest` tag, full lockstep; the two `angular` packages are on their own `0.6.x` line). C# at `0.21.4` (NuGet); Python at `0.21.4` (PyPI); Java / Kotlin at `7.21.4` (Maven Central). **All four registries share the same `minor.patch`, and stay locked in lockstep going forward** — the `0.20.15` cut moved Maven `7.20.12``7.20.15` to close the last per-registry drift.
23+
24+
**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].
2325

2426
**The `0.21.0` line is a coordinated MINOR across all four registries — the pre-1.0 breaking slot** (npm `0.21.0` · PyPI `0.21.0` · NuGet `0.21.0` · Maven `7.21.0`), carrying **three** changes that make previously-valid metadata fail to load. **Migration guide:** [`docs/features/migrations/value-assembly-origins-and-source-role-shrink.md`](docs/features/migrations/value-assembly-origins-and-source-role-shrink.md). (1) **[#210](https://github.com/metaobjectsdev/metaobjects/issues/210) — assembly origins leave `object.value`.** `origin.aggregate`/`computed`/`collection`/`first` on a value-hosted field now fail with `ERR_SUBTYPE_RULE_VIOLATION`. **`origin.passthrough` stays legal on a value** — there it is FR-015 *parameter lineage*, not assembly (the loaders already drew that line via the FR-024 B5 value-host exemption), and retiring it would have silently dropped the `ERR_PASSTHROUGH_TYPE_MISMATCH` check on stored-proc arguments. The durable rule: **"passthrough on a value is lineage; assembly origins live on projections."** The migration path is **additive** — `@payloadRef`/`@responseRef` now accept a **sourceless `object.projection`**, so a payload that was assembling values re-hosts as a projection and keeps its origins. Implemented as one named `ASSEMBLY_ORIGIN_SUBTYPES` set hoisted above the origin dispatch in every loader, so cross-port coverage is a property of the constant rather than of four separate branches. (2) **[#212](https://github.com/metaobjectsdev/metaobjects/issues/212) — `source.rdb @role` shrinks to `primary | replica`**; `index`/`cache`/`publish`/`mirror` become **reserved-not-registered** (ADR-0040 treatment), a legacy use failing `ERR_BAD_ATTR_VALUE`. Justification: **no port ever built the role-routing dispatch these anticipated** — every read of `@role` in all five ports is an equality test against `primary`, so the consumed information was one bit; an adopter scan found zero uses. The re-entry bar is in ADR-0007 Amendment 2: *a role member enters the registry only when a shipping consumer dispatches on it.* (3) **A payload's nested `field.object @objectRef` must target an `object.value`** — TS, C# and Python previously accepted a non-value target *and emitted code from it*; now a fail-closed **loader** rule (one rule, four loaders) rather than five per-port codegen filters. Also: `runner.ts`'s `dbImport`/`dialect` guard now keys on `hasAnyRdbSource` instead of an object-subtype test — the last subtype-based persistability check in the codebase, and a false positive for the sourceless projections this release recommends. Cut as MINOR, not PATCH, because pre-1.0 `^0.20.x` resolves `<0.21.0`: a patch would be auto-adopted on a routine `npm update` and break adopters with no deliberate action. See `CHANGELOG.md` [0.21.0].
2527

@@ -44,7 +46,7 @@ _Last refreshed 2026-08-09._
4446

4547
**Key cross-language features shipped:** FR5 family (a/b/c/d/e + WARN envelope-shape — actionable loader errors per ADR-0009); FR-003 (Java RDB runtime persistence + projections; schema migrations are TS-only — the Java migration engine was removed); FR-006 (template.output parser-on-receipt codegen per ADR-0010 in all 5 ports); FR-008 + FR-009 (cross-port REST API contract + 10 filter operators); FR-018 (M:N relationship codegen in all 5 ports — entity navigation + idiomatic ORM wiring [Drizzle m2m / EF Core `UsingEntity` / Spring repo+JPA / Exposed / Pydantic+route as the SQLAlchemy-secondary equivalent] + REST traversal `GET /<source-plural>/{id}/<relation>` + Tier-2 docs, gated by the shared api-contract m2m corpus in both lanes + persistence-conformance; the TanStack M:N client hook is a deferred client-ergonomics follow-up); SP-H (field-subtype end-to-end hardening: every concrete `field.*` subtype write+read round-trips cross-port via the persistence `op: roundtrip` gate; cut `field.byte`/`field.short`/`field.class` non-functional stubs; cross-port filter-op reconciliation for uuid/currency); source v2 paradigm (ADR-0007); metadata-ktx Kotlin facade; per-target output directories (TS codegen).
4648

47-
**Current release line.** `0.20.x` (npm / PyPI / NuGet, now version-aligned) · `7.20.x` (Maven Central, aligned `minor.patch` on its historical major `7`). The `0.15.0` / `7.7.0` release is a coordinated **minor with breaking changes**: (1) the **metamodel-1.0 vocabulary program** — `field.uri` / `field.inet` subtypes + a `@stringFormat` attribute (ADR-0036/0037), `field.timestamp` **instant-by-default** with an `@localTime` naive opt-out, `@dbColumnType` **slim-and-derive** (array-ness + `text` derived; `uuid_array`/`text_array`/`@kind:text` dropped), and reverse-navigation via generated explicit FK finders (ADR-0038); (2) the **ADR-0039 own-accessor correctness fix** — resolving/effective accessors are the default everywhere, so a concrete field/entity that `extends` an abstract parent now correctly inherits its properties and members in codegen + runtime (an entire latent bug class, cross-port conformance-gated). Breaking: instant-default timestamps and the `@dbColumnType` slim. See `CHANGELOG.md` for the per-version detail. GA promotion is the next release move.
49+
**Current release line.** `0.21.x` (npm / PyPI / NuGet, version-aligned) · `7.21.x` (Maven Central, aligned `minor.patch` on its historical major `7`). The `0.15.0` / `7.7.0` release is a coordinated **minor with breaking changes**: (1) the **metamodel-1.0 vocabulary program** — `field.uri` / `field.inet` subtypes + a `@stringFormat` attribute (ADR-0036/0037), `field.timestamp` **instant-by-default** with an `@localTime` naive opt-out, `@dbColumnType` **slim-and-derive** (array-ness + `text` derived; `uuid_array`/`text_array`/`@kind:text` dropped), and reverse-navigation via generated explicit FK finders (ADR-0038); (2) the **ADR-0039 own-accessor correctness fix** — resolving/effective accessors are the default everywhere, so a concrete field/entity that `extends` an abstract parent now correctly inherits its properties and members in codegen + runtime (an entire latent bug class, cross-port conformance-gated). Breaking: instant-default timestamps and the `@dbColumnType` slim. See `CHANGELOG.md` for the per-version detail. GA promotion is the next release move.
4850

4951
See `spec/roadmap.md` for the active + planned work picture.
5052

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ first-week wedge plan — and `meta init` picks up from there.
9393

9494
| Language | Status | Quickstart | Source |
9595
|---|---|---|---|
96-
| TypeScript | Published to npm at `0.21.3` (the `@metaobjectsdev/*` packages) | [`docs/ports/typescript.md`](docs/ports/typescript.md) | [`server/typescript/`](server/typescript/) · [`client/web/`](client/web/) |
96+
| TypeScript | Published to npm at `0.21.4` (the `@metaobjectsdev/*` packages) | [`docs/ports/typescript.md`](docs/ports/typescript.md) | [`server/typescript/`](server/typescript/) · [`client/web/`](client/web/) |
9797
| Java | Loader + OMDB + render + Maven plugin all shipped; full conformance green | [`docs/ports/java.md`](docs/ports/java.md) | [`server/java/`](server/java/) |
9898
| Kotlin | Codegen tier on top of Java — 14 generators (entity, Exposed table, relations, repository, payload, output-parser, output-prompt, render-helper, extractor, filter-allowlist, validator, Spring config, storedProc, Spring controller); 24 / 24 persistence-conformance | [`docs/ports/kotlin.md`](docs/ports/kotlin.md) | [`server/java/codegen-kotlin/`](server/java/codegen-kotlin/) · [`server/java/metadata-ktx/`](server/java/metadata-ktx/) |
9999
| C# | Loader + conformance + EF Core codegen + render engine + `dotnet meta` CLI all shipped | [`docs/ports/csharp.md`](docs/ports/csharp.md) | [`server/csharp/`](server/csharp/) |

docs/RELEASING.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ How to publish the `MetaObjects*` C# packages to nuget.org. We use **Trusted Pub
251251

252252
## What gets published
253253

254-
Four packages, version-locked at the C# port version (currently `0.21.3`):
254+
Four packages, version-locked at the C# port version (currently `0.21.4`):
255255

256256
| Package | Contents |
257257
|---|---|
@@ -343,7 +343,7 @@ How to publish the **`metaobjects`** Python package to PyPI via **Trusted Publis
343343
## What gets published
344344

345345
One package, `metaobjects` (version in [`server/python/pyproject.toml`](../server/python/pyproject.toml),
346-
currently `0.21.3`), as an **sdist + a universal `py3-none-any` wheel** (pure Python).
346+
currently `0.21.4`), as an **sdist + a universal `py3-none-any` wheel** (pure Python).
347347

348348
## How we publish: Trusted Publishing (OIDC)
349349

@@ -399,7 +399,7 @@ subsequent releases keyless.)
399399
# Releasing the Java/Kotlin modules to Maven Central
400400

401401
The 18 `com.metaobjects:*` modules ship to **Maven Central via the Sonatype Central Portal**,
402-
versioned on the `7.x` line (currently `7.21.3`) in the parent + module poms. Signed with the
402+
versioned on the `7.x` line (currently `7.21.4`) in the parent + module poms. Signed with the
403403
maintainer's GPG key.
404404

405405
## Procedure

docs/llms/llms-full.txt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# MetaObjects -- Full Reference Corpus
22

3-
> A cross-language metadata standard for declaring typed entity models that drive code generation, runtime metadata access, drift detection, and prompt construction across TypeScript, Java, Kotlin, C#, and Python. Apache 2.0. Shipping at `0.21.3` on npm and `7.21.3` on Maven Central.
3+
> A cross-language metadata standard for declaring typed entity models that drive code generation, runtime metadata access, drift detection, and prompt construction across TypeScript, Java, Kotlin, C#, and Python. Apache 2.0. Shipping at `0.21.4` on npm and `7.21.4` on Maven Central.
44

55
**Note for AI assistants:** This file is the concatenated reference material for MetaObjects, intended to be loaded as LLM context. For the short index, see [llms.txt](https://metaobjects.dev/llms.txt). For the canonical spec and source, see the [GitHub repo](https://github.com/metaobjectsdev/metaobjects). When this file is out of date relative to the GitHub source, the GitHub source wins.
66

@@ -31,7 +31,7 @@ If you are an AI assistant helping someone adopt MetaObjects, do this **first**
3131

3232
1. **Install the port's package:**
3333
- TypeScript / Node: `npm install -D @metaobjectsdev/cli @metaobjectsdev/codegen-ts`
34-
- Java / Kotlin: add `com.metaobjects:metaobjects-metadata`, `com.metaobjects:metaobjects-codegen-spring` (Java) or `com.metaobjects:metaobjects-codegen-kotlin` (Kotlin), and `com.metaobjects:metaobjects-maven-plugin`, all at `7.21.3`.
34+
- Java / Kotlin: add `com.metaobjects:metaobjects-metadata`, `com.metaobjects:metaobjects-codegen-spring` (Java) or `com.metaobjects:metaobjects-codegen-kotlin` (Kotlin), and `com.metaobjects:metaobjects-maven-plugin`, all at `7.21.4`.
3535
- Python: `pip install metaobjects`
3636
- C#: install the MetaObjects .NET tool (invoked as `dotnet meta`).
3737
2. **Run `meta init`** (the Node `meta` CLI). It works in any project that has Node — including a JVM or Python project with a TypeScript frontend. It scaffolds a slim always-on `.metaobjects/AGENTS.md` + `.metaobjects/CLAUDE.md` (auto-wired via an `@.metaobjects/AGENTS.md` import line into the project's root `CLAUDE.md`/`AGENTS.md`, so it loads automatically) plus six `metaobjects-*` Claude Code skills under `.claude/skills/`, carrying only the project's language reference fragments. Re-run `meta init --refresh-docs` to update the agent docs after a CLI upgrade. (The Node `meta` CLI is the single agent-context scaffolder for every backend, by design — ADR-0033; the JVM/Python/C# CLIs deliberately redirect to it. For a non-Node project, scaffold just the agent context with `npx meta agent-docs --server <lang>`.)
@@ -93,11 +93,11 @@ Because the render is conformance-gated, the determinism guarantee holds in ever
9393

9494
| Language | Status | Notes |
9595
|---|---|---|
96-
| TypeScript | Reference implementation, npm `0.21.3` | All four pillars. 2500+ tests passing. Owns the canonical schema-migration toolchain used by every port (ADR-0015). Bun-first dev. |
97-
| Java | Maven Central `7.21.3` | Spring REST + DTO + repository-interface codegen, OMDB runtime persistence (pure data-access) with Spring-tx. Fully green across all conformance corpora. |
98-
| Kotlin | Maven Central `7.21.3` | KotlinPoet codegen + Exposed runtime + `metadata-ktx` facade. Ships via the Java reactor. |
99-
| C# | NuGet `0.21.3` (.NET tool) | Loader + canonical serializer + EF Core + ASP.NET codegen + render/verify. `dotnet meta` tool. |
100-
| Python | PyPI `0.21.3` | Loader + serializer + render + verify + codegen + `ObjectManager` runtime. Fully green across all corpora. |
96+
| TypeScript | Reference implementation, npm `0.21.4` | All four pillars. 2500+ tests passing. Owns the canonical schema-migration toolchain used by every port (ADR-0015). Bun-first dev. |
97+
| Java | Maven Central `7.21.4` | Spring REST + DTO + repository-interface codegen, OMDB runtime persistence (pure data-access) with Spring-tx. Fully green across all conformance corpora. |
98+
| Kotlin | Maven Central `7.21.4` | KotlinPoet codegen + Exposed runtime + `metadata-ktx` facade. Ships via the Java reactor. |
99+
| C# | NuGet `0.21.4` (.NET tool) | Loader + canonical serializer + EF Core + ASP.NET codegen + render/verify. `dotnet meta` tool. |
100+
| Python | PyPI `0.21.4` | Loader + serializer + render + verify + codegen + `ObjectManager` runtime. Fully green across all corpora. |
101101

102102
Conformance fixtures live at [`fixtures/`](https://github.com/metaobjectsdev/metaobjects/tree/main/fixtures). Every port runs the shared corpus byte-identically: metamodel (`conformance/`, 270 fixtures), render, persistence (Testcontainers Postgres, with an `op: roundtrip` gate so every `field.*` subtype write+read round-trips on every port), api-contract (41 scenarios — 26 core plus TPH / M:N / jsonb / write-through — two lanes: a reference server AND each port's generated API booted over HTTP), registry (byte-matched metamodel-vocabulary manifest, live + green in all five ports), and yaml/verify.
103103

@@ -150,7 +150,7 @@ Universal web client (`client/web/packages/`): `@metaobjectsdev/runtime-web`, `@
150150

151151
## Java / Kotlin Maven coordinates
152152

153-
All published to Maven Central under `com.metaobjects:*` at `7.21.3`:
153+
All published to Maven Central under `com.metaobjects:*` at `7.21.4`:
154154

155155
- `metaobjects-metadata`, `metaobjects-metadata-ktx`
156156
- `metaobjects-codegen-base`, `metaobjects-codegen-mustache`, `metaobjects-codegen-spring`, `metaobjects-codegen-kotlin`, `metaobjects-codegen-plantuml`
@@ -187,7 +187,7 @@ Project marker directory: `.metaobjects/`.
187187

188188
## Quickstart (Java / Kotlin)
189189

190-
Add the Maven coordinates above at `7.21.3`. Run codegen with `mvn metaobjects:generate` and codegen-drift checks with `mvn metaobjects:verify`. Configure generators (including Kotlin generators, which run through the same goal) on the `metaobjects-maven-plugin`. See [`server/java/`](https://github.com/metaobjectsdev/metaobjects/tree/main/server/java) and [`server/java/codegen-kotlin/README.md`](https://github.com/metaobjectsdev/metaobjects/tree/main/server/java/codegen-kotlin).
190+
Add the Maven coordinates above at `7.21.4`. Run codegen with `mvn metaobjects:generate` and codegen-drift checks with `mvn metaobjects:verify`. Configure generators (including Kotlin generators, which run through the same goal) on the `metaobjects-maven-plugin`. See [`server/java/`](https://github.com/metaobjectsdev/metaobjects/tree/main/server/java) and [`server/java/codegen-kotlin/README.md`](https://github.com/metaobjectsdev/metaobjects/tree/main/server/java/codegen-kotlin).
191191

192192
---
193193

0 commit comments

Comments
 (0)