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
{{ message }}
Repository navigation
Commit 78fbf90
Browse filesBrowse the repository at this point in the historyBrowse files
feat(metamodel): value objects may carry navigation-only references (ADR-0046, #238)
A non-persisted shape (API DTO, event payload, wire-protocol message) can now
declare that a field references an entity, via the chartered navigation-only
reference form: an `object.value` may carry an `identity.reference` with explicit
`@enforce: false`. The loader resolves the `@references` target (dangling →
ERR_INVALID_REFERENCE) and codegen emits no FK/DDL; a value's own identity
(primary/secondary) and any enforced reference stay banned (ERR_SUBTYPE_RULE_VIOLATION).
Zero new registry vocabulary — a child-licensing relaxation (ADR-0037 step 0), so
registry-conformance is unaffected and existing `meta gen` output is byte-identical.
Also closes the M:N junction guard this unmasks: value purity used to implicitly
guarantee a `@through` junction was an entity (a value couldn't hold references);
the `@through` validation now explicitly requires the junction resolve to an
object.entity (ERR_INVALID_RELATIONSHIP otherwise) — a junction is a physical join table.
Cross-port loader change (TS/Java/Python/C#; Kotlin inherits the JVM loader), gated
by four new shared conformance fixtures. All four ports green on the metamodel
conformance corpus (TS 498, Java 498, C# 816, Python 253).
Surfaced by a reference-impl consumer modeling a wire protocol as MetaObjects.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014xy8powhHYJ6gfFt9Ut8dL
**npm `0.20.2` only** (NuGet `0.19.3` / PyPI `0.19.5` / Maven Central `7.11.3` unchanged — no changed product file; D1 is a TS-only dialect). A bug-fix patch, no API or vocabulary change.
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
@@ -30,7 +30,7 @@ _Last refreshed 2026-07-25._
30
30
-**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.
31
31
32
32
**Cross-port conformance corpora** (every port runs the shared corpus):
33
-
- Metamodel: `fixtures/conformance/` (249 fixtures; 19 shared corpora in total — per-corpus counts + the corpus x port matrix live in `docs/CONFORMANCE.md`). TS / C# / Java / Python all green.
33
+
- Metamodel: `fixtures/conformance/` (253 fixtures; 19 shared corpora in total — per-corpus counts + the corpus x port matrix live in `docs/CONFORMANCE.md`). TS / C# / Java / Python all green.
- 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
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.
0 commit comments