Skip to content

Commit c40e90a

Browse files
dmealingclaude
andcommitted
docs: propagate 0.21.6 / 7.21.6 across README, llms.txt, port docs and CLAUDE.md
Walks docs/RELEASING-docs-checklist.md section A for the 0.21.6 cut. CLAUDE.md got a NEW Status paragraph rather than a blanket sed: its Status section holds one paragraph per release line, and a global replace on the last cut relabelled the 0.21.4 paragraph while leaving its 0.21.4 content. The 0.21.6 entry leads with the two runtime-behaviour changes, since a PATCH is auto-adopted on `npm update` and both alter behaviour against an existing database. Historical version references deliberately untouched: docs/features/image-upload.md's "was an optional peer through 0.21.4", and everything under docs/superpowers/** and spec/decisions/**, which preserve old versions by design. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KTGT5ksntpcJDZVJ5VyXHS
1 parent fdb8fa4 commit c40e90a

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
@@ -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-09._
20+
_Last refreshed 2026-08-10._
2121

22-
**TypeScript reference implementation** is **published to npm at `0.21.5`** (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.21.5` (NuGet); Python at `0.21.5` (PyPI); Java / Kotlin at `7.21.5` (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.6`** (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.21.6` (NuGet); Python at `0.21.6` (PyPI); Java / Kotlin at `7.21.6` (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.6` line is a coordinated PATCH across all four registries** (npm `0.21.6` · PyPI `0.21.6` · NuGet `0.21.6` · Maven `7.21.6`). **Two changes alter runtime behaviour on an existing database** — they lead the changelog deliberately, because a PATCH is auto-adopted on `npm update`. (1) **`like` is now case-SENSITIVE on Postgres** (it dispatched `ILIKE`): FR-009 always specified SQL `LIKE`, FR-009 §7 puts `ilike` explicitly out of scope, and TS's own Kysely/Drizzle/in-memory drivers were ALREADY case-sensitive — only one branch of one HTTP parser disagreed, carrying a comment that wrongly claimed sqlite LIKE is case-sensitive. So a query returning extra rows before returns fewer now. TS lowers sqlite `like` to `GLOB` (SQLite's native LIKE folds ASCII case and `PRAGMA case_sensitive_like` is connection-global on a consumer-owned connection); C#'s conformance adapter, which reflected Npgsql `ILike` while the product shipped `EF.Functions.Like`, now gates what the product ships. Both corpora are **de-blinded** with case-mismatched probes — the persistence fixture's comment that its data was case-aligned "so the test passes whether a port wires LIKE or ILIKE" is deleted. `?search` stays deliberately insensitive; `ilike` remains unadded (ADR-0049). (2) **The first `meta migrate` after upgrading emits a migration ADDING `ON DELETE` actions to live foreign keys** — a parent-side `relationship.composition` was silently contributing no referential action, so the documented "composition ⇒ cascade" never fired and deleting a parent 500'd. Correlation is now package-aware at both tiers with `@through` excluded; `@onDelete`/`@onUpdate` are **registered on `identity.reference`** in all five ports (ADR-0047 — the ADR-0023 justification is that a reference-only FK and an M:N junction's FKs correlate with no relationship *by construction*). Pin `@onDelete: "no-action"` to keep current DB behaviour. Both are corrections of previously-wrong behaviour rather than contract changes, which is why this is a PATCH — the same call, on the same defect class, as the Java `LIKE` fix in 0.21.4. Also: the **ts-poet split-tree duplicate-import fix** (with a globally-installed or linked CLI, two physical ts-poet copies made `instanceof Code` fail across module instances, so each section stringified with its own import header — `npx tsc` reported TS2300; fixed at three layers, including a CLI alias that repairs existing scaffolds without re-scaffolding); **four adopter-audit blind-spot closures** — the persistence corpus could not see a port ignoring `sort`/`limit`/`offset` (all 24 fixtures sorted `id asc` over ascending-id seeds) or `in` combined with a second predicate, **55** vacuous `rejects.toThrow()` assertions (the sweep unmasked a real `BlockedChangesError` hint bug), the documented `like: "%@example.com"` example that always 400s, and nullable projection PKs; and **the Angular tier is source-only by decision** (ADR-0048) with a 6-point promotion bar, after an assessment found its grid's cell-renderer registry decorative and its codegen missing the endpoint guards and descriptor split the TanStack tier has. **ADR numbering:** three parallel agents each wrote `ADR-0047`; referential-actions KEEPS it because that string is baked into byte-gated registry attr descriptions, and the two documentation-only decisions renumbered to 0048/0049. See `CHANGELOG.md` [0.21.6].
2325

2426
**The `0.21.5` line is a coordinated PATCH across all four registries** (npm `0.21.5` · PyPI `0.21.5` · NuGet `0.21.5` · Maven `7.21.5`) — ten fixes; PyPI/NuGet/Maven are version-parity bumps. The theme is **a package promising a compatibility it never had.** (1) **Every peer range was unbounded `>=`.** `@tanstack/react-table: ">=8.20.0"` admitted **v9** — a rewrite that deleted `useReactTable`/`getCoreRowModel`, both imported by `entity-grid.tsx` — so a fresh install produced an unbundlable package with **no peer warning**; an adopting project hit it and pinned `^8.21.3` by hand. All ranges bounded (`drizzle-orm` was next: `1.0.0-rc.4` is published), gated by `scripts/check-peer-ranges.ts` — a range is unbounded exactly when it accepts `9999.0.0`. That gate reads **manifests** because a peer range is only exercised when a fresh resolver walks the registry, and this workspace pins its devDeps and freezes them in `bun.lock`. Also corrected `peerDependenciesMeta.optional`: **`react` was marked optional** on both React runtime packages while every entry hard-fails without it, suppressing the install warning that would have said so. (2) **`react-easy-crop` broke every non-Vite build** — an *optional* peer reachable from the package ROOT is fatal to webpack/Next/esbuild/Bun (bundlers resolve the whole graph before tree-shaking), so *any* consumer of generated forms failed; now a real dependency, still lazy-loaded. The cleaner `/image` subpath split is deferred to a MINOR — and the reusable lesson is that **a MINOR cannot reach the adopters a bug has already broken**, since `^0.21.x` will not resolve `0.22.0`. (3) **Instance artifacts for objects with no endpoint** — four generators emitted hooks/grids/forms for `object.value`, sourceless entities and sourceless projections; that output **never compiled** (TS2693 + TS2305 ×3), so there was nothing to regress. Fixed in the central guards via the routes tier's own #248 source predicate, deliberately NOT a subtype check. (4) **`meta init` left a project whose first `tsc` produced 94 errors** — no `"type": "module"` (npm writes `commonjs`; TS7 enables `verbatimModuleSyntax`) and no declaration of the ADR-0034 scaffold's own deps → **0**. (5) **Hono TPH routes returned and mutated OTHER subtypes' rows** (now fails closed — wrong data is worse than a missing endpoint) and **Hono write-through ignored its replica read view** (fixed via `readView`). (6) **`db.all(sql.raw(...))` 500'd on Postgres in BOTH read-only mounts** — `.all()` on the top-level db HANDLE, which `PgDatabase` lacks; needed a real dialect dispatch, and Fastify was broken here too despite being the reference for the *other* `.all()` shape. (7) **The UI tier asked a storage question** — gating on `hasAnyRdbSource` rather than "is there an endpoint?"; now one predicate (`servesReadApi`/`servesWriteApi`), the durable gate being that **no UI generator may name a storage predicate at all**. (8) **Drizzle out of browser bundles: 716 KB → 215 KB** via an additive `<Entity>.meta.ts` carrying just the descriptor (`/* @__PURE__ */` was tried and does not help). (9) The **Angular packages were documented as published but 404** — and the mechanism is gated now (`check-publish-intent.sh`): a non-private package on its OWN version line matches neither branch of the lockstep rule, so it is skipped by every release, silently and forever. **Known and NOT fixed** (listed in `CHANGELOG.md`): the scaffolded queries generator emits `import { eq }` three times so `npx tsc` reports TS2300 on a fresh project; cross-port `like` semantics contradict each other and the corpus is case-aligned *by construction* so it cannot see it (since RULED + fixed on main post-0.21.5: `like` is case-SENSITIVE SQL LIKE uniformly, ADR-0049 — TS's Postgres ILIKE dispatch and C#'s adapter ILike were the defects, the corpora are de-blinded with case-mismatched probes, and TS lowers sqlite `like` to GLOB to stay case-sensitive); parent-side `relationship.composition` loses its cascade while its `@onDelete` escape hatch is unregistered, so a model that migrates cleanly fails strict `verify`. See `CHANGELOG.md` [0.21.5].
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.21.5` (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.6` (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
@@ -266,7 +266,7 @@ How to publish the `MetaObjects*` C# packages to nuget.org. We use **Trusted Pub
266266

267267
## What gets published
268268

269-
Four packages, version-locked at the C# port version (currently `0.21.5`):
269+
Four packages, version-locked at the C# port version (currently `0.21.6`):
270270

271271
| Package | Contents |
272272
|---|---|
@@ -358,7 +358,7 @@ How to publish the **`metaobjects`** Python package to PyPI via **Trusted Publis
358358
## What gets published
359359

360360
One package, `metaobjects` (version in [`server/python/pyproject.toml`](../server/python/pyproject.toml),
361-
currently `0.21.5`), as an **sdist + a universal `py3-none-any` wheel** (pure Python).
361+
currently `0.21.6`), as an **sdist + a universal `py3-none-any` wheel** (pure Python).
362362

363363
## How we publish: Trusted Publishing (OIDC)
364364

@@ -414,7 +414,7 @@ subsequent releases keyless.)
414414
# Releasing the Java/Kotlin modules to Maven Central
415415

416416
The 18 `com.metaobjects:*` modules ship to **Maven Central via the Sonatype Central Portal**,
417-
versioned on the `7.x` line (currently `7.21.5`) in the parent + module poms. Signed with the
417+
versioned on the `7.x` line (currently `7.21.6`) in the parent + module poms. Signed with the
418418
maintainer's GPG key.
419419

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