You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs(release): refresh version references for 0.24.1
The 0.24.1 cut was interrupted after npm and never walked
docs/RELEASING-docs-checklist.md, so every "currently shipping" pointer in
the repo still named 0.24.0 / 7.24.0 while all four registries were live at
0.24.1 / 7.24.1.
Updated: README's port table, docs/ports/{typescript,csharp,java}.md, the
"currently <ver>" notes in docs/RELEASING.md, both llms files (summary line,
install snippets, per-port rows, Maven coordinates), and AGENTS.md's Status
section — which also gains the 0.24.1 paragraph and moves the stale "current
release line" marker off 0.23.x, where the 0.24.0 cut had left it.
Historical references are deliberately NOT rewritten: llms.txt:72 and
llms-full.txt:286 say @verifiedBy/@supersededBy "were retired in 0.24.0",
and docs/RELEASING.md keeps its 0.24.0-rc.1 and 2FA anecdotes. Those state
when something happened; a blanket version sed would have falsified all five.
docs/ports/{kotlin,python}.md and docs/features/extending-with-providers.md
carry no version pointer, so they are correctly untouched.
Gates: scripts/ci-local.sh --only gates PASSED (12/12), including leak-scan
and the #337 shipped-doc-examples gate.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015WgNA6uDN9qxu2nA471rAq
Copy file name to clipboardExpand all lines: AGENTS.md
+5-3Lines changed: 5 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -17,9 +17,11 @@ Equal weight — all four ship per-language today across the five ports (TS / C#
17
17
18
18
## Status
19
19
20
-
_Last refreshed 2026-08-22._
20
+
_Last refreshed 2026-08-24._
21
+
22
+
**TypeScript reference implementation** is **published to npm at `0.24.1`** (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.1` (NuGet); Python at `0.24.1` (PyPI); Java / Kotlin at `7.24.1` (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.1` line is a coordinated PATCH across all four registries** (npm `0.24.1` · PyPI `0.24.1` · NuGet `0.24.1` · Maven `7.24.1`) — it ships **`metamodelVersion` 0.12**, and that pairing is the durable half: the package and metadata axes are SEPARATE contracts (ADR-0035 Amendment 2), so a metamodel move does not force a package minor. **Two changes make previously-LOADING metadata fail to load, and both are PATCH on purpose** — each corrects previously-*wrong acceptance* rather than changing a contract, the same call as the `@min` clamp in `0.19.1` and the `like` case-sensitivity fix in `0.21.6`: an index key is now `@fields` XOR `@expr` ([#342](https://github.com/metaobjectsdev/metaobjects/issues/342)) — an expression index was undeclarable and the one spelling that loaded silently threw half of itself away; and `@filterable`/`@sortable: true` on an `isArray` field is refused ([#335](https://github.com/metaobjectsdev/metaobjects/issues/335)) — it emitted a `like`/`eq` rule against a `text[]` column, i.e. SQL that cannot execute. Exposure is bounded but **not zero** and the changelog says so out loud: pre-1.0 `^0.24.x` resolves a patch, so an adopter who wrote either form independently auto-adopts a load error on `npm update`; in both cases the fix is deleting an attribute that was doing nothing. **The headline feature is the whole-object rollup** (#335): `@of` becomes OPTIONAL on `@agg: collect`, and omitting it collects each related row as the carrying field's declared value object, closing the one gap `origin.collection`'s retirement had to state rather than close. The declared value object IS the exposure and its members bind to the `@via` terminal entity **by name, deliberately not by `extends`** — name matching keeps one value object collectable from two entities — written into the byte-gated `origin.aggregate` registry prose so no port infers it from TypeScript. Eight load errors guard it, five under a new `ERR_COLLECT_WHOLE_OBJECT`, which is not taxonomy for its own sake: the shared corpus compares error **code + source and never message text**, and `ERR_INVALID_ORIGIN` is exactly what a loader still *requiring* `@of` emits, so five negative fixtures passed against three ports containing none of the rules. Two defects were found only by the emit→apply→introspect→re-diff round-trip: SQLite's **in-aggregate `ORDER BY` destroys the JSON subtype** (the obvious `json(json_object(…))` wrapper does not survive it — the shipped form re-wraps through `json_each`), and a `field.long` member arrives inside the rollup as a JSON **number** while the same value as a top-level BIGINT arrives as a **string**. Also: the C# EF Core target emitted **no foreign keys at all**, so `@onDelete` was inert, and an unconfigured FK is now `NoAction` rather than EF's implicit cascade ([#294](https://github.com/metaobjectsdev/metaobjects/issues/294)); `meta upgrade` rewrote nothing on a YAML estate and then reported it clean ([#339](https://github.com/metaobjectsdev/metaobjects/issues/339)); a sub-project generated from the ancestor's union of sources rather than its own ([#340](https://github.com/metaobjectsdev/metaobjects/issues/340)); generated enum types were value imports (TS1484) ([#341](https://github.com/metaobjectsdev/metaobjects/issues/341)) and generated SQLite did not compile on two drizzle minors the peer range admitted; a blank optional form field submitted `""` instead of clearing ([#223](https://github.com/metaobjectsdev/metaobjects/issues/223)); and **every shipped metadata example is now gated against the strict registry** ([#337](https://github.com/metaobjectsdev/metaobjects/issues/337)) — three times a doc or an agent-context skill taught vocabulary the loader had already retired and an adopter found it every time, so the gate loads every fenced JSON block under `docs/` and the skills, failing on vocabulary a block USES and tolerating what it OMITS. See `CHANGELOG.md` [0.24.1].
21
24
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
25
**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].
24
26
25
27
@@ -62,7 +64,7 @@ _Last refreshed 2026-08-22._
62
64
63
65
**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).
64
66
65
-
**Current release line.** `0.23.x` (npm / PyPI / NuGet, version-aligned) · `7.23.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.
67
+
**Current release line.** `0.24.x` (npm / PyPI / NuGet, version-aligned) · `7.24.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.
66
68
67
69
See `spec/roadmap.md` for the active + planned work picture.
Copy file name to clipboardExpand all lines: README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -93,7 +93,7 @@ first-week wedge plan — and `meta init` picks up from there.
93
93
94
94
| Language | Status | Quickstart | Source |
95
95
|---|---|---|---|
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/)|
96
+
| TypeScript | Published to npm at `0.24.1` (the `@metaobjectsdev/*` packages) |[`docs/ports/typescript.md`](docs/ports/typescript.md)|[`server/typescript/`](server/typescript/) · [`client/web/`](client/web/)|
97
97
| Java | Loader + OMDB + render + Maven plugin all shipped; full conformance green |[`docs/ports/java.md`](docs/ports/java.md)|[`server/java/`](server/java/)|
98
98
| 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/)|
99
99
| 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/)|
0 commit comments