Skip to content

Commit 9d77aa1

Browse files
dmealingclaude
andcommitted
Merge origin/main: integrate consolidation + Phase B; preserve migrate-ts reference-snapshot work
Local main diverged at the R6-Plan-2 merge and accumulated 11 commits (migrate-ts reference-snapshot foundation + an omdb view-auto-creation removal) while origin advanced 88 commits (schema-authority consolidation, normalization-conformance Phase B, flavored-object codegen). Conflict resolution: the omdb schema-bootstrap layer evolved divergently. origin/main is authoritative (validator service removed; the Java integration suite provisions schema from the canonical DDL). Took origin/main's version for the entire omdb surface the local view-removal commit touched (12 files) and accepted its deletion of the validator service, keeping that layer internally consistent. The migrate-ts reference-snapshot commits merged cleanly and are preserved. The local view-auto-creation cleanup is superseded by origin's consolidation; it can be re-done against the new base as a small follow-up. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2 parents 389b87a + 0689220 commit 9d77aa1

312 files changed

Lines changed: 16488 additions & 8461 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/conformance.yml

Lines changed: 53 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,22 +43,70 @@ jobs:
4343

4444
- name: TypeScript conformance
4545
if: matrix.language == 'typescript'
46-
run: bun install && cd server/typescript/packages/metadata && bun test test/conformance.test.ts test/yaml-conformance.test.ts
46+
run: |
47+
bun install
48+
# Loader + YAML + object-model corpora (packages/metadata).
49+
cd server/typescript/packages/metadata && bun test test/conformance.test.ts test/yaml-conformance.test.ts test/object-model-conformance.test.ts
50+
# Byte-exact render / verify / recover / output-prompt corpora (packages/render).
51+
cd ../render && bun test test/render-conformance.test.ts test/verify-conformance.test.ts test/recover/recover-conformance.test.ts test/output-prompt-conformance.test.ts
4752
4853
- name: C# conformance
4954
if: matrix.language == 'csharp'
50-
run: cd server/csharp && dotnet test MetaObjects.Conformance.Tests/MetaObjects.Conformance.Tests.csproj --nologo --verbosity quiet
55+
run: |
56+
# Loader + YAML + object-model corpora (Conformance.Tests project).
57+
cd server/csharp && dotnet test MetaObjects.Conformance.Tests/MetaObjects.Conformance.Tests.csproj --nologo --verbosity quiet
58+
# Byte-exact render / verify / recover / output-prompt corpora (Render.Tests project).
59+
dotnet test MetaObjects.Render.Tests/MetaObjects.Render.Tests.csproj --nologo --verbosity quiet
5160
5261
- name: Java conformance
5362
if: matrix.language == 'java'
54-
run: cd server/java && mvn -pl metadata test -Dtest='ConformanceTest,YamlConformanceTest' -q
63+
run: |
64+
cd server/java
65+
# Install metadata + render first to avoid the SNAPSHOT-resolution race
66+
# ("No type registered for: field.uuid") when the render module's tests
67+
# reference the freshly-built metadata artifact.
68+
mvn -pl metadata,render -am install -DskipTests -q
69+
# Loader + YAML + object-model corpora (metadata module).
70+
mvn -pl metadata test -Dtest='ConformanceTest,YamlConformanceTest,ObjectModelConformanceTest' -q
71+
# Byte-exact render / verify / recover / output-prompt corpora (render module).
72+
mvn -pl render test -Dtest='RenderCrossPortReportTest,VerifyConformanceTest,RecoverConformanceTest,OutputPromptConformanceTest' -q
5573
5674
- name: Python conformance
5775
if: matrix.language == 'python'
58-
run: cd server/python && uv run pytest tests/conformance -q
76+
run: |
77+
cd server/python
78+
# Loader + YAML corpora.
79+
uv run pytest tests/conformance -q
80+
# Byte-exact render / verify / recover / output-prompt corpora.
81+
uv run pytest tests/render -q
82+
83+
conformance-kotlin:
84+
# Kotlin (codegen-kotlin, KotlinPoet on the JVM) ships no loader / YAML /
85+
# render / verify of its own — it reuses the shared JVM render engine. It
86+
# runs only the corpora it actually has: object-model + output-prompt.
87+
needs: fixture-lint
88+
runs-on: ubuntu-latest
89+
steps:
90+
- uses: actions/checkout@v4
91+
92+
- name: Set up JDK
93+
uses: actions/setup-java@v4
94+
with:
95+
distribution: 'temurin'
96+
java-version: '21'
97+
98+
- name: Kotlin conformance
99+
run: |
100+
cd server/java
101+
# Build the metadata/render/codegen-kotlin chain first to avoid the
102+
# SNAPSHOT-resolution race when the test module references freshly-built
103+
# artifacts.
104+
mvn -pl codegen-kotlin -am install -DskipTests -q
105+
# object-model + output-prompt corpora (the only corpora Kotlin has).
106+
mvn -pl codegen-kotlin test -Dtest='ObjectModelConformanceTest,OutputPromptConformanceTest' -q
59107
60108
completeness-gate:
61-
needs: conformance
109+
needs: [conformance, conformance-kotlin]
62110
runs-on: ubuntu-latest
63111
steps:
64112
- uses: actions/checkout@v4

