Skip to content

Release v19.69.0

Choose a tag to compare

@github-actions github-actions released this 15 Oct 05:49
1fd6543

The kernel can now record application occurrences durably, hand them to workers under fenced leases, and settle each effect through an atomic receipt, so a redelivered occurrence does not repeat its Chronicle effects. Client support follows in a later release.

Added

  • Kernel occurrence queue: triggers register with a JSON payload schema, RecordOccurrence stores each occurrence once per idempotency id (Recorded, AlreadyRecorded, OccurrenceIdConflict, OccurrencePayloadInvalid), and workers claim, renew, complete and fail occurrences under leases fenced by an epoch. A superseded worker gets OccurrenceLeaseLost; a repeated completion gets AlreadyCompleted. (part of #4911)
  • Failed occurrences back off and are quarantined after the configured maximum attempts without blocking later occurrences; RetryQuarantinedOccurrence re-arms one and records the authenticated principal. Retry settings live in the new Occurrences configuration section, documented at https://github.com/Cratis/Chronicle/blob/main/Documentation/configuration/chronicle-options.mdx. (part of #4911)
  • A disconnected client's leases expire, and occurrence queues resume after a kernel restart. GetOccurrence and ObserveOccurrences report state, attempts, lease, last error, next attempt and the receipts written for an occurrence, with their namespace. (part of #4911)
  • Effect receipts: every append command (Append, AppendMany, AppendManyForEventSources and their named-tag variants) accepts an optional effect receipt that is written in the same storage transaction as the events. A repeated effect returns EffectAlreadyRecorded with the stored outcome and response and appends nothing. A zero-event append with concurrency scopes records a NoEvents receipt only when the scopes hold. RecordEffectReceipt records a NoEvents or Refused outcome on its own, and GetEffectReceipt reads one back. An unknown commit result is settled by lookup, or fails retryably with EffectReceiptUnsettled. See https://github.com/Cratis/Chronicle/blob/main/Documentation/concepts/effect-receipts.md. (part of #4911)
  • The kernel advertises the occurrences and effect-receipts capabilities, and the new Occurrences gRPC service is part of the generated Kotlin, TypeScript and Elixir contracts. (part of #4911)

Changed

  • SQL stores get additive event-store and namespace migrations for trigger definitions and indexed effect receipts. (part of #4911)