Skip to content

Commit 589c1ea

Browse files
dmealingclaude
andcommitted
docs: propagate 0.21.0 / 7.21.0
Version refs across README, llms.txt/llms-full.txt, the per-port docs, RELEASING and the roadmap's published-line, plus the CLAUDE.md status block, which gains the 0.21.0 narrative: all three breaking changes, why passthrough survives on a value, the additive sourceless-projection migration path, and the caret-range reason this is a MINOR rather than a patch. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S3msoGxjRMwx94PhKSLDuE
1 parent 5c0bcd5 commit 589c1ea

9 files changed

Lines changed: 32 additions & 30 deletions

File tree

‎CLAUDE.md‎

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

1818
## Status
1919

20-
_Last refreshed 2026-08-07._
20+
_Last refreshed 2026-08-08._
2121

22-
**TypeScript reference implementation** is **published to npm at `0.20.16`** (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.20.16` (NuGet); Python at `0.20.16` (PyPI); Java / Kotlin at `7.20.16` (Maven Central). **All four registries now share the same patch number, and stay locked to one shared patch 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.0`** (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.0` (NuGet); Python at `0.21.0` (PyPI); Java / Kotlin at `7.21.0` (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.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].
2325

2426
**The `0.20.16` line is a coordinated PATCH across all four registries** (npm `0.20.16` · PyPI `0.20.16` · NuGet `0.20.16` · Maven `7.20.16`) shipping **[#270](https://github.com/metaobjectsdev/metaobjects/issues/270)** — **a prompt payload's field types are declared-authoritative, never origin-derived.** The prompt pillar's contract is that a payload is a typed projection the author *declares*, so payload bloat shows up as a diff; the **Kotlin, Python and Java** payload-VO generators broke it by typing a payload field from its `origin.*` child instead. Worst arm: `origin.collection` **discarded the field's declared `@objectRef`** and substituted the `@via` relationship's target entity, so a declared *curated* value-object silently became the **full entity** — invisible in a diff, because the metadata still read as curated. `@agg count` also hardwired a long type over the declared subtype, and `computed`/`first` forced nullability the declaration never asked for. All three ports now type **only** from declared `field.<subType>` + `@isArray` + `@objectRef`, never derive nullability from origin semantics, and walk the nested-payload closure **only** over declared `field.object @objectRef` edges; the `origin.collection` edge is deleted in lockstep from the ADR-0044 name-map closure each port shares with its extract tier (#228). **TypeScript and C# were already origin-blind and are the reference** — their product code is untouched (npm + NuGet are version-parity bumps), but each gained a regression pin, since both were previously ungated and that is exactly how the divergence survived long enough to be written into a ruling as settled fact. The issue as filed named only Kotlin and Python; **Java was found to carry the identical bug during pre-merge review** — it matters because #210 makes payloads `object.projection`s and projections legitimately carry assembly origins, so an origin-dispatching emitter would fire on the shape about to become the norm. Adopter-visible: a Java payload component declaring a plain scalar array changes from `T` to `java.util.List<T>` (array-ness was being dropped), and Kotlin's `origin.first`/`origin.computed` properties are no longer nullable. Also fixes two raw `NUL` bytes embedded in Java string literals (composite map-key delimiters written as literal `0x00` instead of the `\0` escape) — runtime-identical, but they made the file test as *binary*, so binary-skipping search tools silently ignored it, which is why Java was mis-recorded as origin-blind in the first place. Closes the long-standing `codegen-spring` "payload `origin.*` resolution" open question as **moot**. See `CHANGELOG.md` [0.20.16].
2527

‎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.20.16` (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.0` (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
@@ -213,7 +213,7 @@ How to publish the `MetaObjects*` C# packages to nuget.org. We use **Trusted Pub
213213

214214
## What gets published
215215

216-
Four packages, version-locked at the C# port version (currently `0.20.16`):
216+
Four packages, version-locked at the C# port version (currently `0.21.0`):
217217

218218
| Package | Contents |
219219
|---|---|
@@ -305,7 +305,7 @@ How to publish the **`metaobjects`** Python package to PyPI via **Trusted Publis
305305
## What gets published
306306

307307
One package, `metaobjects` (version in [`server/python/pyproject.toml`](../server/python/pyproject.toml),
308-
currently `0.20.16`), as an **sdist + a universal `py3-none-any` wheel** (pure Python).
308+
currently `0.21.0`), as an **sdist + a universal `py3-none-any` wheel** (pure Python).
309309

310310
## How we publish: Trusted Publishing (OIDC)
311311

@@ -361,7 +361,7 @@ subsequent releases keyless.)
361361
# Releasing the Java/Kotlin modules to Maven Central
362362

363363
The 18 `com.metaobjects:*` modules ship to **Maven Central via the Sonatype Central Portal**,
364-
versioned on the `7.x` line (currently `7.20.16`) in the parent + module poms. Signed with the
364+
versioned on the `7.x` line (currently `7.21.0`) in the parent + module poms. Signed with the
365365
maintainer's GPG key.
366366

367367
## 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.20.16` on npm and `7.20.16` 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.0` on npm and `7.21.0` 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.20.16`.
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.0`.
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.20.16` | 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.20.16` | Spring REST + JPA codegen, OMDB runtime persistence (pure data-access) with Spring-tx. Fully green across all conformance corpora. |
98-
| Kotlin | Maven Central `7.20.16` | KotlinPoet codegen + Exposed runtime + `metadata-ktx` facade. Ships via the Java reactor. |
99-
| C# | NuGet `0.20.16` (.NET tool) | Loader + canonical serializer + EF Core + ASP.NET codegen + render/verify. `dotnet meta` tool. |
100-
| Python | PyPI `0.20.16` | Loader + serializer + render + verify + codegen + `ObjectManager` runtime. Fully green across all corpora. |
96+
| TypeScript | Reference implementation, npm `0.21.0` | 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.0` | Spring REST + JPA codegen, OMDB runtime persistence (pure data-access) with Spring-tx. Fully green across all conformance corpora. |
98+
| Kotlin | Maven Central `7.21.0` | KotlinPoet codegen + Exposed runtime + `metadata-ktx` facade. Ships via the Java reactor. |
99+
| C# | NuGet `0.21.0` (.NET tool) | Loader + canonical serializer + EF Core + ASP.NET codegen + render/verify. `dotnet meta` tool. |
100+
| Python | PyPI `0.21.0` | 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.20.16`:
153+
All published to Maven Central under `com.metaobjects:*` at `7.21.0`:
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.20.16`. 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.0`. 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)