.github/workflows/integration-tests.yml

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,22 @@ name: integration-tests
66
# run in parallel; any port red blocks the gate.
77
#
88
# Triggers:
9-
# - pull_request to `main` — gates the default branch so persistence/api-contract
9+
# - pull_request (any target branch) — gates every PR so persistence/api-contract
1010
# drift can't merge green (these corpora are not covered by conformance.yml).
11+
# - push to `main` — guards the default branch directly (e.g. forward-merges that
12+
# land on main without going through a PR).
1113
# - tag push matching v* (release gate, per docs/RELEASING.md).
1214
# - manual dispatch (workflow_dispatch).
13-
# NOTE: this runs a 5-port Testcontainers matrix; if main-PR CI cost is too high,
14-
# narrow `pull_request.branches` or re-introduce an opt-in label.
15+
# NOTE: this runs a 5-port Testcontainers matrix on every PR; if CI cost is too
16+
# high, narrow `pull_request.branches` or re-introduce an opt-in label.
1517

1618
on:
1719
push:
20+
branches:
21+
- main
1822
tags:
1923
- 'v*'
2024
pull_request:
21-
branches: [main]
2225
workflow_dispatch:
2326

2427
jobs:

CLAUDE.md

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

1818
## Status
1919

20-
_Last refreshed 2026-05-27._
20+
_Last refreshed 2026-05-30._
2121

2222
**TypeScript reference implementation** is **published to npm at `0.7.0-rc.2`** (`@metaobjectsdev/*` packages, 12 packages on the `latest` tag). 2500+ tests passing across the workspace.
2323

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

2626
- **TypeScript**`codegen-ts` (Vite-style plugins; Drizzle, Zod, Fastify) + `runtime-ts` + `migrate-ts` + the universal web client packages (`runtime-web`, `react`, `tanstack`).
27-
- **C#**`MetaObjects` (loader + canonical serializer + conformance) + `MetaObjects.Render` (Mustache + payload-VO + `verify`) + `MetaObjects.Codegen` (EF Core entities + `AppDbContext` + CRUD minimal-API routes + Postgres DDL via full-CREATE and incremental introspect/diff/migrate). The `meta` CLI (`verify`/`gen`/`migrate`/`--from-db`) is the entry point.
28-
- **Java**`metadata` + `omdb` + `om` + `dynamic` + `core-spring` + `metadata-ktx` (Kotlin facade) + `codegen-spring` (Spring controllers + DTOs + repositories + filter allowlists + payload records + output parsers) + `codegen-mustache` + `codegen-plantuml` + `render` + `maven-plugin` (`meta:gen`/`meta:editor`). FR-003 (OMDB runtime persistence + binding registry + typed jsonb + Spring-tx + source/origin metamodel) fully shipped, including Plan 4 (engine-debt remediation: atomic mapping cache, JDBC codec registry, `inTransaction` template). **Schema migrations are owned by the TypeScript toolchain** (`@metaobjectsdev/cli migrate`); the Java port's diff-and-converge migration engine and its `meta:migrate` / live-DB-drift `meta:verify` Maven goals were removed — OMDB retains runtime persistence + a dev/test runtime auto-create path (`MetaClassDBValidatorService` + the drivers' legacy `createTable` DDL) only.
29-
- **Python**`metaobjects` (loader + canonical serializer + conformance + render + verify + codegen) + `migrate` + an `ObjectManager` runtime layer. All five conformance corpora green.
27+
- **C#**`MetaObjects` (loader + canonical serializer + conformance) + `MetaObjects.Render` (Mustache + payload-VO + `verify`) + `MetaObjects.Codegen` (EF Core entities + `AppDbContext` + CRUD minimal-API routes). Schema migrations are TS-owned (ADR-0015): the C# migrate engine and the `migrate`/`--from-db` CLI surface were removed; the C# `meta` CLI is `verify`/`gen` only. EF Core runtime data-access stays per-port.
28+
- **Java** — `metadata` + `omdb` + `om` + `dynamic` + `core-spring` + `metadata-ktx` (Kotlin facade) + `codegen-spring` (Spring controllers + DTOs + repositories + filter allowlists + payload records + output parsers) + `codegen-mustache` + `codegen-plantuml` + `render` + `maven-plugin` (`meta:gen`/`meta:editor`). FR-003 (OMDB runtime persistence + binding registry + typed jsonb + Spring-tx + source/origin metamodel) fully shipped, including Plan 4 (engine-debt remediation: atomic mapping cache, JDBC codec registry, `inTransaction` template). **Schema migrations are owned by the TypeScript toolchain** (`@metaobjectsdev/cli migrate`); the Java port's diff-and-converge migration engine and its `meta:migrate` / live-DB-drift `meta:verify` Maven goals were removed, and per ADR-0015 Decision 2 the dev/test runtime auto-create path (`MetaClassDBValidatorService` + the drivers' `createTable`/`createIndex`/`createForeignKey`/`createSequence` DDL) is **also** removed — **OMDB is pure data-access** (CRUD/query/codec/transactions only).
29+
- **Python**`metaobjects` (loader + canonical serializer + conformance + render + verify + codegen) + an `ObjectManager` runtime layer. The `migrate` module was removed (schema is TS-owned, ADR-0015); Python is pure data-access (codegen + ObjectManager runtime). All five conformance corpora green.
3030
- **Kotlin**`codegen-kotlin` (KotlinPoet on JVM): entity + Exposed table + Spring controller + payload + relations + filter allowlist + validator + stored-proc + output-parser generators. `integration-tests-kotlin` runs the persistence-conformance corpus through Exposed against Testcontainers Postgres.
3131

3232
**Cross-port conformance corpora** (every port runs the shared corpus):
3333
- Metamodel: `fixtures/conformance/` (~90 fixtures). TS / C# / Java / Python all green.
3434
- Render: `fixtures/render-conformance/`. TS / C# / Java / Kotlin / Python byte-identical.
35-
- Persistence: `fixtures/persistence-conformance/`. TS / C# / Java / Kotlin / Python all 12/12 against Testcontainers Postgres / Derby.
35+
- 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).
3636
- API-contract: `fixtures/api-contract-conformance/`. TS / C# / Java / Kotlin / Python all 20/20.
3737
- YAML / verify corpora green across the ports that ship those layers.
3838

bun.lock

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)