v0.24.0 — the pre-1.0 breaking slot: five vocabulary changes in one window
A coordinated MINOR across all four registries — npm 0.24.0 · PyPI 0.24.0 · NuGet 0.24.0 · Maven Central 7.24.0 — and the pre-1.0 breaking slot: the one release in this cycle where previously-valid metadata is allowed to stop loading.
⚠️ BREAKING FOR METADATA AUTHORS — five vocabulary changes in ONE window
Everything breaking rides this one release on purpose. Under ADR-0023's sealed strict registry a retirement has no deprecation shim — a legacy model fails to LOAD — so each one is a migration you must perform. Two breaking MINORs back to back would mean two migrations for work budgeted as one.
On a caret range ^0.23.x resolves <0.24.0, so you pick this up only by deliberately bumping your range.
Most of it is one command: meta upgrade --apply. The rewriter is driven by the same retirement map the loader's errors come from, so the fixer and the diagnosis cannot drift apart. It will not guess: @status: abandoned is refused rather than rewritten, because deciding what happens to a retired capability's record is judgment, not a substitution.
| Change | Guide | |
|---|---|---|
| A | A template subtype's axis is DIRECTION — @promptStyle on a template.output now fails the load; the inbound tier belongs to a template.prompt carrying @responseRef; emitted paths follow the direction (.output.* → .response.*) |
template-direction-outbound-vs-inbound.md |
| B | The requirement vocabulary becomes prescriptive-only — @verifiedBy/@supersededBy deregister, @status shrinks to planned | live | partial |
verified-by-retirement.md |
| C | @readOnly becomes the @mutability enum (readWrite | writeOnce | readOnly) — the new middle mode is what an assigned primary key has always wanted |
readonly-to-mutability.md |
| D | origin.collection retires to reserved-not-registered — it duplicated origin.aggregate @agg: collect and nothing ever dispatched on it |
origin-collection-retirement.md |
| E | @violation becomes @counterexample on requirement.* — a rename, not a retirement; semantics and legality unchanged |
violation-to-counterexample.md |
metamodelVersion moves 0.9 → 0.10 — the first time that number has ever moved. It is the one that tells you your metadata needs work, as distinct from your build. One move covers all five.
Also in this release
meta upgrade— a new CLI command that rewrites retired vocabulary and refuses what needs a decision.- A shipped library is loadable through the toolchain — a
librarieskey in the TS CLI, plusEmbeddedLibrary/LibrarySourcesand a MavenLoaderParamon the JVM side. meta docsgains a requirements surface, on by default, with entity pages naming the requirements that claim them.meta verifyprints a requirements summary on every run.- Two default flips rather than corrections: the Java Maven plugin now fails a build a silently-empty model used to let pass, and Java and Python now follow symlinked directories.
Upgrading
npm install @metaobjectsdev/cli@0.24.0
meta upgrade --apply # rewrites A–E where a rewrite is unambiguous
meta verify # then read what it refuses to decide for youFull detail, including the reasoning behind each ruling, is in CHANGELOG.md.