Skip to content

Commit d46221c

Browse files
dmealingclaude
andcommitted
docs(release): refresh version references for 0.24.0 / 7.24.0
Walks RELEASING-docs-checklist.md section A. All four registries move together, so the npm, PyPI, NuGet and Maven references all bump — this is a coordinated cut, not the npm-only case the checklist's default wording describes. Deliberately NOT a blanket sed over docs/: `docs/features/prerelease.md` explains the `-rc.N` scheme using 0.23.2/0.23.3 as worked examples, and the AGENTS.md `[0.23.2]` Status paragraph is a historical record. Both would have been silently falsified. Note for the next cut: CLAUDE.md is a SYMLINK to AGENTS.md, and `sed -i` replaces a symlink with a regular file rather than following it — caught here by diff-review (613 phantom insertions), reverted, and the edit re-applied to AGENTS.md. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DhpswkF1NvwxhFWMmdAT15
1 parent 254f5d4 commit d46221c

8 files changed

Lines changed: 31 additions & 29 deletions

File tree

AGENTS.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-16._
20+
_Last refreshed 2026-08-22._
21+
22+
**TypeScript reference implementation** is **published to npm at `0.24.0`** (14 `@metaobjectsdev/*` publish candidates on the `latest` tag, full lockstep; the two `angular` packages are versioned on their own `0.6.x` line and are **NOT published to npm — source-only by decision** (ADR-0048): they build in-repo, and stay off the registry until they meet the ADR's promotion bar). C# at `0.24.0` (NuGet); Python at `0.24.0` (PyPI); Java / Kotlin at `7.24.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+
**The `0.24.0` line is a coordinated MINOR across all four registries** (npm `0.24.0` · PyPI `0.24.0` · NuGet `0.24.0` · Maven `7.24.0`) — **the pre-1.0 breaking slot, spent deliberately on four vocabulary retirements plus one rename in ONE window.** Under ADR-0023's sealed strict registry a retirement has no deprecation shim, so a legacy model fails to LOAD and every one of these is a migration an adopter must perform; two breaking MINORs back to back would mean two migrations for work budgeted as one. **(A)** a `template.*` subtype's axis is DIRECTION — `@promptStyle` on a `template.output` now fails the load, the inbound tier (parser, tolerant extractor, response-format fragment) belongs to a `template.prompt` carrying `@responseRef`, and emitted paths follow the direction (`.output.*` → `.response.*`); **(B)** the requirement vocabulary becomes PRESCRIPTIVE-ONLY (FR-038) — `@verifiedBy`/`@supersededBy` deregister and `@status` shrinks to `planned | live | partial`, forced by two SHIPPED statements contradicting each other (the byte-gated registry justified the dangling-`@implementedBy` exemption on `abandoned`/`superseded` while the authoring guidance said deleting such an entry destroys the record — only one could be the rule), and the deciding argument is second-order: because `verify` was SILENT on unresolved refs for exactly those two statuses, one estate held **29 references that could never resolve across 14 entries** while `meta verify` reported zero; **(C)** `@readOnly` becomes the `@mutability` enum (FR-037 R1), whose point is the new middle mode **`writeOnce`** — set on create, frozen after — that the boolean could not express and an assigned primary key has always wanted; **(D)** `origin.collection` retires to reserved-not-registered, having duplicated `origin.aggregate @agg: collect` on a strictly smaller attr set with nothing ever dispatching on it; **(E)** `@violation` becomes `@counterexample` on `requirement.*` — a rename caught BEFORE ship and folded in rather than held for `0.25.0`, because holding it out would have made every adopter with a ledger edit the same files twice, the second pass landing on the hand-judgment `abandoned` cases they had just finished. **Most of it is one command — `meta upgrade --apply`** (new in this release), a raw-document rewriter driven by the SAME retirement map the loader's errors come from, so the fixer and the diagnosis cannot drift apart; it refuses rather than guesses, and `@status: abandoned` is refused because deciding what happens to a retired capability's record is judgment, not substitution. **This release also moves `metamodelVersion` `0.9` → `0.10` — the first time that number has ever moved**, and one move covers all five. Two changes are DEFAULT FLIPS rather than corrections of previously-wrong behaviour: the Java Maven plugin now fails a build that a silently-empty model used to let pass, and Java and Python now follow symlinked directories. **The cost of batching is paid elsewhere and was adjudicated, not discovered:** `docs/1.0-readiness.md` §G3's quiet-period clock resets, so 1.0 now needs at least one coordinated release after this one with NO metamodel-breaking change, to prove the rate actually dropped. Also ships a `libraries` key so a shipped library is loadable through the toolchain (TS CLI + JVM `EmbeddedLibrary`/`LibrarySources` + a Maven `LoaderParam`), a `meta docs` requirements surface on by default with entity pages naming the requirements that claim them, and a requirements summary on every `meta verify` run. Migration guides for all five changes live under `docs/features/migrations/`. See `CHANGELOG.md` [0.24.0].
2124

22-
**TypeScript reference implementation** is **published to npm at `0.23.2`** (14 `@metaobjectsdev/*` publish candidates on the `latest` tag, full lockstep; the two `angular` packages are versioned on their own `0.6.x` line and are **NOT published to npm — source-only by decision** (ADR-0048): they build in-repo, and stay off the registry until they meet the ADR's promotion bar). C# at `0.23.2` (NuGet); Python at `0.23.2` (PyPI); Java / Kotlin at `7.23.2` (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.
2325

2426
**The `0.23.2` line is a coordinated PATCH across all four registries** (npm `0.23.2` · PyPI `0.23.2` · NuGet `0.23.2` · Maven `7.23.2`) — **int-backed `field.enum` storage, and the versioning rule that says why this is a PATCH.** The rule change is the durable half: the old policy made ANY registry addition a MINOR, which had spent `0.22.0` and `0.23.0` on changes a project could not observe at all. `expected-registry.json` is an **internal** gate — five ports byte-matching one manifest is how the ports are kept from drifting — and it says nothing about whether an adopter's project changes. Vocabulary now sorts by consumer impact: **attribute ⇒ PATCH, top-level type ⇒ MINOR, subtype ⇒ PATCH when INERT** (nothing but authoring it can reach it; MINOR when it narrows something previously permitted, changes what existing metadata means, or headlines a release on purpose). The caret rule is not to be inverted — "`^0.22.x` resolves `<0.23.0`, so a MINOR is adopted deliberately" is a reason to CHOOSE minor when that gate is wanted, not a reason additive vocabulary must be minor. ADR-0035 Amendment 1; operative table in `docs/RELEASING.md`. **The feature:** `@intValueMap` (a `{memberSymbol: int}` map on `field.enum`) switches the column from `varchar` + string `CHECK` to `integer` + int `CHECK` while the wire format, the generated enum type and every runtime return value stay the member SYMBOL — the provenance is an integer-coded column an adopter already has, and it is a MAP rather than a positional array so reordering `@values` cannot silently re-map every member. Persistence ships in all five ports; **TypeScript needed TWO codecs** (a Drizzle `customType` for generated code, `ObjectManager` read/write/filter coercion for the metadata-driven runtime) and shipped only the first until the corpus caught it — generated code worked while `om.create()` bound the symbol into an integer column. **Two rulings close ways it could have shipped half-true:** `@isArray` + `@intValueMap` is now a LOAD ERROR (`ERR_ENUM_INT_VALUE_MAP_ARRAY`) because the original design assumed the element codec fell out of the scalar one and it does not — Python bound the symbol LIST into an `integer[]`, Java and Kotlin emitted a scalar codec, TS's sqlite branch stored symbols as JSON text, and **two ports composing while four silently get it wrong is the `field.byte`/`short`/`class` mistake**; and a stored integer mapping to no member now THROWS in all five (it previously behaved four different ways — Java surfaced `"7"`, Python the raw int, C# fell through to the LAST member, handing back `ARCHIVED` for a row that is not). Also: the filter-operator band is decided per FIELD not per subtype (an int-backed enum drops `like`), an FK into a table whose key carries `@column` stopped phantom-diffing forever, views in a table-less schema are no longer excluded from the migrate diff entirely, and a chained abstract `field.enum` is named for its OWN declaration in Kotlin. See `CHANGELOG.md` [0.23.2].
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.23.2` (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.24.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
@@ -405,7 +405,7 @@ How to publish the `MetaObjects*` C# packages to nuget.org. We use **Trusted Pub
405405

406406
## What gets published
407407

408-
Four packages, version-locked at the C# port version (currently `0.23.2`):
408+
Four packages, version-locked at the C# port version (currently `0.24.0`):
409409

410410
| Package | Contents |
411411
|---|---|
@@ -497,7 +497,7 @@ How to publish the **`metaobjects`** Python package to PyPI via **Trusted Publis
497497
## What gets published
498498

499499
One package, `metaobjects` (version in [`server/python/pyproject.toml`](../server/python/pyproject.toml),
500-
currently `0.23.2`), as an **sdist + a universal `py3-none-any` wheel** (pure Python).
500+
currently `0.24.0`), as an **sdist + a universal `py3-none-any` wheel** (pure Python).
501501

502502
## How we publish: Trusted Publishing (OIDC)
503503

@@ -553,7 +553,7 @@ subsequent releases keyless.)
553553
# Releasing the Java/Kotlin modules to Maven Central
554554

555555
The 18 `com.metaobjects:*` modules ship to **Maven Central via the Sonatype Central Portal**,
556-
versioned on the `7.x` line (currently `7.23.2`) in the parent + module poms. Signed with the
556+
versioned on the `7.x` line (currently `7.24.0`) in the parent + module poms. Signed with the
557557
maintainer's GPG key.
558558

559559
## 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.23.2` on npm and `7.23.2` 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.24.0` on npm and `7.24.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.23.2`.
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.24.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.23.2` | 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.23.2` | 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.23.2` | KotlinPoet codegen + Exposed runtime + `metadata-ktx` facade. Ships via the Java reactor. |
99-
| C# | NuGet `0.23.2` (.NET tool) | Loader + canonical serializer + EF Core + ASP.NET codegen + render/verify. `dotnet meta` tool. |
100-
| Python | PyPI `0.23.2` | Loader + serializer + render + verify + codegen + `ObjectManager` runtime. Fully green across all corpora. |
96+
| TypeScript | Reference implementation, npm `0.24.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.24.0` | 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.24.0` | KotlinPoet codegen + Exposed runtime + `metadata-ktx` facade. Ships via the Java reactor. |
99+
| C# | NuGet `0.24.0` (.NET tool) | Loader + canonical serializer + EF Core + ASP.NET codegen + render/verify. `dotnet meta` tool. |
100+
| Python | PyPI `0.24.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.23.2`:
153+
All published to Maven Central under `com.metaobjects:*` at `7.24.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.23.2`. 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.24.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)