Skip to content

Commit dbc4b24

Browse files
dmealingclaude
andcommitted
docs(release): propagate 0.16.0 / 7.8.0 version refs (FR-036 coordinated release)
Bump the current-shipping-version references to the coordinated FR-036 line (npm/PyPI/NuGet 0.16.0 · Maven Central 7.8.0) across README, the llms.txt / llms-full.txt LLM guides, docs/ports/typescript.md, and the CLAUDE.md Status (lead version declaration + a concise FR-036 breaking summary + current-release line 0.16.x / 7.8.x). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NGQ7oSuNcjhsMHWwZzhBwr
1 parent ca54fa0 commit dbc4b24

5 files changed

Lines changed: 21 additions & 21 deletions

File tree

CLAUDE.md

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

1818
## Status
1919

20-
_Last refreshed 2026-07-13._
20+
_Last refreshed 2026-07-14._
2121

22-
**TypeScript reference implementation** is **published to npm at `0.15.21`** (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.15.10` (NuGet); Python at `0.15.13` (PyPI — stays a patch ahead on the same line); Java / Kotlin at `7.7.11` (Maven Central). **The `0.15.21` / `7.7.11` line is a bug-fix release** (npm `0.15.21` · PyPI `0.15.13` · Maven `7.7.11`; **NuGet unchanged at `0.15.10`** — the C# port needed no fix and was the reference the other three were corrected against). No metadata changes, no new vocabulary. It closes a family of migrate-engine defects that were destructive or silent: a **wrong-row write/delete** in every writable mount (a numeric-looking string id on a TEXT/uuid PK hit a *different* row); **every incremental `meta migrate` rebuilding every uuid-PK table**; `@autoSet` emitting `DEFAULT now()` on SQLite/D1 (**un-appliable migration**); `field.enum @values` changes **never migrating** on SQLite (stale CHECK → production insert failures); the SQLite emitter **dropping index `@expr`/`@where`/`@orders`** (a partial-UNIQUE silently becoming fully UNIQUE); an **auto-allowed `drop-view`**; `@kind: storedProc` projections **crashing `meta migrate`**; and quoted boolean defaults stored as TEXT so `= 0` matched nothing. It also fixes **hardcoded primary-key types in the Java, Kotlin and Python generators** — a `@generation: uuid` entity got broken output (Kotlin's **did not compile**) while its own DTO correctly used UUID. Every migrate fix is now gated by an `emit → apply to a real engine → introspect → re-diff must be EMPTY` round-trip plus value-semantics probes; the absence of that gate (nothing ever ran the pipeline twice against a real DB) is what let the class survive 5000+ tests. The prior **`0.15.19` / `7.7.9` line was a coordinated release across all four registries** (additive, non-breaking): `origin.aggregate @filter` (a scoping filter — an `attr.filter` object — rendered as SQL `FILTER (WHERE …)` / SQLite `CASE WHEN`) is now registered in all five ports + registry-conformance (with an `origin-aggregate-filtered` fixture), closing the "projections can't express my scoped aggregate" gap; and the agent-context skills + docs make the projection/DB-view contract explicit — a projection's `CREATE VIEW` is generated from its `origin.*` children, so a hand-written view is drift (and, being unmanaged, invisible to `meta verify --db`), with the "custom SQL views" hand-write exception bounded to genuinely-irreducible views, a new audit view-necessity signature + a **VOCAB CANDIDATE** new-subtype-opportunity hunt, and a new `docs/features/downstream-metadata-decisions.md` adopter guide. **npm `0.15.18` was an npm-only, non-breaking patch on top of the coordinated `0.15.17` line** (PyPI/NuGet/Maven unchanged — TS-only fixes; advances the 1.0 quiet period): the `codegen-ts` `promptRender` **FQN `@objectRef` fix** (a prompt payload value-object nesting an `@objectRef` to another value-object emitted invalid `pkg::Name` TypeScript — now package-stripped to the bare name, matching `entityFile`) plus a batch of **agent-context skills fixes** (four of six `metaobjects-*` skills had invalid YAML front-matter so they never intent-triggered; wrong C# reference flags; the reference-fragment install reverted from deploy-all to stack-scoped; deprecated `codegen-ts/generators` imports + singular tanstack paths; ADR-0040 `index.lookup` vocabulary; and a stale Kotlin fixture that had left `agent-context-conformance` red on `main`). A cross-port hunt confirmed the `promptRender` FQN leak was **TS-only** (Java/C#/Kotlin/Python payload codegen already strip); PR #190 added the missing Python + Kotlin regression tests. The `0.15.17` line is a coordinated release across all four registries: (1) **BREAKING — `origin.passthrough` is type-preserving** (a passthrough field must match its `@from` source's `field.<subType>` + array-ness or fail load with `ERR_PASSTHROUGH_TYPE_MISMATCH`; opt out with `@convert: true`; retires the narrow `ERR_PARAMETER_REF_PASSTHROUGH_TYPE_MISMATCH`) (#185/#186); (2) **typed value-object jsonb columns end-to-end all ports** — single + `@isArray` array-of-VO round-trip through every port's write/read codec; Kotlin codegen moved off kotlinx `@Serializable` to a generated per-package Jackson `MetaJsonbMapper` (no serialization compiler plugin), C#/Java/Python array-of-VO codecs fixed (#187); (3) **load-order-independent super-resolution** — a dotted `extends: Owner.member` to an inherited member now resolves regardless of file load order (was a Node-vs-Bun `readdir` build-portability bug) via on-demand memoized resolution (#188/#189). The `0.15.6` line is a coordinated cross-port loader-ordering fix (all four registries bumped together): an overlay-only file could be merged *before* the base file declaring the entity it re-opens, so an `object.projection` overlay re-open (and any overlay reaching a not-yet-loaded `extends`/`origin` target) failed super-resolution with spurious `ERR_INVALID_ORIGIN` / `ERR_UNRESOLVED_SUPER` / `ERR_MISSING_REQUIRED_ATTR` — surfacing as a TS-vs-Python divergence but latent in every port. Each loader now stable-partitions overlay-only sources/roots to merge last, deterministically, cross-port conformance-gated (`projection-overlay-abstract-identity`) (#160). The prior `0.15.5` / PyPI `0.15.6` line shipped two consumer-provider CLI fixes (offline `meta migrate` now threads `metaobjects.config.ts` providers #157; a Python `metaobjects … --provider module:symbol` hook #158). The `0.15.4` line fixes cross-package same-name root nodes being wrongly merged by the TS/C#/Python loaders (#155). 2500+ tests passing across the workspace. (The `0.15.1` / `7.7.1` line shipped the **`index.*` type + `identity.secondary` key-purity** [ADR-0040]: `identity.secondary` is now a *unique* alternate key with `@unique` **removed** — a legacy `@unique` fails load with `ERR_UNKNOWN_ATTR` — and a new **`index.lookup`** subtype carries *non-unique* retrieval [`@fields` required; `@using`/`@expr`/`@where`/`@orders` are RDB-physical escapes], cross-port conformance-gated; **breaking**, migration in `docs/features/migrations/identity-secondary-to-index-lookup.md`. This is on top of the `0.15.0` metamodel-1.0 vocabulary program + the ADR-0039 own-accessor fix.)
22+
**TypeScript reference implementation** is **published to npm at `0.16.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.16.0` (NuGet); Python at `0.16.0` (PyPI); Java / Kotlin at `7.8.0` (Maven Central). **The `0.16.0` / `7.8.0` line is a coordinated BREAKING release (FR-036)** bundling the held **FR-035 present-key PATCH tristate** (absent≠null: absent→untouched / present-null→clears / present-null-on-`@required`→400) with **FR-036 cross-port constraint-validation enforcement + semantic pins**: `@required` string = NON-EMPTY (reject `null`/`""`, accept whitespace); `validator.regex @pattern` = FULL-MATCH; `@maxLength`×`validator.length @max` = strictest-wins; **C# and Python now ENFORCE field constraints over HTTP** (both were decorative at the wire tier); POST + PATCH validate present values on all five ports, **vanilla AND TPH per-subtype**. A missing `@required` value-type POST now 400s everywhere; a server-defaulted/`@autoSet`/auto-gen-PK `@required` field is correctly optional on POST. All conformance-gated (validation-conformance + api-contract, both lanes) — an xhigh review before release caught 11 cross-port divergences, all fixed + gated. See `CHANGELOG.md` [0.16.0]. **The prior `0.15.21` / `7.7.11` line was a bug-fix release** (npm `0.15.21` · PyPI `0.15.13` · Maven `7.7.11`; **NuGet unchanged at `0.15.10`** — the C# port needed no fix and was the reference the other three were corrected against). No metadata changes, no new vocabulary. It closes a family of migrate-engine defects that were destructive or silent: a **wrong-row write/delete** in every writable mount (a numeric-looking string id on a TEXT/uuid PK hit a *different* row); **every incremental `meta migrate` rebuilding every uuid-PK table**; `@autoSet` emitting `DEFAULT now()` on SQLite/D1 (**un-appliable migration**); `field.enum @values` changes **never migrating** on SQLite (stale CHECK → production insert failures); the SQLite emitter **dropping index `@expr`/`@where`/`@orders`** (a partial-UNIQUE silently becoming fully UNIQUE); an **auto-allowed `drop-view`**; `@kind: storedProc` projections **crashing `meta migrate`**; and quoted boolean defaults stored as TEXT so `= 0` matched nothing. It also fixes **hardcoded primary-key types in the Java, Kotlin and Python generators** — a `@generation: uuid` entity got broken output (Kotlin's **did not compile**) while its own DTO correctly used UUID. Every migrate fix is now gated by an `emit → apply to a real engine → introspect → re-diff must be EMPTY` round-trip plus value-semantics probes; the absence of that gate (nothing ever ran the pipeline twice against a real DB) is what let the class survive 5000+ tests. The prior **`0.15.19` / `7.7.9` line was a coordinated release across all four registries** (additive, non-breaking): `origin.aggregate @filter` (a scoping filter — an `attr.filter` object — rendered as SQL `FILTER (WHERE …)` / SQLite `CASE WHEN`) is now registered in all five ports + registry-conformance (with an `origin-aggregate-filtered` fixture), closing the "projections can't express my scoped aggregate" gap; and the agent-context skills + docs make the projection/DB-view contract explicit — a projection's `CREATE VIEW` is generated from its `origin.*` children, so a hand-written view is drift (and, being unmanaged, invisible to `meta verify --db`), with the "custom SQL views" hand-write exception bounded to genuinely-irreducible views, a new audit view-necessity signature + a **VOCAB CANDIDATE** new-subtype-opportunity hunt, and a new `docs/features/downstream-metadata-decisions.md` adopter guide. **npm `0.15.18` was an npm-only, non-breaking patch on top of the coordinated `0.15.17` line** (PyPI/NuGet/Maven unchanged — TS-only fixes; advances the 1.0 quiet period): the `codegen-ts` `promptRender` **FQN `@objectRef` fix** (a prompt payload value-object nesting an `@objectRef` to another value-object emitted invalid `pkg::Name` TypeScript — now package-stripped to the bare name, matching `entityFile`) plus a batch of **agent-context skills fixes** (four of six `metaobjects-*` skills had invalid YAML front-matter so they never intent-triggered; wrong C# reference flags; the reference-fragment install reverted from deploy-all to stack-scoped; deprecated `codegen-ts/generators` imports + singular tanstack paths; ADR-0040 `index.lookup` vocabulary; and a stale Kotlin fixture that had left `agent-context-conformance` red on `main`). A cross-port hunt confirmed the `promptRender` FQN leak was **TS-only** (Java/C#/Kotlin/Python payload codegen already strip); PR #190 added the missing Python + Kotlin regression tests. The `0.15.17` line is a coordinated release across all four registries: (1) **BREAKING — `origin.passthrough` is type-preserving** (a passthrough field must match its `@from` source's `field.<subType>` + array-ness or fail load with `ERR_PASSTHROUGH_TYPE_MISMATCH`; opt out with `@convert: true`; retires the narrow `ERR_PARAMETER_REF_PASSTHROUGH_TYPE_MISMATCH`) (#185/#186); (2) **typed value-object jsonb columns end-to-end all ports** — single + `@isArray` array-of-VO round-trip through every port's write/read codec; Kotlin codegen moved off kotlinx `@Serializable` to a generated per-package Jackson `MetaJsonbMapper` (no serialization compiler plugin), C#/Java/Python array-of-VO codecs fixed (#187); (3) **load-order-independent super-resolution** — a dotted `extends: Owner.member` to an inherited member now resolves regardless of file load order (was a Node-vs-Bun `readdir` build-portability bug) via on-demand memoized resolution (#188/#189). The `0.15.6` line is a coordinated cross-port loader-ordering fix (all four registries bumped together): an overlay-only file could be merged *before* the base file declaring the entity it re-opens, so an `object.projection` overlay re-open (and any overlay reaching a not-yet-loaded `extends`/`origin` target) failed super-resolution with spurious `ERR_INVALID_ORIGIN` / `ERR_UNRESOLVED_SUPER` / `ERR_MISSING_REQUIRED_ATTR` — surfacing as a TS-vs-Python divergence but latent in every port. Each loader now stable-partitions overlay-only sources/roots to merge last, deterministically, cross-port conformance-gated (`projection-overlay-abstract-identity`) (#160). The prior `0.15.5` / PyPI `0.15.6` line shipped two consumer-provider CLI fixes (offline `meta migrate` now threads `metaobjects.config.ts` providers #157; a Python `metaobjects … --provider module:symbol` hook #158). The `0.15.4` line fixes cross-package same-name root nodes being wrongly merged by the TS/C#/Python loaders (#155). 2500+ tests passing across the workspace. (The `0.15.1` / `7.7.1` line shipped the **`index.*` type + `identity.secondary` key-purity** [ADR-0040]: `identity.secondary` is now a *unique* alternate key with `@unique` **removed** — a legacy `@unique` fails load with `ERR_UNKNOWN_ATTR` — and a new **`index.lookup`** subtype carries *non-unique* retrieval [`@fields` required; `@using`/`@expr`/`@where`/`@orders` are RDB-physical escapes], cross-port conformance-gated; **breaking**, migration in `docs/features/migrations/identity-secondary-to-index-lookup.md`. This is on top of the `0.15.0` metamodel-1.0 vocabulary program + the ADR-0039 own-accessor fix.)
2323

2424
**All five ports ship loader + canonical serializer + conformance + codegen + render + payload-VO + `verify`:**
2525

@@ -38,7 +38,7 @@ _Last refreshed 2026-07-13._
3838

3939
**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).
4040

41-
**Current release line.** `0.15.x` (npm / NuGet / PyPI) · `7.7.x` (Maven Central). 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.
41+
**Current release line.** `0.16.x` (npm / NuGet / PyPI) · `7.8.x` (Maven Central). 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.
4242

4343
See `spec/roadmap.md` for the active + planned work picture.
4444

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ first-week wedge plan — and `meta init` picks up from there.
8686

8787
| Language | Status | Quickstart | Source |
8888
|---|---|---|---|
89-
| TypeScript | Published to npm at `0.15.21` (the `@metaobjectsdev/*` packages) | [`docs/ports/typescript.md`](docs/ports/typescript.md) | [`server/typescript/`](server/typescript/) · [`client/web/`](client/web/) |
89+
| TypeScript | Published to npm at `0.16.0` (the `@metaobjectsdev/*` packages) | [`docs/ports/typescript.md`](docs/ports/typescript.md) | [`server/typescript/`](server/typescript/) · [`client/web/`](client/web/) |
9090
| Java | Loader + OMDB + render + Maven plugin all shipped; full conformance green | [`docs/ports/java.md`](docs/ports/java.md) | [`server/java/`](server/java/) |
9191
| Kotlin | Codegen tier on top of Java — 7 generators (entity, Exposed table, relations, payload, validator, Spring config, storedProc); 12 / 12 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/) |
9292
| 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

Comments
 (0)