Skip to content

Release v20.66.0

Choose a tag to compare

@github-actions github-actions released this 30 Jul 10:08
fff49c4

Summary

The open pull requests are merged here so they ship as one release rather than several, and main builds again.

Added

  • A read model backed by Entity Framework Core or MongoDB can be injected by key into a command's Handle(), Provide(), and CommandValidator<>, with nothing to wire up — an entity carried by a ReadOnlyDbContext resolves by its primary key, a [ReadModel] held in MongoDB by its document _id. Nullable and non-nullable resolution behave as for a Chronicle-backed read model (#2303)
  • ICanResolveReadModelForCommand, for making the read models of another store injectable into a command the same way. A provider states whether it owns the read models it reports or can merely load them, so which one resolves a read model does not depend on registration order (#2303)
  • SP0041 reports what an application says about how it is served and a Screenplay has no counterpart for: a query the host pages and sorts, and every route template declared with [Path], [Route] or an HTTP verb, including inherited ones (#2415)
  • SP0042 reports the tags a read model carries, which the document has nowhere to hold while an event's tags are printed (#2415)
  • Chronicle 16.9.2: ComplianceMetadataActionFailed replaces the bare InvalidOperationException when applying or releasing compliance metadata fails. On a failed release it names the property, the subject the value was released under, and explains that the value was encrypted under a different subject, pointing at CHR0038 — rather than surfacing only the underlying OpenSSL oaep decoding error.
  • Chronicle 16.10.0: [Replay] on a reactor handler method, marking it as the one to run while the observer is replaying. Only the marked handler runs during a replay; an event type without one behaves exactly as before. (Cratis/Chronicle#845)
  • Chronicle 16.10.0: IEventStore.Identities with Rename(subject, name), exposing the identity renaming the kernel already supported to the .NET client. (Cratis/Chronicle#1684)
  • Chronicle 16.10.0: [JsonSchemaType(typeof(T))] on a type, overriding how it is represented in the JSON schema generated for events and read models. Compliance metadata and nullability are preserved. (Cratis/Chronicle#1470)
  • Chronicle 16.10.0: AddCratisChronicleMongoDB() for Aspire, provisioning a MongoDB container that initiates itself as a single-node replica set and hands back a directConnection connection string. (Cratis/Chronicle#3400)
  • Chronicle 16.10.0: IReactorMiddleware.BeforeInvoke and AfterInvoke overloads that receive the ReactorId of the reactor observing the event. Chronicle calls these; they default to the existing overloads, so a middleware written against the previous interface keeps working unchanged. (Cratis/Chronicle#1009)
  • Chronicle 16.10.0: CompliancePropertyNotFoundInSchema, thrown when a property being applied or released has no counterpart in the schema. The message names the property path, the compliance subject, and the properties the schema does declare. (Cratis/Chronicle#690)
  • Chronicle 16.10.0: An overview on the cratis/chronicle Docker Hub repository covering the published tag variants, ports, quick start and the environment variables that configure the server. (Cratis/Chronicle#1277)

Changed

  • Cratis.Chronicle, Cratis.Chronicle.AspNetCore and Cratis.Chronicle.Testing are updated from 16.9.1 to 16.10.0, picking up 16.9.2, 16.9.3, 16.9.4 and 16.10.0
  • Chronicle 16.9.2: CHR0038 now also reports the fluent builder.Join<TEvent>(_ => _.On(...)) form, not just the model-bound [Join<TEvent>] attribute. A [PII] value counts as reaching the read model through an explicit .Set(...).To(...) mapping or through AutoMap matching an identically named property.
  • Chronicle 16.10.0: Registering event types on connect issues one read and one bulk write for the whole batch instead of several round trips per event type, so startup no longer scales its database round trips with the number of event types. (Cratis/Chronicle#984)

Fixed

  • Cratis.Arc.Chronicle.Testing compiles against Chronicle 16.10.0 again — the in-memory event store behind a command scenario did not implement the two IEventStore members that release adds, which is why 20.65.4 has no NuGet packages
  • Documentation link verification checks links again — it reported success while scanning zero links, both locally and in CI (#2416)
  • Fourteen documentation links that named pages under a file name those pages no longer have
  • Tenancy documentation no longer presents X-Tenant-ID as the tenant header; the header-override samples now use a clearly-custom placeholder so they no longer contradict the actual default x-cratis-tenant-id (#2351)
  • Chronicle 16.9.3: CHR0038 no longer reports a fluent join when AutoMap cannot carry the value across — [NoAutoMap] on the read model, and [NoAutoMap] on the target property of a positional record, were both still reported. Since the rule is an error, each was a build break on correct code.
  • Chronicle 16.9.4: Two links in the concepts docs pointed at /arc/backend/chronicle/aggregates/aggregate-root.md, which no longer exists — the Arc page is defining-an-aggregate-root.md. This was breaking the Documentation site's internal-links check.
  • Chronicle 16.10.0: Reading back a job whose request was not yet assigned no longer fails with a NullReferenceException, losing the status and progress the job state was written to record. (Cratis/Chronicle#3541)
  • Chronicle 16.10.0: Reducer failures are written to the client log. A reducer method that throws was reported to the kernel as a failed observation without ever appearing in the client's own log. (Cratis/Chronicle#1395)
  • Chronicle 16.10.0: Applying or releasing compliance metadata for a property the schema does not declare no longer fails with a bare Sequence contains no matching element. (Cratis/Chronicle#690)
  • Chronicle 16.10.0: Applying or releasing compliance metadata no longer fails when a schema flattened across inheritance declares the same property name more than once. (Cratis/Chronicle#690)