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
Hunt across the remaining public surfaces found more of the same class of issues
the port audits did — all verified against source:
README.md: Python codegen "@DataClass" → Pydantic + FastAPI; Java pillar
"POJO + OMDB" → Spring REST + DTO + repository; Kotlin "9 generators" → 14 and
"12/12" → "24/24"; removed the false "not yet wired" + broken `mvn -pl
integration-tests-kotlin test` (→ `scripts/integration-test.sh kotlin`); C#
`meta verify` → `dotnet meta verify`; `Renderer.verify` → `Verify.check`.
docs/features/api-contract.md: "Kotlin Ktor" → "Kotlin Spring" (the last of the
review's "self-contradicts 4×"); stale "20/20" scenario count → "full suite"; a
backwards cross-reference.
Recurring Python-SQLAlchemy overclaim removed: own-your-codegen.md, relationships.md,
docs/ports/python.md (Python codegen is Pydantic + FastAPI; the runtime is a shipped
DB-API-2 ObjectManager, not an in-progress SQLAlchemy ORM). CLAUDE.md "20/20" →
"green". entities.md MetaDataGenerator → MetaDataGeneratorMojo; extending-with-
providers.md stale version stamp removed.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XeGSV3StPCcJGZNNJ4ZfAb
- Persistence: `fixtures/persistence-conformance/`. **Query** scenarios run on every port (TS / C# / Java / Kotlin / Python), each provisioning its test DB by executing the committed, TS-produced `canonical/schema.postgres.sql` (Postgres only — Derby dropped for the cross-port query corpus, ADR-0015). The **migration** scenarios are exercised by **TS only** (TS owns schema migrations). **The corpus now gates WRITES, not just reads (SP-H):** an `op: roundtrip` scenario type INSERTs through each port's runtime/ORM write codec (NOT raw SQL), reads the row back, and asserts the wire-normalized value. The `AllTypes` entity (`roundtrip-all-types.yaml`) carries one field of **every** persistable `field.*` subtype — string/int/long/double/float/decimal/boolean/date/time/timestamp(+tz)/currency/enum/uuid/object — plus an **array-of-VO** `field.object @isArray @storage:jsonb` column (`labels`, written as 2-element / empty-`[]` / single-element arrays across the three rows) — so every subtype write+read (incl. the array-of-value-object jsonb codec) round-trips through every port against Testcontainers PG. (`field.byte`/`field.short`/`field.class` were cut as non-functional registration-only stubs — the matrix tracks only genuinely-supported subtypes; see `fixtures/registry-conformance/README.md` → "Per-subtype write-round-trip matrix".)
36
-
- API-contract: `fixtures/api-contract-conformance/`. TS / C# / Java / Kotlin / Python all 20/20 — each port runs **two lanes**: a hand-rolled reference server AND its **generated** API artifact booted over HTTP (the deployed controller/routes; TS+C# full-stack vs Testcontainers PG, Java/Kotlin/Python generated controller + in-memory repo behind the consumer seam). The generated fan-out found 10 real deployment bugs golden snapshots missed.
36
+
- API-contract: `fixtures/api-contract-conformance/`. TS / C# / Java / Kotlin / Python all green — each port runs **two lanes**: a hand-rolled reference server AND its **generated** API artifact booted over HTTP (the deployed controller/routes; TS+C# full-stack vs Testcontainers PG, Java/Kotlin/Python generated controller + in-memory repo behind the consumer seam). The generated fan-out found 10 real deployment bugs golden snapshots missed.
37
37
- YAML / verify corpora green across the ports that ship those layers.
38
38
39
39
**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).
Copy file name to clipboardExpand all lines: README.md
+7-8Lines changed: 7 additions & 8 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -88,7 +88,7 @@ first-week wedge plan — and `meta init` picks up from there.
88
88
|---|---|---|---|
89
89
| TypeScript | Published to npm at `0.20.0` (the `@metaobjectsdev/*` packages) |[`docs/ports/typescript.md`](docs/ports/typescript.md)|[`server/typescript/`](server/typescript/) · [`client/web/`](client/web/)|
90
90
| Java | Loader + OMDB + render + Maven plugin all shipped; full conformance green |[`docs/ports/java.md`](docs/ports/java.md)|[`server/java/`](server/java/)|
91
-
| Kotlin | Codegen tier on top of Java — 9 generators (entity, Exposed table, relations, payload, output-parser, validator, Spring config, storedProc, Spring controller); 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/)|
91
+
| 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/)|
92
92
| 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/)|
Copy file name to clipboardExpand all lines: docs/features/own-your-codegen.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
@@ -27,7 +27,7 @@ three-way-merges against a committed merge base, so your edits are preserved.
27
27
|**TypeScript**|`meta init` → `meta gen` (Bun/Node CLI) |**Scaffold-and-own** — `meta init` copies `entityFile`/`queriesFile`/`routesFile`/`barrel` into `codegen/generators/*.ts`; `metaobjects.config.ts` imports those local copies. Edit them freely. |
28
28
|**C#**|`dotnet meta gen` / `dotnet meta verify` (.NET tool) | Build-config: the generator set (EF Core entities + `AppDbContext` + CRUD routes) is selected via config; customize via template-spec. |
29
29
|**Java / Kotlin**|`mvn metaobjects:generate` / `mvn metaobjects:verify` (`metaobjects-maven-plugin`) | Build-config: generators selected in `pom.xml`, by **stable name** (`entity`/`routes`/…) through the `GeneratorRegistryProvider` ServiceLoader SPI. Kotlin generators run through the same goal. |
30
-
|**Python**|`metaobjects gen` / `metaobjects verify` (console-script) | Build-config: the generator set (Pydantic + FastAPI + SQLAlchemy) selected via config; customize via template-spec. |
30
+
|**Python**|`metaobjects gen` / `metaobjects verify` (console-script) | Build-config: the generator set (Pydantic + FastAPI) selected via config; customize via template-spec. |
31
31
32
32
*(Full command/flag matrix and rationale: [`docs/features/cli.md`](cli.md), locked per
33
33
ADR-0015. Schema migrations are TypeScript-owned across all ports.)*
0 commit comments