Repository navigation
Release v16.45.2
Summary
Two ways an event schema change could not be expressed. Renaming a record broke registration even with its identifier pinned, so a pure refactor crash-looped against any store a prior release had populated — and the documented escape hatch failed the same way, leaving hand-deleting registry documents as the only remedy. Separately, a migration could not address anything inside a nested value object: the operation either failed naming a property that does exist one level down, or, for a default value, succeeded and silently wrote nothing.
Added
- Documentation for addressing a nested property in a migration, and for the case that needs no property operations at all — adding or removing an optional property at any depth, where the target generation's schema drives both the filling and the dropping (#3949)
Changed
- The JSON Schema
titleis no longer part of the schema comparison that guardsEventTypeSchemaChanged. It carries the CLR record name, so comparing it made renaming a record a breaking change despite a pinned[EventType("...")]identifier and an unchanged property set. It stays in the stored schema for tooling (#3926) - An event type migration can now address a property inside a nested object —
pb.DefaultValue(m => m.Price.Description, "unspecified")writes where it belongs, andpb.RenamedFrom(m => m.Price.Amount, e => e.Amount)moves a top-level value into the object it now belongs to. Registration validates such a path segment by segment and rejects one that resolves nowhere (#3949) - A
DefaultValuewhose target the generation's schema does not declare is now rejected at registration instead of skipped. Validation still exempts a default when the target generation has no schema to resolve against (#3949)
Fixed
- A migration built from a nested property expression no longer fails registration with
InvalidMigrationPropertyForEventTypenaming a property that exists one level down (#3949) - A
DefaultValuetargeting a nested property no longer writes a top-level key with a dot in its name that the target generation's schema then discards, leaving old events upcasting with the value missing and no error anywhere (#3949)