From c44e7c4e2f8da9b85da5a97d9c66cf4c0b9d920c Mon Sep 17 00:00:00 2001 From: Doug Mealing Date: Fri, 30 Oct 2026 04:06:16 -0400 Subject: [PATCH 1/3] docs: restamp current-version claims to 1.2.0 / 8.2.0; add pydantic extra to the Python package --- AGENTS.md | 10 +++++----- CHANGELOG.md | 6 ++++++ README.md | 10 +++++----- docs/ports/csharp.md | 4 ++-- docs/ports/java.md | 4 ++-- docs/ports/kotlin.md | 2 +- docs/ports/python.md | 3 +++ docs/ports/typescript.md | 2 +- server/python/pyproject.toml | 3 +++ server/python/uv.lock | 6 +++++- 10 files changed, 33 insertions(+), 17 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index afc42a135..b3c37a737 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -22,7 +22,7 @@ The first four ship per-language today across the five ports (TS / C# / Java / P ## Status -_Last refreshed 2026-10-26._ +_Last refreshed 2026-10-30._ **1.0 gating — the quiet period is RETIRED (2026-09-06).** `docs/1.0-readiness.md` §G3 no longer asks for "one coordinated release with no metamodel-breaking change." It measured a @@ -39,9 +39,9 @@ because a conformance corpus gates the ports against each other and never agains in ADR-0035 **Amendment 3**. Do not reintroduce a waiting gate in any form. -**Where the versions are.** `latest` is **`1.1.4`** on npm, **`8.1.4`** on Maven Central, -**`1.1.4`** on PyPI and **`1.1.4`** on NuGet (the Maven major is always **npm major + 7**, so -1.1.4 is 8.1.4). **1.1.0, 1.1.1, 1.1.2, 1.1.3 and 1.1.4 are released.** 1.0.13 is the last 1.0.x release; the four registries moved together on 1.0.13, 1.0.12, 1.0.11, 1.0.10 and 1.0.9 (Maven skipped 8.0.8), and earlier Maven alone took 1.0.6 (8.0.6) while the other three skipped that +**Where the versions are.** `latest` is **`1.2.0`** on npm, **`8.2.0`** on Maven Central, +**`1.2.0`** on PyPI and **`1.2.0`** on NuGet (the Maven major is always **npm major + 7**, so +1.2.0 is 8.2.0). **1.1.0, 1.1.1, 1.1.2, 1.1.3, 1.1.4 and 1.2.0 are released.** 1.0.13 is the last 1.0.x release; the four registries moved together on 1.0.13, 1.0.12, 1.0.11, 1.0.10 and 1.0.9 (Maven skipped 8.0.8), and earlier Maven alone took 1.0.6 (8.0.6) while the other three skipped that number. Both patterns are the convergent-publishing rule working as intended. **1.0 is CUT** and **1.1 is released**: the 1.0.0-rc candidates through 1.0.13 are superseded, and npm's `next` tag is REPOINTED onto each release — not deleted, because `dist-tag rm` 403s for every token we hold (`docs/RELEASING.md` §4). `metamodelVersion` read **`1.0`** through 1.0.13 — C4 landed and G4 shipped it, and no 1.0.x patch @@ -80,7 +80,7 @@ PyPI has had no product change since `0.25.0` — nothing is broken. **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 + the nine 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 //{id}/` + 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); FR-044 (the reporting vocabulary — `dimension.attribute`/`dimension.time`, `measure.aggregate`/`measure.ratio`, `segment.filter`, `object.report`, `@spine` on a report to take rows from a to-one dimension entity, `@default` on a measure for empty aggregates, plus the relative-date filter value — registered and loader-validated in all five ports; a report that declares a read-only `source.rdb @kind: view` is lowered to a SQL view by `meta migrate` and read by every port, and served by a generated read-only list route in every port, gated by the api-contract `report/` sub-corpus; the TypeScript `cube-model` reference generator writes the vocabulary as Cube data-model files, gated by the `fixtures/cube-model/` corpus and a `cube` lane that loads the output into a real Cube; a served report gets the generated TanStack list hook (`useList`) but no grid or form, see [docs/features/reporting.md](docs/features/reporting.md) and [docs/features/cube-export.md](docs/features/cube-export.md)). -**Release 1.1.0** (released; npm `1.1.0`, PyPI `1.1.0`, NuGet `1.1.0` and Maven Central `8.1.0`; the latest is 1.1.4 / 8.1.4). The reporting release (FR-044): declare dimensions, measures, segments and an `object.report`, and get a SQL view, a served read-only list route in every port, a generated TanStack list hook, and a Cube data model, with `@spine` for rows that have no facts and `@default` for an empty measure. Also carries the first slice of requirements (the gate in every port's `verify`), the derived-key parity fix across the ports, and the list-hook and nested-average fixes found by the first adopter. See the `CHANGELOG.md` 1.1.0 section for the full scope, pre-release RC history, and the diffs to expect when you upgrade (ejected generators and keyless projections). It also makes documentation a set of generators in every port (ADR-0034 Amendment 9): the docs commands are removed, and `docs/features/migrations/docs-are-generators.md` is the upgrade path. The last 1.0.x release, 1.0.13 (2026-10-03), was a PATCH on 1.0.x. +**Release 1.1.0** (released; npm `1.1.0`, PyPI `1.1.0`, NuGet `1.1.0` and Maven Central `8.1.0`; the latest is 1.2.0 / 8.2.0). The reporting release (FR-044): declare dimensions, measures, segments and an `object.report`, and get a SQL view, a served read-only list route in every port, a generated TanStack list hook, and a Cube data model, with `@spine` for rows that have no facts and `@default` for an empty measure. Also carries the first slice of requirements (the gate in every port's `verify`), the derived-key parity fix across the ports, and the list-hook and nested-average fixes found by the first adopter. See the `CHANGELOG.md` 1.1.0 section for the full scope, pre-release RC history, and the diffs to expect when you upgrade (ejected generators and keyless projections). It also makes documentation a set of generators in every port (ADR-0034 Amendment 9): the docs commands are removed, and `docs/features/migrations/docs-are-generators.md` is the upgrade path. The last 1.0.x release, 1.0.13 (2026-10-03), was a PATCH on 1.0.x. Active and planned work lives in GitHub: issues labelled `FR`, milestones for releases, and the MetaObjects Roadmap project board. `spec/roadmap.md` keeps the release direction and the FR → issue → spec index. Process: `docs/ROADMAP-PROCESS.md`. diff --git a/CHANGELOG.md b/CHANGELOG.md index 79042d818..a5d1e9e3f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,12 @@ here.** ## [Unreleased] +### Added + +- **A `pydantic` extra on the Python package.** `pip install "metaobjects[pydantic]"` installs + `pydantic>=2.8`, the minimum the generated Python models need, so an adopter can get the enforced + floor with the package. The base install is unchanged. + ## [1.2.0] — 2026-10-30 _npm `1.2.0` (full lockstep across all 14 `@metaobjectsdev/*` publish candidates)._ diff --git a/README.md b/README.md index ea477e278..d56595747 100644 --- a/README.md +++ b/README.md @@ -160,11 +160,11 @@ first-week wedge plan — and `meta init` picks up from there. | Language | Status | Quickstart | Source | |---|---|---|---| -| TypeScript | **npm `1.1.4`** — the `@metaobjectsdev/*` packages | [`docs/ports/typescript.md`](docs/ports/typescript.md) | [`server/typescript/`](server/typescript/) · [`client/web/`](client/web/) | -| Java | **Maven Central `8.1.4`** (`com.metaobjects:*` — the JVM major is npm major + 7) — loader + OMDB + render + Maven plugin all shipped; full conformance green | [`docs/ports/java.md`](docs/ports/java.md) | [`server/java/`](server/java/) | -| Kotlin | **Maven Central `8.1.4`** — codegen tier on top of Java: 17 generators (entity, Exposed table, names, relations, repository, output-parser, output-prompt, render-helper, extractor, filter-allowlist, validator, Spring config, storedProc, Spring controller, requirement-tests, api-docs, report-export); 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/) | -| C# | **NuGet `1.1.4`** — loader + conformance + EF Core codegen + render engine + `dotnet meta` CLI all shipped | [`docs/ports/csharp.md`](docs/ports/csharp.md) | [`server/csharp/`](server/csharp/) | -| Python | **PyPI `1.1.4`** — loader + conformance + render + entity-model codegen + ObjectManager runtime shipped; schema migrations are TS-owned (ADR-0015) | [`docs/ports/python.md`](docs/ports/python.md) | [`server/python/`](server/python/) | +| TypeScript | **npm `1.2.0`** — the `@metaobjectsdev/*` packages | [`docs/ports/typescript.md`](docs/ports/typescript.md) | [`server/typescript/`](server/typescript/) · [`client/web/`](client/web/) | +| Java | **Maven Central `8.2.0`** (`com.metaobjects:*` — the JVM major is npm major + 7) — loader + OMDB + render + Maven plugin all shipped; full conformance green | [`docs/ports/java.md`](docs/ports/java.md) | [`server/java/`](server/java/) | +| Kotlin | **Maven Central `8.2.0`** — codegen tier on top of Java: 17 generators (entity, Exposed table, names, relations, repository, output-parser, output-prompt, render-helper, extractor, filter-allowlist, validator, Spring config, storedProc, Spring controller, requirement-tests, api-docs, report-export); 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/) | +| C# | **NuGet `1.2.0`** — loader + conformance + EF Core codegen + render engine + `dotnet meta` CLI all shipped | [`docs/ports/csharp.md`](docs/ports/csharp.md) | [`server/csharp/`](server/csharp/) | +| Python | **PyPI `1.2.0`** — loader + conformance + render + entity-model codegen + ObjectManager runtime shipped; schema migrations are TS-owned (ADR-0015) | [`docs/ports/python.md`](docs/ports/python.md) | [`server/python/`](server/python/) | ## Capability matrix diff --git a/docs/ports/csharp.md b/docs/ports/csharp.md index 8c73e423c..01a0b3687 100644 --- a/docs/ports/csharp.md +++ b/docs/ports/csharp.md @@ -42,7 +42,7 @@ objects you keep sourceless. ## Install -Published to [NuGet](https://www.nuget.org/packages/MetaObjects) at `1.1.4` — four +Published to [NuGet](https://www.nuget.org/packages/MetaObjects) at `1.2.0` — four packages, version-locked to the C# port version: `MetaObjects` (loader), `MetaObjects.Codegen`, `MetaObjects.Render` and the `MetaObjects.Cli` tool. @@ -69,7 +69,7 @@ SQLite so it runs with nothing else installed; the same generated code runs on P enable - + diff --git a/docs/ports/java.md b/docs/ports/java.md index e4f14b9f0..6e594802b 100644 --- a/docs/ports/java.md +++ b/docs/ports/java.md @@ -54,7 +54,7 @@ requirement gate) and `eject -Dlist` (owned-copy status) are the diagnostics the ## Install -Set `${metaobjects.version}` to the current Maven Central release (`8.1.4`) — both +Set `${metaobjects.version}` to the current Maven Central release (`8.2.0`) — both the dependency and plugin blocks below resolve it from one `` entry. The artifacts and the generated records need Java 21, so set the compiler level here too (Maven defaults to Java 8, where `mvn compile` fails with "records are not supported in -source 8"): @@ -62,7 +62,7 @@ defaults to Java 8, where `mvn compile` fails with "records are not supported in ```xml - 8.1.4 + 8.2.0 3.3.5 21 UTF-8 diff --git a/docs/ports/kotlin.md b/docs/ports/kotlin.md index e58a54f77..108505e5c 100644 --- a/docs/ports/kotlin.md +++ b/docs/ports/kotlin.md @@ -61,7 +61,7 @@ your own ``, `` and ``: ```xml - 8.1.4 + 8.2.0 2.0.21 3.3.5 0.55.0 diff --git a/docs/ports/python.md b/docs/ports/python.md index 3891af36b..8cb2a5a3e 100644 --- a/docs/ports/python.md +++ b/docs/ports/python.md @@ -25,6 +25,9 @@ Requires **Python 3.11+**. Published to PyPI as **`metaobjects`**: pip install metaobjects # or: uv add metaobjects ``` +Generated models import Pydantic 2.8 or newer. `pip install "metaobjects[pydantic]"` installs +that minimum alongside the package. + > **On an older default interpreter?** Many systems (e.g. Ubuntu 22.04) still > ship `python3` = 3.10, where `pip install metaobjects` fails with a confusing > `ERROR: No matching distribution found for metaobjects` (the wheel is diff --git a/docs/ports/typescript.md b/docs/ports/typescript.md index e89dd15c8..332291d3b 100644 --- a/docs/ports/typescript.md +++ b/docs/ports/typescript.md @@ -1,6 +1,6 @@ # TypeScript port -The reference implementation. Published to npm at `1.1.4` as 14 +The reference implementation. Published to npm at `1.2.0` as 14 `@metaobjectsdev/*` packages on the `latest` tag. Targets Node-compatible runtimes: the generated code and the CLI run on stock Node (via `tsx` or after a `tsc` build), and Bun is simply the fastest dev workflow in this repo. diff --git a/server/python/pyproject.toml b/server/python/pyproject.toml index 2854f66ca..eb4566033 100644 --- a/server/python/pyproject.toml +++ b/server/python/pyproject.toml @@ -66,6 +66,9 @@ mysql = ["PyMySQL>=1.1"] # `.jinja` / `.j2` / `.jinja2` template is rendered or checked, so a Mustache-only project # installs nothing extra. jinja = ["jinja2>=3.1"] +# Pydantic 2.8 is the minimum for generated Python models (1.2.0). Generated code imports +# pydantic; the core loader does not, so it stays out of the base dependencies. +pydantic = ["pydantic>=2.8"] [[tool.mypy.overrides]] # PyMySQL ships no type information. diff --git a/server/python/uv.lock b/server/python/uv.lock index 299970581..a4a3bdabe 100644 --- a/server/python/uv.lock +++ b/server/python/uv.lock @@ -425,6 +425,9 @@ jinja = [ mysql = [ { name = "pymysql" }, ] +pydantic = [ + { name = "pydantic" }, +] [package.dev-dependencies] dev = [ @@ -444,6 +447,7 @@ requires-dist = [ { name = "mypy", marker = "extra == 'dev'", specifier = ">=1.10" }, { name = "pg8000", marker = "extra == 'integration'", specifier = ">=1.31" }, { name = "pydantic", marker = "extra == 'dev'", specifier = ">=2.8" }, + { name = "pydantic", marker = "extra == 'pydantic'", specifier = ">=2.8" }, { name = "pymysql", marker = "extra == 'integration'", specifier = ">=1.1" }, { name = "pymysql", marker = "extra == 'mysql'", specifier = ">=1.1" }, { name = "pytest", marker = "extra == 'dev'", specifier = ">=8" }, @@ -451,7 +455,7 @@ requires-dist = [ { name = "pyyaml", specifier = ">=6.0" }, { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.6" }, ] -provides-extras = ["dev", "integration", "mysql", "jinja"] +provides-extras = ["dev", "integration", "mysql", "jinja", "pydantic"] [package.metadata.requires-dev] dev = [ From 7fcbfebd0b8fb56e43b3893311a93144f6d88aa3 Mon Sep 17 00:00:00 2001 From: Doug Mealing Date: Fri, 30 Oct 2026 04:31:31 -0400 Subject: [PATCH 2/3] no-mistakes(document): Restamped Java README to 8.2.0. Other listed docs already at 1.2.0 / 8.2.0 in this branch; pydantic extra and its docs were already in target commit. --- server/java/README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/server/java/README.md b/server/java/README.md index cc07b39bc..4bef7748f 100644 --- a/server/java/README.md +++ b/server/java/README.md @@ -1,6 +1,6 @@ # MetaObjects — Java -The Java port of the cross-language MetaObjects metadata standard. Published to Maven Central under `com.metaobjects:*` across 14 modules, at `8.1.0` for the 1.1.0 release (the Maven major is the npm major + 7). Apache 2.0. +The Java port of the cross-language MetaObjects metadata standard. Published to Maven Central under `com.metaobjects:*` across 14 modules, at `8.2.0` for the 1.2.0 release (the Maven major is the npm major + 7). Apache 2.0. For the standard itself (metamodel, conformance corpora, ADRs) see the [repository-level docs](../../spec/) and the parent [README](../../README.md). This document is scoped to the Java implementation. @@ -25,7 +25,7 @@ so they are maintained in one place rather than restated per port. ## Modules -All published to Maven Central under `com.metaobjects:*` (`8.1.0` for the 1.1.0 release): +All published to Maven Central under `com.metaobjects:*` (`8.2.0` for the 1.2.0 release): | Module | Purpose | |---|---| @@ -52,7 +52,7 @@ The `archetype` and `examples` directories were removed in 7.1.0 (they had been com.metaobjects metaobjects-metadata - 8.1.0 + 8.2.0 ``` @@ -62,12 +62,12 @@ Spring REST stack (repository interface is consumer-implemented): com.metaobjects metaobjects-codegen-spring - 8.1.0 + 8.2.0 com.metaobjects metaobjects-core-spring - 8.1.0 + 8.2.0 ``` @@ -77,7 +77,7 @@ Maven plugin for `metaobjects:generate` / `metaobjects:verify` / `metaobjects:ed com.metaobjects metaobjects-maven-plugin - 8.1.0 + 8.2.0 generate @@ -101,12 +101,12 @@ Kotlin entry point — adds the Kotlin facade and the KotlinPoet codegen pipelin com.metaobjects metaobjects-metadata-ktx - 8.1.0 + 8.2.0 com.metaobjects metaobjects-codegen-kotlin - 8.1.0 + 8.2.0 ``` From a1cc8048d19e6ffafea6ea883bc5acb31997b2e6 Mon Sep 17 00:00:00 2001 From: Doug Mealing Date: Fri, 30 Oct 2026 04:33:05 -0400 Subject: [PATCH 3/3] no-mistakes(document): Fixed one stale Python install snippet. Version restamp already complete; no other stale facts found. --- docs/ports/python.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/ports/python.md b/docs/ports/python.md index 8cb2a5a3e..8119079ef 100644 --- a/docs/ports/python.md +++ b/docs/ports/python.md @@ -259,12 +259,13 @@ When `verify --codegen` finds the committed output was generated with another ru so rather than telling you to regenerate. (A field carrying an explicit `@column` is unaffected either way.) -**Both `pydantic` and `fastapi` are consumer-installed, not transitive deps of +**`fastapi` and `pydantic` are consumer-installed, not transitive deps of `metaobjects` itself** — the entity/router files this emits `import pydantic` -and `import fastapi`, so add them before importing the generated code: +and `import fastapi`, so add them before importing the generated code. The +`pydantic` extra installs the 2.8 minimum (see [Install](#install) above): ```bash -pip install pydantic fastapi +pip install "metaobjects[pydantic]" fastapi ``` The entity-model generator emits one Pydantic **`BaseModel`** per entity (not