Skip to content

1.0.5-rc.3 — release candidate (all four registries)

Pre-release
Pre-release

Choose a tag to compare

@dmealing dmealing released this 20 Sep 13:41
· 418 commits to main since this release
c5b767e

1.0.5-rc.3 — release candidate on all four registries

Coordinates (the tree at this SHA reads 1.0.4 / 8.0.4 — a pre-release version is
never committed, so this annotation is the only record):

npm 1.0.5-rc.3 14 packages, dist-tag next
PyPI 1.0.5rc3
NuGet 1.0.5-rc.3 4 packages
Maven Central 8.0.5-rc.3

All four moved: every one of the five ports has changed product code on this SHA.

metamodelVersion stays 1.0.

BREAKING — generated routes. The REST collection URL is now the entity name
snake_cased and then pluralized, in every port: Author is served at /authors,
PostCategory at /post_categories. It is derived from the entity NAME and never
from the physical @table. Adopters with committed generated code must re-run
their port's generator and diff their routes.

One rule replaces four. TypeScript snake_cased then pluralized irregularly for an
entity but KEBAB-cased in the opposite order for a projection; C# pluralized then
lowercased, serving /postcategories; Java and Kotlin appended a bare "s" to the
lowercased name, serving /postcategorys. Kotlin's helper carried a comment
asserting it matched TS/C#/Java — only Java matched.

Why four spellings shipped green. Every collection base in every corpus was a
single word with a regular plural (authors, posts, tags, accounts), and those are
byte-identical under all four rules. 49 scenarios across five ports agreed while
the ports disagreed. That is also what bounds adopter impact: only multi-word and
irregular-plural names move, and in TypeScript only projections do.

What gates it now. A purpose-built PostCategory entity in
fixtures/api-contract-conformance/m2m/ — multi-word AND consonant+y, so it
separates every spelling the ports produced — asserts the canonical path on each
port's hand-rolled reference lane AND its generated lane, and asserts that both
retired spellings 404 so a port cannot mount the new path while keeping its old
one. Its @table is deliberately unlike both route and name, so echoing the table
cannot pass. The JVM ports now share ONE RouteNaming in codegen-base rather than
two copies that agreed only by inspection.

Not a package major: docs/compatibility-policy.md's "what is NOT covered" names
the reference templates themselves, and codegen is opt-in with an empty default
suite (ADR-0034 Amendment 2).

Verified on this SHA, all locally (GitHub Actions was off for the merge):
ci-local.sh --quick 36/36; full Java reactor 15/15 modules, 2910 tests; Python
2224; codegen-ts 1702; C# 519 codegen plus the full integration suite; the new
scenario 9 scenarios x 2 lanes on every port.