Arc (Release v20.49.0): New ARCCHR0005 analyzer that warns at compile time when a project sets up Arc with AddCratisArc but never calls WithChronicle() or AddCratis(), yet uses Chronicle in the same project (an aggregate root, reactor, reducer, projection, [EventType] event, or a type injecting IEventLog/IEventStore). It stays silent when Chronicle genuinely is not used.
Chronicle (Release v15.38.4): Chronicle clients can delete a subject’s PII encryption key to satisfy GDPR right-to-erasure (crypto-shredding), via IPIIManager.DeleteEncryptionKeyFor and IEventStore.PII. IPIIManager can also be injected directly.
Chronicle (Release v15.38.0): ReadModelScenario<T>.Instances and InstanceForEventSourceId(id) for asserting a specific materialized read model when a projection spans multiple event sources — for example a [Join] whose join-source event is seeded before the entity under test, which previously shadowed it in Instance.
Chronicle (Release v15.36.1): A CHR0023 analyzer that warns when a [ChildrenFrom] collection omits parentKey and the parent key cannot be inferred unambiguously — the event has more than one property of the parent read model’s identifier type besides the child key. Specify parentKey to resolve it.
Chronicle (Release v15.36.0): A CHR0023 analyzer that warns when a [ChildrenFrom] collection omits parentKey and the parent key cannot be inferred unambiguously — the event has more than one property of the parent read model’s identifier type besides the child key. Specify parentKey to resolve it.
Arc (Release v20.49.0): Resolving a Chronicle service such as IEventLog without Chronicle configured now throws an actionable error that names the command, query, or validator and its parameter, and points at the fix (WithChronicle() or AddCratis()) instead of a raw “Unable to resolve service for type EventStoreName” container exception.
Arc (Release v20.49.0): Expanded the IntelliSense/API documentation on AddCratis, UseCratis, AddCratisArc, UseCratisArc, and WithChronicle (all overloads): they clarify that the application hosts the Chronicle client — which connects to a separately running Chronicle instance — rather than an embedded engine, and include runnable examples for the common setups.
Chronicle (Release v15.38.4): Reading a PII value whose encryption key has been deleted now returns an empty value instead of throwing, so read models and queries for an erased subject keep working.
Arc (Release v20.48.2): Raised the Cratis.Chronicle dependency floor to 15.38.0.
Arc (Release v20.48.2): Updated Microsoft.EntityFrameworkCore, Microsoft.Extensions.*, and other third-party dependencies to their latest patch versions.
Arc (Release v20.48.1): Raised the Cratis.Chronicle dependency floor to 15.38.0.
Arc (Release v20.48.1): Updated Microsoft.EntityFrameworkCore, Microsoft.Extensions.*, and other third-party dependencies to their latest patch versions.
Chronicle (Release v15.36.1): The ReadModelScenario<T> test harness gives each driven event a distinct, monotonically increasing occurred time, so a time-based [FromAll] (for example a last-updated value mapped from EventContext.Occurred) reflects append order.
Chronicle (Release v15.36.0): The ReadModelScenario<T> test harness gives each driven event a distinct, monotonically increasing occurred time, so a time-based [FromAll] (for example a last-updated value mapped from EventContext.Occurred) reflects append order.
Arc (Release v20.49.2): Restored a broken build caused by the Chronicle 15.38.4 package sweep: the in-memory command-scenario event store now implements the newly added IEventStore.PII member, and the Roslyn analyzer packages are pinned back to a version compatible with the shipped SDK compiler.
Arc (Release v20.49.2): CS9057 — the sweep bumped Microsoft.CodeAnalysis.CSharp/.Workspaces/.Workspaces.Common to 5.6.0; analyzers built against 5.6.0 cannot be loaded by the Roslyn 5.3.0 compiler in the pinned SDK. Reverted to 5.3.0.
Arc (Release v20.49.2): CS0535 — Chronicle 15.38.4 added PII to IEventStore; EventStoreForScenario did not implement it. Added it following the existing unsupported-operation pattern.
Chronicle (Release v15.38.3): Chronicle server Docker images could not start — they exited with Permission denied (exit code 126) because the server executable was missing its executable bit. Restored in #3446 and shipped in this release; all server images published since 15.37.0 were affected.
Chronicle (Release v15.38.3): Correct a stale net6.0 output path in the Kernel README dotnet counters example (the Kernel targets net10.0).
Chronicle (Release v15.38.2): Read models keyed by a property other than their event source id (for example [FromEvent<T>(key: nameof(...))], or a re-keyed reducer) now decrypt their [PII] properties on read. Previously the value was encrypted under the source event’s subject while the document was stored under a different key, so queries and command-side reads returned it as ciphertext. The read-model document now encrypts and releases its PII under its own resolved key, so it stays decryptable for the document’s whole lifetime.
Chronicle (Release v15.38.1): A read model whose property is a [PII] collection no longer freezes its reducer: the encrypted list is released back into an array that deserializes into the read model’s collection type instead of failing as a raw string.
Chronicle (Release v15.38.1): Removing a [ChildrenFrom] child that carries a [PII] member now removes it from the MongoDB read model instead of silently leaving it in place.
Arc (Release v20.48.3): Resolved 9 MA0206 (unnecessary braces in type declaration) errors that were blocking Release-configuration builds after Meziantou.Analyzer was bumped to 3.0.117.
Arc (Release v20.48.2): Resolved a high-severity vulnerability (GHSA-v5pm-xwqc-g5wc) in the transitive Microsoft.OpenApi dependency.
Chronicle (Release v15.38.0): Read-model properties that are collections of bare concepts (for example IReadOnlyList<ConceptAs<string>>) no longer persist empty to MongoDB — the concept elements are now stored as their underlying values, matching the in-memory sink.
Chronicle (Release v15.36.1): Docker images (cratis/chronicle and the -workbench, -development, and -development-slim variants) are published again. The 15.36.0 publish failed to push them because the cache-saving build jobs were denied cache writes under GitHub’s new Actions cache service.
Chronicle (Release v15.36.1): [FromAll] and [FromEvery] are now applied when declared on a positional record property ([property: FromAll(...)]). Previously the attribute was dropped, so the property was never projected, and [FromAll(contextProperty: ...)] was additionally mis-converted into a non-existent event-property lookup.
Chronicle (Release v15.36.1): [ChildrenFrom] with an omitted parentKey no longer mis-infers the child key as the parent key when the parent identifier and the event’s child key share a type (such as a raw Guid), so the children resolve. When more than one event property still matches, the first by declaration order is used; specify parentKey to disambiguate.
Chronicle (Release v15.36.1): [ChildrenFrom] child collections now project in ReadModelScenario<T> when a child value is a decimal or TimeSpan; previously such collections materialized empty.
Chronicle (Release v15.36.0): [FromAll] and [FromEvery] are now applied when declared on a positional record property ([property: FromAll(...)]). Previously the attribute was dropped, so the property was never projected, and [FromAll(contextProperty: ...)] was additionally mis-converted into a non-existent event-property lookup.
Chronicle (Release v15.36.0): [ChildrenFrom] with an omitted parentKey no longer mis-infers the child key as the parent key when the parent identifier and the event’s child key share a type (such as a raw Guid), so the children resolve. When more than one event property still matches, the first by declaration order is used; specify parentKey to disambiguate.
Chronicle (Release v15.36.0): [ChildrenFrom] child collections now project in ReadModelScenario<T> when a child value is a decimal or TimeSpan; previously such collections materialized empty.
Chronicle (Release v15.38.4): Removed the non-functional CreateAndRegisterKeyFor from IPIIManager; it only ever threw NotImplementedException, and encryption keys are already registered automatically on first use.