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
cd ../render && bun test test/render-conformance.test.ts test/verify-conformance.test.ts test/extract/extract-conformance.test.ts test/output-prompt-conformance.test.ts
@@ -83,8 +83,9 @@ jobs:
83
83
# ("No type registered for: field.uuid") when the render module's tests
Copy file name to clipboardExpand all lines: CLAUDE.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
@@ -406,7 +406,7 @@ import { CurrencyInput } from "@metaobjectsdev/react";
406
406
407
407
Preserve the following contracts exactly across all language ports:
408
408
409
-
**Metamodel subtype vocabularies (must be identical across languages):** the `registry-conformance` gate (`fixtures/registry-conformance/`) is the structural enforcer of this rule — each port emits its registry as a canonical manifest byte-matched to `expected-registry.json`(TS/C#/Pythonlive + green; Java/Kotlin gated pending reconciliation). See `fixtures/registry-conformance/README.md`.
409
+
**Metamodel subtype vocabularies (must be identical across languages):** the `registry-conformance` gate (`fixtures/registry-conformance/`) is the structural enforcer of this rule — each port emits its registry as a canonical manifest byte-matched to `expected-registry.json`. **All five ports (TS / C# / Java / Kotlin / Python) are live + green** (SP-G Java/Kotlin reconciliation complete; the JVM runners compose from the defined metamodel provider set so codegen-base/om classpath SPI does not pollute the measured vocabulary). See `fixtures/registry-conformance/README.md`.
- Source subtypes: `rdb` (paradigm; ADR-0007). The pre-v2 `dbTable`/`dbView` subtypes are RETIRED — `source.rdb` + `@kind: table|view|materializedView|storedProc|tableFunction` is the form, with read-only-ness derived from `@kind`. Multi-source via `@role` (exactly one `primary` per object). Source physical name = `@table` (NOT `@name`); field physical name = `@column` (renamed from `@dbColumn`). Referential actions on relationships: `@onDelete` / `@onUpdate`.
| Java |**gated (`@Ignore`)**— Phase-2 vocabulary divergence |`metadata/src/test/java/com/metaobjects/registry/RegistryManifestConformanceTest.java`|n/a — intentionally NOT in the scoped`-Dtest=` list while gated|
203
-
| Kotlin |**gated (`@Disabled`)**— shares the Java JVM registry|`codegen-kotlin/src/test/kotlin/com/metaobjects/generator/kotlin/RegistryManifestConformanceTest.kt`|n/a — intentionally NOT in the scoped`-Dtest=` list while gated|
202
+
| Java |**live + green**(byte-identical; reconciled SP-G Units 4-7, gate re-enabled Unit 8) |`metadata/src/test/java/com/metaobjects/registry/RegistryManifestConformanceTest.java`|`conformance` job, `java` matrix leg (in the metadata`-Dtest=` list)|
203
+
| Kotlin |**live + green**(byte-identical; composes the metamodel provider set)|`codegen-kotlin/src/test/kotlin/com/metaobjects/generator/kotlin/RegistryManifestConformanceTest.kt`|`conformance-kotlin` job (in the codegen-kotlin`-Dtest=` list)|
204
204
205
-
The three live ports (TS / C# / Python) genuinely run on every CI build (`.github/workflows/conformance.yml`, `conformance` job). The Java + Kotlin runners are wired and compile, but their assertions are `@Ignore`/`@Disabled` pending the Java metamodel-vocabulary reconciliation (tracked as a dedicated follow-on; see the **divergence analysis**:
205
+
All five ports now genuinely run the gate on every CI build (`.github/workflows/conformance.yml`). TS / C# / Python were live from the start; Java + Kotlin were re-enabled in SP-G Unit 8 after the Java metamodel-vocabulary reconciliation (Units 4-7) landed (see the **divergence analysis**:
206
206
[`docs/superpowers/specs/2026-06-02-sp-g-java-registry-divergence-analysis.md`](../../docs/superpowers/specs/2026-06-02-sp-g-java-registry-divergence-analysis.md) and the
207
-
[reconciliation plan](../../docs/superpowers/plans/2026-06-02-sp-g-java-reconciliation-plan.md)). They are left out of the Java/Kotlin scoped `-Dtest=` lists so they neither run nor error — re-add them (and drop the annotation) once the reconciliation lands.
Copy file name to clipboardExpand all lines: server/java/codegen-kotlin/src/test/kotlin/com/metaobjects/generator/kotlin/RegistryManifestConformanceTest.kt
+29-23Lines changed: 29 additions & 23 deletions
Original file line number
Diff line number
Diff line change
@@ -1,50 +1,56 @@
1
1
packagecom.metaobjects.generator.kotlin
2
2
3
-
importcom.metaobjects.registry.MetaDataRegistry
4
3
importcom.metaobjects.registry.RegistryManifest
5
4
importjava.nio.charset.StandardCharsets
6
5
importjava.nio.file.Files
7
6
importjava.nio.file.Path
8
7
importkotlin.test.Test
9
8
importkotlin.test.assertEquals
10
9
importkotlin.test.assertTrue
11
-
importorg.junit.jupiter.api.Disabled
12
10
13
11
/**
14
12
* SP-G Registry Conformance — the Kotlin runner.
15
13
*
16
-
* Kotlin runs on the JVM and REUSES the shared Java [MetaDataRegistry] and the Java
17
-
* [RegistryManifest] emitter (the same classes the Java runner validates). This test obtains
18
-
* the shared JVM registry and asserts the emitted manifest is byte-identical to the single
19
-
* committed canonical `fixtures/registry-conformance/expected-registry.json` — proving the
20
-
* JVM-view of the registry matches the cross-port contract from the Kotlin module too.
14
+
* Kotlin runs on the JVM and REUSES the shared Java [RegistryManifest] emitter (the same
15
+
* class the Java runner validates). This test composes a registry from the DEFINED metamodel
16
+
* provider set ([RegistryManifest.composeMetamodelRegistry]) and asserts the emitted manifest
17
+
* is byte-identical to the single committed canonical
18
+
* `fixtures/registry-conformance/expected-registry.json` — proving the metamodel vocabulary
19
+
* matches the cross-port contract from the Kotlin module too.
21
20
*
22
-
* Byte-identity to the Java runner holds by construction (same registry, same emitter); the
23
-
* value here is the gate existing in the Kotlin module's test surface as well.
21
+
* It composes from the metamodel provider set rather than the process-global
22
+
* `MetaDataRegistry.getInstance()` ON PURPOSE: this module's test classpath also carries the
23
+
* `om` + `codegen-base` SPI providers, which register an extra `object.managed` subtype and
24
+
* ~22 codegen-tooling attrs (`ai*`/`json*`/`has*`, self-registered by the doc generators).
25
+
* Those are per-port codegen tooling, not the cross-port logical metamodel vocabulary this
26
+
* gate measures. Composing from the defined provider set makes this runner measure exactly
27
+
* what the metadata-module runner does — immune to classpath pollution while still catching
28
+
* real metamodel-vocabulary drift. See `fixtures/registry-conformance/README.md`.
29
+
*
30
+
* Byte-identity to the Java runner holds by construction (same provider set, same emitter);
31
+
* the value here is the gate existing in the Kotlin module's test surface as well.
24
32
*
25
33
* Like the Java runner, this is a drift-finding gate: any mismatch is a real divergence
26
34
* between the JVM metamodel registry's logical vocabulary and the cross-port canonical. Fix
27
35
* the Java registration to match the canonical (TS is the reference) — do NOT loosen the
28
36
* canonical. Escalate if TS itself is wrong versus the documented vocabulary.
29
-
*
30
-
* `@Disabled` — ESCALATED, same root cause as the Java runner
31
-
* (`com.metaobjects.registry.RegistryManifestConformanceTest`): the shared JVM registry's
32
-
* attribute vocabulary diverges pervasively from the cross-port canonical that TS, C#, and
33
-
* Python agree on. See that Java test's Javadoc for the full divergence inventory. The
34
-
* canonical is correct and is NOT edited; re-enable once the Java vocabulary reconciliation
0 commit comments