Skip to content

1.0.5-rc.1

Pre-release
Pre-release

Choose a tag to compare

@dmealing dmealing released this 16 Sep 15:54
· 485 commits to main since this release

Release candidate on all four registries.

Registry Version
npm 1.0.5-rc.1 — 14 packages, dist-tag next
PyPI 1.0.5rc1
NuGet 1.0.5-rc.1 — 4 packages
Maven Central 8.0.5-rc.1

metamodelVersion stays 1.0.

What it carries

The codegen-compile gate now runs in all five ports. Every corpus this project has gates BEHAVIOUR; none of them asked whether the emitted code builds. That is how four "generated code does not compile" defects shipped in 1.0.4 with the whole board green — gen exits 0 in all four cases and the adopter's build is the first thing that disagrees. Each port compiles the emitted tree with its real compiler (ts.createProgram / Roslyn / javac / KotlinCompilation / a Python import plus ruff F821).

The fan-out convicted nine further defects, all fixed here. The Java ones share a shape — the build stays green and the damage lands in the adopter's build, or nowhere visible:

  • A field name Java reserves reached every site the name becomes a Java member, not only the record component that declares it. The dangerous one compiles: a <Entity>Patch accessor named toString silently overrode Object.toString(). A third case is a runtime 500 — the generated PATCH handler passes wire names to Bean Validation, which resolves a record's property by its component name.
  • A field named after a Java keyword (class) produced setClass(String class) in the POJO tier and an unparseable record component in the Spring tier.
  • Per-object .java was written unguarded, then mistaken for hand-written work.
  • Two generators could claim one output path and one silently won. Ownership still wins over the new error: a collision on a file you hand-own warns and stays green.

Upgrading

This changes generated Java output. A generated Spring controller gains one import and wraps its PATCH property lookup, whether or not the entity declares a reserved name — so Java adopters with committed generated code must re-run codegen. For almost all of them that is the whole diff. The record/DTO tier changes only for an entity that actually declares such a field. No wire format changes, and no other port is affected: the escape is a Java restriction that stops at Java.

Full detail in CHANGELOG.md under [Unreleased].