Skip to content

Update Cratis.Chronicle to 18.4.1 - #2698

Closed
cratis-bot wants to merge 1 commit into
mainfrom
chronicle-update/18.4.1
Closed

cratis-bot wants to merge 1 commit into
mainfrom
chronicle-update/18.4.1

Conversation

@cratis-bot

Copy link
Copy Markdown
Contributor

Summary

Cratis.Chronicle, Cratis.Chronicle.AspNetCore and Cratis.Chronicle.Testing are updated from 18.2.0 to 18.4.1, picking up 18.3.0, 18.3.1, 18.4.0 and 18.4.1.

Added

  • Chronicle 18.3.0: .FromAll() fluent projections can now Count, Increment, and Decrement into a dictionary-typed read model property, with the key resolved per event from an EventContext value (e.g. one counter per event type) (All and Dictionaries Chronicle#2464)
  • Chronicle 18.3.0: The Projection Declaration Language's all block supports the same dynamic dictionary-key syntax on count/increment/decrement (All and Dictionaries Chronicle#2464)
  • Chronicle 18.3.0: The Workbench's per-language client-code preview (C#, Kotlin, TypeScript, Elixir) now renders the all/every block and .FromAll()/[FromAll] mappings, including the C# dynamic dictionary-key shape
  • Chronicle 18.3.0: Read models can now recover automatically when a projection or reducer definition changes shape (new event types added, filters changed) instead of requiring a manual rebuild, governed by a new evolution policy (automatic / partial-only / manual)
  • Chronicle 18.4.0: Opt-in append receipts containing persisted routing, sequence numbers, occurrence times, subjects, tags, hashes, and audit metadata. Batch receipts follow input order; rejected appends have no persisted receipts.
  • Chronicle 18.4.0: .NET append results and notifications expose the server-acknowledged event context. Malformed acknowledgments are reported explicitly without implying that retrying the append is safe.
  • Chronicle 18.4.1: --withdrawn excludes a named release from the wire compatibility gate, which a floor cannot do for the newest release of a major. It refuses a version that is not a released baseline, refuses one from another major, and says out loud when a run was narrowed.

Changed

  • Cratis.Chronicle, Cratis.Chronicle.AspNetCore and Cratis.Chronicle.Testing are updated to 18.4.1
  • Chronicle 18.4.1: An append notification reports the event as the caller asked for it, with the sequence number the kernel assigned, and claims nothing else. No invented occurrence time, no invented hash.

Fixed

  • Chronicle 18.3.0: A projection built only from the all block or .FromAll(), with no separate from block, never processed a single event at runtime — every event was filtered out before it reached a property mapper (All and Dictionaries Chronicle#2464)
  • Chronicle 18.3.0: A dynamic dictionary key resolved against an EventContext value could silently pick up an unrelated read-model property's schema (e.g. a string id property) and produce the wrong value type instead of the expected int64 (All and Dictionaries Chronicle#2464)
  • Chronicle 18.3.0: A dynamic dictionary-key mapping targeting a property that already has a concrete, non-dynamic schema now fails with a clear error instead of silently succeeding (All and Dictionaries Chronicle#2464)
  • Chronicle 18.3.0: Regenerating a projection declaration containing a keyword-named property nested in a dotted path (e.g. eventType.id) no longer produces a declaration that fails to re-parse
  • Chronicle 18.3.0: Reducer definitions are now compared by value, and a passive reducer's fingerprint and definition survive round-tripping through MongoDB and SQL storage correctly
  • Chronicle 18.3.0: An observer subscribed to all events (SubscribeToAllEvents, the mechanism behind all/.FromAll()) could get stuck disconnecting itself every time it entered its routing state, because the "no event types on the subscription" disconnect check does not distinguish a genuinely empty subscription from the empty-by-design subscription an all-events observer always has
  • Chronicle 18.3.0: The same all-events observer could also silently drop every live event it was handed instead of dispatching it to the subscriber, for the same reason
  • Chronicle 18.3.0: The catch-up job for an all-events observer resolved zero schemas and zero events to read, because it asked for event types from the observer's static, subscribe-time definition instead of the current, full set of registered event types
  • Chronicle 18.3.0: ObserverKeys (used to enumerate the partitions an observer must catch up) built its query with an unconditional $in filter on event type; MongoDB's $in with an empty array matches no document at all, so an all-events observer — whose definition carries no fixed event type list — always resolved zero partitions to catch up
  • Chronicle 18.3.1: Store canonical defaults for omitted event-source and stream metadata, including requests from older clients. Keep .NET concurrency inputs and append notifications consistent with the metadata sent to the kernel. (Single-event Append no longer normalizes an unspecified EventSourceType to Default Chronicle#4041)
  • Chronicle 18.3.1: Preserve explicit routing metadata on .NET single-source batch appends, including their tags, subjects, timestamps, and concurrency scope. (Single-event Append no longer normalizes an unspecified EventSourceType to Default Chronicle#4041)
  • Chronicle 18.3.1: Respect JSON naming policies and explicit property names in typed event migrations, including nested paths and value maps. Preserve existing raw string paths and public constructors.
  • Chronicle 18.3.1: Report unknown read-model identifiers with a meaningful error across keyed, collection, materialized, and session lookups, without rejecting passive models or confusing missing instances with missing definitions.
  • Chronicle 18.4.0: Preserve authorization verdicts across .NET, JVM, JavaScript, Elixir, and Python protobuf clients instead of omitting a successful verdict from the wire.
  • Chronicle 18.4.0: Apply one kernel policy to omitted routing metadata across all append endpoints, while preserving explicit routes and existing query-filter semantics. (Single-event Append no longer normalizes an unspecified EventSourceType to Default Chronicle#4041)
  • Chronicle 18.4.0: Match MongoDB append acknowledgments to stored timestamp precision and preserve supplied hashes in in-memory storage.
  • Chronicle 18.4.0: Prevent concurrent gRPC generator builds from causing multi-target NuGet publication failures.

Removed

  • Chronicle 18.4.1: AppendReceipt, AppendCausation and AppendIdentity, the IncludeReceipt/IncludeReceipts request flags and the Receipt/Receipts response fields.
  • Chronicle 18.4.1: AppendResult.Receipt, AppendManyResult.Receipts and the kernel plumbing behind them.
  • Chronicle 18.4.1: The routing-omission tracking that existed to serve receipts. It never changed what reached the kernel, because the client's defaults already equal the kernel's, and it broke value equality on EventForEventSourceId along the way.

@cratis-bot

Copy link
Copy Markdown
Contributor Author

Verification gate

Step Result
Build failure
Specs skipped
Bump patch

⚠️ Requires human review before merging — verification failed.

@cratis-bot

Copy link
Copy Markdown
Contributor Author

Superseded by #2699, which updates Cratis.Chronicle to 18.5.0 and includes everything this update carried. Closing it so only the newest Chronicle update stays open.

@cratis-bot cratis-bot closed this Sep 17, 2026
@cratis-bot
cratis-bot deleted the chronicle-update/18.4.1 branch September 17, 2026 13:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants