Skip to content

Release v16.45.2

Choose a tag to compare

@github-actions github-actions released this 06 Sep 10:01
1a38952

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 title is no longer part of the schema comparison that guards EventTypeSchemaChanged. 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, and pb.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 DefaultValue whose 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 InvalidMigrationPropertyForEventType naming a property that exists one level down (#3949)
  • A DefaultValue targeting 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)