Orleans 10.3.0
Orleans 10.3.0 expands the platform across clustering, streaming, persistence, integrations, serialization, and developer tooling while delivering a broad reliability and performance pass. Major outcomes include stronger distributed-directory and membership behavior, new streaming and storage providers, hardened transactions and durable jobs, incremental source generation, safer JSON storage deserialization, and new application templates. Alongside these features and fixes, the release optimizes key runtime paths, comprehensively refreshes the docs, strengthens testing and CI, and updates dependencies and repository maintenance.
Compatibility notes
Important
Review these changes before upgrading. This release contains three intentionally behavior-changing updates.
- Default JSON storage serializer type allow-list (#10268). The default Newtonsoft.Json-based Orleans storage serializer now resolves
$typemetadata only for types permitted by Orleans' configured type filters and manifest. Existing wire data remains readable when its types are allowed;[GenerateSerializer]types and standard permitted BCL types continue to work without changes. If persisted, streamed, or transactional JSON contains other types, reads now fail with an actionableJsonSerializationException. Prefer registering those types throughTypeManifestOptions.AllowedTypes,[GenerateSerializer],ITypeNameFilter, orITypeFilter;OrleansJsonSerializerOptions.AllowAllTypes = truerestores the former permissive JSON behavior when a narrowly scoped allow-list is not practical. - Updated RPC semantic convention keys (#10354). Orleans activities now emit the current OpenTelemetry RPC key
rpc.system.name; Orleans-specific service, target, and source metadata move toorleans.rpc.service,orleans.rpc.target_id, andorleans.rpc.source_id. The runtime-siderpc.methodvalue is now qualified as<interface>/<method>, and affectedActivitySourceversions are incremented. Update dashboards, alerts, collectors, and queries which depend on the legacyrpc.system,rpc.service,rpc.orleans.target_id, orrpc.orleans.source_idkeys or the previous method value. - Grain context configured before construction (#10565). Orleans now deterministically applies
IConfigureGrainContextactions before grain construction, so constructors can observe fully configured context state. CustomIGrainContextActivatorimplementations must migrate fromCreateContext(GrainAddress)toCreateContext(GrainAddress, IConfigureGrainContext[])and apply the supplied configurators before constructing the grain. Stateless-worker configurators continue to apply to the outer stateless-worker context.
Highlights
Runtime, clustering & resilience
- Distributed-directory rolling upgrades now have durable handoffs, cancellation-aware operations, stronger single-activation guarantees, and improved recovery and startup behavior (#10309, #10323, #10339, #9958, #10500, #10533, #10613, #10625).
- Membership fault detection gains connection liveness checks, adaptive probe timeouts, retained local health history, and local-stall detection (#9978, #10510, #10502, #9979).
- Reminder delivery, reconciliation, rebalancing, shutdown state, placement compatibility caching, and resilience policies received substantial correctness and efficiency improvements (#10296, #10430, #10612, #10819, #10838, #10311, #10313, #10614, #10573, #10596, #10314, #10597, #10599, #9819).
Streaming
- New AWS Kinesis support, SQS data adapters with FIFO support, Event Hubs Aspire integration, grain-backed checkpointing, and generalized Azure Table checkpointing broaden deployment choices (#8967, #8723, #9328, #10345, #10355).
- Persistent streams now flow cancellation; stateless workers can consume streams; Azure Queue migration supports compact JSON; and stream telemetry includes richer tags (#10383, #10657, #10507, #8631).
- Redis implicit subscriptions, SQL Server queue commits, ADO.NET handoffs, batched acknowledgements, implicit rewind handling, and memory/Event Hubs hot paths were hardened or optimized (#10423, #10572, #10536, #10574, #10655, #10662, #10550, #10767).
Storage, persistence, journaling, durable jobs & transactions
- New Azure Table and Redis journal providers, DynamoDB transactional storage, file-based grain storage, and a System.Text.Json grain storage serializer expand persistence options (#10254, #9823, #9616, #9537, #10806, #9505).
- Transactions receive extensive conflict, recovery, retry, isolation, cancellation, and diagnostics hardening across providers (#10372, #10376, #10382, #10375, #10374, #10385, #10545, #10743).
- Persistent state is now concurrency-safe and cancellation-aware, while journaling snapshot operations and durable-job retry/rescheduling semantics are more robust (#10255, #10641, #10800, #10681, #10349, #10547, #10716, #10679).
Providers & integrations
- Google Cloud Firestore providers, Cosmos DB custom document IDs and partition keys, ADO.NET
DbDataSourcesupport, and improved Azure, ZooKeeper, Redis, NATS, and relational-provider behavior extend and stabilize integrations (#8462, #8699, #10326, #10429, #10381, #10437, #10835, #10422, #10505, #10276). - SQL Server, PostgreSQL, and MySQL clustering add the missing defunct-silo cleanup query (#8811, #9125, #8896).
Serialization, code generation & analyzers
- The source generator is now incremental, generates provider metadata at build time, avoids runtime provider scanning, and supports record-parameter field IDs and custom grain-call return types (#10035, #10493, #10566, #10495, #10682).
- Serialization reduces codec and buffer allocations, adds type/assembly allow-list helpers, and clarifies type-trust configuration (#10301, #10340, #10668, #10228, #10424).
- Analyzers detect RPC contract changes and provide improved diagnostic guidance (#10337, #10832).
Developer experience, templates, samples & docs
- New Orleans application templates and a basic clustering sample make it easier to start and validate applications (#10646, #10690, #10622).
- Connection middleware abstractions and framing helpers provide new transport extension points (#10136, #10433).
- The docs were comprehensively reorganized and modernized across onboarding, architecture, grains, hosting, operations, security, observability, persistence, streaming, testing, deployment, migration, and production guidance (#10331, #10332, #10334, #10335, #10327, #10328, #10333, #10330, #10336, #10329, #10675, #10746).
- Test infrastructure moved to xUnit v3 and Microsoft.Testing.Platform, with provider conformance kits, published test results, coverage reporting, and extensive reliability improvements (#10722, #10726, #10490, #10785, #10730, #10733, #10842, #10438, #10738).
Detailed changelog
Every change from the autogenerated changelog is listed once below.
Runtime, clustering, reminders & resilience (34)
- fix(reminders): prevent ticks after unregister by @ReubenBond in #10296
- fix: eliminate rebalancer waiter timeout race by @ReubenBond in #10311
- fix(directory): support rolling upgrades to distributed directory by @ReubenBond in #10309
- fix: clean up rebalancer diagnostic waiters by @ReubenBond in #10313
- perf(reminders): drop reminders that are not due soon by @ReubenBond in #10259
- perf: cache compatible placement silos by @ReubenBond in #10314
- fix(directory): cancel snapshot pulls from departed silos by @ReubenBond in #10318
- fix(directory): make rolling upgrade handoffs durable by @ReubenBond in #10323
- fix: scope reminder test clock to reminder service by @ReubenBond in #10317
- feat(directory): add cancellation-aware operations by @ReubenBond in #10339
- fix(directory): stabilize rolling upgrade handoff test by @ReubenBond in #10341
- perf(runtime): reduce activation collection sorting allocations by @ReubenBond in #10342
- fix(directory): strengthen single-activation guarantees by @ledjon-behluli in #9958
- fix(telemetry)!: update RPC semantic convention keys by @rkargMsft in #10354
- fix(reminders): recover exact-due persisted reminders by @ReubenBond in #10430
- fix(directory): arm lease retry before notification by @ReubenBond in #10447
- feat(membership): add connection liveness check for fault detection by @ReubenBond in #9978
- fix(directory): refresh stale lookup ownership by @ReubenBond in #10500
- feat(membership): retain local health history by @ReubenBond in #10502
- fix(directory): preserve newer recovery registrations by @ReubenBond in #10533
- feat(membership): adapt probe timeouts by @ReubenBond in #10510
- fix(runtime)!: configure grain context before construction by @ReubenBond in #10565
- fix(runtime): preserve rebalancer state on shutdown by @ReubenBond in #10573
- fix(runtime): publish local shutdown membership state by @ReubenBond in #10596
- fix(runtime): synchronize version selector cache generations by @ReubenBond in #10597
- refactor(runtime): centralize placement compatibility caching by @ReubenBond in #10599
- fix(runtime): refresh stale empty directory views by @ReubenBond in #10625
- fix(reminders): reconcile stale-owner registrations by @ReubenBond in #10612
- fix(rebalancing): honor latest suspension duration by @ReubenBond in #10614
- fix(directory): wait for active membership during startup by @ReubenBond in #10613
- fix(resilience): add grain placement resilience policies by @ReubenBond in #9819
- feat(membership): detect local stalls during direct probes by @ReubenBond in #9979
- fix(reminders): always start the first retry attempt by @ReubenBond in #10819
- fix(reminders): decouple reconciliation barrier from scheduler by @ReubenBond in #10838
Streaming (21)
- feat(streaming): make SequentialItem serializable by @ReubenBond in #10302
- feat(streaming): add telemetry tags to stream metrics by @oising in #8631
- refactor(streaming): remove unused implicit subscriber grain factory by @ReubenBond in #10322
- feat(streaming): add grain-backed stream checkpointer by @ReubenBond in #10345
- feat(streaming): generalize Azure Table checkpointer by @ReubenBond in #10355
- feat(streaming): flow cancellation through persistent streams by @ReubenBond in #10383
- feat(streaming): add AWS Kinesis streaming provider by @dpbevin in #8967
- fix(streaming): restore Redis implicit subscriptions by @ReubenBond in #10423
- fix(adonet): avoid SQL stream confirmation deadlocks by @ReubenBond in #10527
- fix(streaming): preserve ADO.NET dequeue order by @ReubenBond in #10536
- perf(streaming): avoid copying memory stream payloads by @ReubenBond in #10550
- fix(streaming): serialize SQL Server queue commits by @ReubenBond in #10572
- fix(streaming): improve implicit-only subscription guidance by @ReubenBond in #10623
- feat(streaming): support compact JSON Azure Queue migration by @ReubenBond in #10507
- fix(streaming): release ADO.NET messages during queue handoff by @ReubenBond in #10574
- fix(streaming): defer acknowledgements for batched delivery by @ReubenBond in #10655
- feat(streaming): support stateless worker consumers by @ReubenBond in #10657
- feat(streaming): add SQS data adapters and FIFO support by @jamescarter-le in #8723
- perf: optimize EventHub cache mapping by @ReubenBond in #10767
- feat(streaming): add Event Hubs Aspire support by @jsedlak in #9328
- fix(streaming): reject active implicit rewinds by @ReubenBond in #10662
Storage, persistence, journaling, durable jobs & transactions (26)
- Add Azure Table journal storage provider by @danielmeza in #10254
- feat(cosmos): add configuration support for grain storage by @ReubenBond in #10326
- fix(durablejobs): preserve job state across retries by @ReubenBond in #10349
- feat: add DynamoDB transactional storage provider by @scalalang2 in #9616
- fix(dynamodb): harden transactional storage conflicts by @ReubenBond in #10372
- fix(transactions): harden Azure Table transactional state storage by @ReubenBond in #10376
- fix(transactions): harden confirmation recovery handling by @ReubenBond in #10382
- fix(transactions): isolate failed storage writes by @ReubenBond in #10375
- fix(transactions): improve recovery liveness and diagnostics by @ReubenBond in #10374
- fix(transactions): retry TOC verification after transient abort by @ReubenBond in #10385
- feat(journaling): add Redis journal storage provider by @jaironalves in #9823
- fix(transactions): stabilize recovery observer gate tests by @ReubenBond in #10401
- fix(transactions): scope storage fault injection by @ReubenBond in #10545
- fix(durablejobs): preserve shard execution failures by @ReubenBond in #10547
- fix(persistence): use a stable hash to pick the memory storage grain by @bknote71 in #10617
- fix(persistence): flow grain storage cancellation tokens by @ReubenBond in #10641
- fix(persistence): make persistent state operations concurrency-safe by @ReubenBond in #10255
- feat(storage): add System.Text.Json grain storage serializer by @willg1983 in #9505
- feat(durable-jobs): support successful rescheduling by @ReubenBond in #10716
- fix(transactions): release locks when cancel precedes prepare by @ReubenBond in #10743
- fix(journaling): await recovery before reporting write conflicts by @ReubenBond in #10739
- feat: add file-based grain storage provider by @BernhardPollerspoeck in #9537
- fix(journaling): preserve snapshot reference scopes by @ReubenBond in #10800
- refactor(runtime): include file grain storage by @ReubenBond in #10806
- fix(journaling): make snapshot commits and rollback atomic by @ReubenBond in #10681
- feat(durable-jobs): add grain-scoped feature handlers by @ReubenBond in #10679
Providers & integrations (12)
- feat(cosmos): support custom document IDs and partition keys by @ReubenBond in #8699
- fix(azure): fence paginated membership reads by @ReubenBond in #10381
- feat(google): add Google Cloud Firestore providers by @galvesribeiro in #8462
- Add missing query CleanupDefunctSiloEntriesKey to SQLServer clustering by @m3nax in #8811
- Add missing query CleanupDefunctSiloEntriesKey to PostgreSQL-Clustering by @tomaszstrejczek in #9125
- Add missing query CleanupDefunctSiloEntriesKey to MySQL-Clustering by @juan-arias in #8896
- fix(cosmos): continue reminder queries after empty pages by @vladrai in #10276
- fix(nats): preserve request context value types by @ReubenBond in #10422
- feat(adonet): support DbDataSource by @ReubenBond in #10429
- fix(zookeeper): tolerate transient connection loss by @ReubenBond in #10437
- fix(adonet): prevent provider query races by @ReubenBond in #10505
- perf(redis): avoid serializing addresses during unregister by @ReubenBond in #10835
Serialization, code generation & analyzers (15)
- fix(serialization): defer interface collection codec dependencies by @ReubenBond in #10301
- perf(codegen): migrate to incremental source generator by @ReubenBond in #10035
- fix(serialization)!: enforce type allow-list in default JSON storage serializer by @ReubenBond in #10268
- feat(serialization): add type and assembly allow-list helpers by @ReubenBond in #10228
- fix(serialization): cap codec allocations by @ReubenBond in #10340
- fix(codegen): release cached Roslyn symbols by @ReubenBond in #10426
- fix(serialization): clarify type trust configuration by @ReubenBond in #10424
- feat(codegen): support record parameter field ids by @ReubenBond in #10495
- feat(analyzers): detect RPC contract changes by @ReubenBond in #10337
- perf(codegen): generate provider metadata at build time by @ReubenBond in #10493
- perf(codegen): avoid runtime provider scanning by @ReubenBond in #10566
- perf(serialization): grow memory stream buffers geometrically by @ReubenBond in #10668
- fix(codegen): use test host framework references by @ReubenBond in #10691
- feat(codegen): support custom grain-call return types by @ReubenBond in #10682
- feat(analyzers): improve diagnostic guidance by @ReubenBond in #10832
Developer experience, templates & samples (4)
- feat: add connection middleware abstractions and framing helpers by @wenwangcode in #10136
- feat(samples): add basic clustering sample by @ReubenBond in #10622
- feat(templates): add Orleans application templates by @ReubenBond in #10646
- fix(templates): use shipped Orleans package version by @ReubenBond in #10690
Documentation (89)
- docs: require conventional commit format for PR titles by @ReubenBond in #10310
- docs: add Orleans 10 migration guides by @ReubenBond in #10329
- docs: modernize deployment and operations guidance by @ReubenBond in #10327
- docs: modernize grain programming guidance by @ReubenBond in #10334
- fix(docs): correct timer migration link by @ReubenBond in #10347
- docs: modernize security and observability guidance by @ReubenBond in #10328
- docs: restore migration reference links by @ReubenBond in #10352
- docs: restore authoritative grain references by @ReubenBond in #10353
- docs: modernize hosting and configuration guidance by @ReubenBond in #10335
- docs: expand Orleans architecture documentation by @ReubenBond in #10332
- docs: modernize Orleans onboarding by @ReubenBond in #10331
- docs: modernize state and durability guidance by @ReubenBond in #10333
- docs: modernize Orleans streaming guidance by @ReubenBond in #10330
- docs: reorganize Orleans documentation navigation by @ReubenBond in #10336
- docs: restore durability operational contracts by @ReubenBond in #10366
- docs: restore activation delay semantics by @ReubenBond in #10359
- docs: restore Consul membership internals by @ReubenBond in #10362
- docs: restore response streaming guidance by @ReubenBond in #10367
- docs: restore Orleans testing guidance by @ReubenBond in #10364
- docs: restore custom placement examples by @ReubenBond in #10369
- docs: restore TLS certificate loading guidance by @ReubenBond in #10360
- docs: restore legacy Orleans 10 migration context by @ReubenBond in #10361
- docs: restore stateless worker streaming limitation by @ReubenBond in #10365
- docs: restore Orleans Hello World onboarding by @ReubenBond in #10363
- docs: restore virtual actor design context by @ReubenBond in #10368
- docs: restore safe grain call filter examples by @ReubenBond in #10371
- docs(transactions): clarify storage recovery contract by @ReubenBond in #10377
- docs: require docs and samples review by @ReubenBond in #10386
- docs: enforce Conventional Commit PR titles during reviews by @ReubenBond in #10387
- docs: define documentation types and expectations by @ReubenBond in #10394
- docs: safely identify each contributor's fork remote by @ReubenBond in #10395
- docs(test): add flaky test reliability guidance by @ReubenBond in #10397
- fix(docs): render rich markdown content by @ReubenBond in #10398
- docs: clarify contributor PR branch pushes by @ReubenBond in #10425
- docs: point package README links at the Orleans docs site by @ReubenBond in #10396
- docs: improve Orleans Aspire integration documentation by @Meir017 in #10344
- docs: add connection middleware guide by @wenwangcode in #10433
- build(docs): enforce Orleans 10 documentation quality by @ReubenBond in #10356
- docs: document running distributed tests locally by @ReubenBond in #10555
- docs: fix grain service client registration by @ReubenBond in #10552
- docs: clarify client lifetime and reconnect guidance by @ReubenBond in #10581
- fix(docs): use native Orleans API links by @ReubenBond in #10564
- docs: update stale NGINX external link by @ReubenBond in #10584
- docs: improve contributor onboarding by @ReubenBond in #10592
- docs: clarify generic host shutdown by @ReubenBond in #10582
- docs(streaming): document external integrations by @ReubenBond in #10594
- docs(reminders): clarify reminder timing constraints by @ReubenBond in #10580
- docs: clarify observer vs stream guidance by @ReubenBond in #10579
- docs: document explicit grain deactivation and idle collection by @ReubenBond in #10578
- docs(adonet): clarify production database configuration by @ReubenBond in #10593
- docs: clarify custom grain storage contract by @ReubenBond in #10590
- fix(docs): redirect legacy Orleans tutorials by @ReubenBond in #10619
- docs(persistence): clarify default provider registration by @ReubenBond in #10629
- docs: document multi-host container networking by @ReubenBond in #10607
- docs(streaming): add custom queue adapter guide by @ReubenBond in #10591
- fix(docs): isolate parallel snippet build outputs by @ReubenBond in #10611
- docs: add Orleans scenarios and use cases guide by @ReubenBond in #10603
- docs: clarify garbage collection configuration by @ReubenBond in #10606
- docs: explain grain balancing and scaling by @ReubenBond in #10604
- docs(streaming): explain Event Hubs slow-consumer pressure by @ReubenBond in #10628
- docs: consolidate operational and security guidance by @ReubenBond in #10554
- docs: document Orleans metrics monitoring guidance by @ReubenBond in #10605
- docs: show UseOrleans host configuration by @ReubenBond in #10647
- docs: publish machine-readable Markdown by @ReubenBond in #10656
- docs: add grain unit-testing guidance by @ReubenBond in #10644
- docs(streaming): document data adapters by @ReubenBond in #10645
- fix(docs): preserve angle brackets in code by @ReubenBond in #10658
- fix(docs): preserve code without markdown parser by @ReubenBond in #10660
- docs: add Markdown navigation overview by @ReubenBond in #10659
- docs(streaming): resolve stateless worker subscription guidance by @ReubenBond in #10654
- fix(docs): redirect obsolete running application guide by @ReubenBond in #10673
- docs: clarify production deployment walkthrough by @ReubenBond in #10677
- docs(streaming): clarify unsubscribe lifecycle by @ReubenBond in #10676
- docs(operations): add production cluster runbook guidance by @ReubenBond in #10675
- docs: document cluster membership API by @ReubenBond in #10701
- fix(docs): redirect legacy GitHub Pages routes by @ReubenBond in #10718
- docs: add advanced serialization codegen guide by @ReubenBond in #10715
- docs: link grain unit-testing guidance by @ReubenBond in #10674
- docs(reminders): document DynamoDB configuration by @ReubenBond in #10711
- docs: revise Orleans landing page by @ReubenBond in #10724
- fix(docs): preserve reminder sidebar links by @ReubenBond in #10725
- docs: split grain timers and reminders into focused pages by @ReubenBond in #10745
- docs(reminders): clarify loading-window scalability by @ReubenBond in #10737
- docs: document Orleans Journaling by @ReubenBond in #10749
- docs: remove redundant maintenance labels by @ReubenBond in #10753
- docs: add long-running reminder recipe by @ReubenBond in #10752
- docs: add deployment guides for supported hosting targets by @ReubenBond in #10746
- fix(docs): remove recovered NuGet links from allowlist by @ReubenBond in #10818
- test(docs): isolate linear link scan regression by @ReubenBond in #10836
Testing (117)
- test: use InProcessTestClusterBuilder in Azure stream reliability tests by @ReubenBond in #10222
- test: observe grain directory convergence in liveness tests by @ReubenBond in #10299
- fix(testing): track reminder schedules per owner by @ReubenBond in #10312
- test: fix grain directory nullability diagnostics by @ReubenBond in #10315
- test: wait for grain call before checking cancellation by @ReubenBond in #10319
- test(streaming): cover eventhub checkpoint flush on shutdown by @ReubenBond in #10321
- fix(testing): wait for async cleanup timer rearm by @ReubenBond in #10348
- fix(testing): enforce strict wait deadlines by @ReubenBond in #10373
- test: add ambiguous transaction write coverage by @ReubenBond in #10379
- test: add transaction storage recovery policy coverage by @ReubenBond in #10380
- fix(tests): synchronize timer delay in transactions tests by @ReubenBond in #10384
- test: make delayed queue rebalance waits event-driven by @ReubenBond in #10211
- test: exercise distributed grain directory in CI by @ReubenBond in #10399
- fix(test): make GrainId theories discoverable by @ReubenBond in #10404
- fix(tests): initialize Azure shard fixture services by @ReubenBond in #10420
- fix(tests): wait for gateways after silo restart by @ReubenBond in #10427
- fix(test): enforce async test lifetimes by @ReubenBond in #10408
- fix(testing): stabilize reminder diagnostic waiters by @ReubenBond in #10421
- test(reminders): make failover tests deterministic by @ReubenBond in #10400
- test: repair provider test traits by @ReubenBond in #10410
- test: stabilize stream reliability lifecycle waits by @ReubenBond in #10226
- test(streaming): retire stale queue balancer skips by @ReubenBond in #10417
- fix(tests): surface provider async failures by @ReubenBond in #10406
- test(reminders): stabilize Azure Table reminder tests by @ReubenBond in #10442
- test: categorize ordinary tests for CI by @ReubenBond in #10407
- test(transactions): re-enable GoldenPath coverage by @ReubenBond in #10443
- test(streaming): re-enable lease balancer crash recovery by @ReubenBond in #10444
- test(reminders): re-enable Azure list operations by @ReubenBond in #10446
- test: stabilize concurrent cancellation test by @ReubenBond in #10461
- fix(testing): isolate streaming readiness by silo by @ReubenBond in #10463
- test(testing): remove final wait timing race by @ReubenBond in #10468
- fix(testing): isolate relational storage databases by @ReubenBond in #10467
- test: make timed error grain test deterministic by @ReubenBond in #10448
- test(azure): stabilize queue visibility test by @ReubenBond in #10450
- test: stabilize heterogeneous client refresh by @ReubenBond in #10453
- test(reminders): stabilize Azure basic reminder test by @ReubenBond in #10456
- test(transactions): make fault injection deterministic by @ReubenBond in #10462
- fix(testing): prevent fatal errors from terminating test hosts by @ReubenBond in #10438
- test(adonet): fix provider trait coverage by @ReubenBond in #10405
- test(streaming): stabilize memory resume startup by @ReubenBond in #10466
- test(transactions): await storage recovery before reads by @ReubenBond in #10491
- test: stabilize shard overload backoff timing by @ReubenBond in #10488
- fix(tests): avoid Coverlet multi-target race by @ReubenBond in #10489
- test: migrate tests to Suite/Provider/Area traits by @ReubenBond in #10004
- test(adonet): avoid cross-clock timestamp assertions by @ReubenBond in #10501
- test: allow full rebalancer suspension duration by @ReubenBond in #10486
- test(transactions): accept uninterrupted graceful recovery by @ReubenBond in #10514
- test: stabilize multi-grain cancellation by @ReubenBond in #10525
- test: stabilize grain directory lease placement by @ReubenBond in #10526
- test(reminders): drive exact-due recovery delivery by @ReubenBond in #10531
- test(azure): bound table retry budget by @ReubenBond in #10534
- test(reminders): await fixture service readiness by @ReubenBond in #10535
- test(reminders): re-enable basic list operations by @ReubenBond in #10540
- test(transactions): tolerate load-induced consistency timeouts by @ReubenBond in #10524
- test(runtime): await manifest before shutdown migration by @ReubenBond in #10528
- test(transactions): preserve graceful recovery drain budget by @ReubenBond in #10537
- test(streaming): isolate memory batching fixture by @ReubenBond in #10542
- fix(testing): align stream provider readiness with assignments by @ReubenBond in #10543
- test(transactions): retry transient concurrency aborts by @ReubenBond in #10449
- feat(testing): add IGrainStorage provider test kit by @ReubenBond in #10490
- test(reminders): synchronize exact-due recovery by @ReubenBond in #10563
- fix(test): initialize ADO.NET fixtures asynchronously by @ReubenBond in #10560
- test(durable-jobs): synchronize fake-time polling by @ReubenBond in #10562
- test(azure): wait for reminder service startup by @ReubenBond in #10571
- test(durable-jobs): synchronize receiver completion by @ReubenBond in #10585
- test(durable-jobs): align retry wait timeout by @ReubenBond in #10586
- test: add model-based storage conformance to the persistence test kit by @ReubenBond in #10513
- test(adonet): stabilize SQL Server database resets by @ReubenBond in #10589
- fix(tests): allow restart addressing cancellation by @ReubenBond in #10636
- test: make membership cleanup tests deterministic by @ReubenBond in #10634
- fix(tests): synchronize failed transaction restore by @ReubenBond in #10630
- test: stabilize interleaving cancellation test by @ReubenBond in #10638
- test(grain-directory): make shutdown migration deterministic by @ReubenBond in #10610
- test(runtime): synchronize cancellation callback registration by @ReubenBond in #10609
- test(durable-jobs): avoid response timeout in concurrent scheduling by @ReubenBond in #10632
- test(reminders): synchronize Cosmos grain-type test by @ReubenBond in #10648
- test(runtime): reserve fake gateway port by @ReubenBond in #10669
- test(reminders): re-enable multi-grain join test by @ReubenBond in #10666
- test(reminders): serialize fixture refreshes by @ReubenBond in #10665
- test(runtime): preserve zero-delay cancellation path by @ReubenBond in #10664
- test(adonet): await SQL Server session drain by @ReubenBond in #10704
- test(runtime): keep one-way observers alive by @ReubenBond in #10707
- test: reduce shutdown test timeout by @ReubenBond in #10698
- fix(tests): stabilize reminder tick condition test by @ReubenBond in #10703
- refactor(testing): decouple persistence test kit from xUnit by @ReubenBond in #10692
- test(directory): assert rolling upgrade invariants by phase by @ReubenBond in #10705
- fix(testing): scope streaming resume wait deadlines by @ReubenBond in #10671
- fix(test): stabilize one-way call completion checks by @ReubenBond in #10717
- test(reminders): restore joined silos by @ReubenBond in #10709
- refactor(test): migrate to xUnit v3 by @ReubenBond in #10722
- build(test): migrate from VSTest to Microsoft.Testing.Platform by @ReubenBond in #10726
- fix(testing): make wait deadline tests deterministic by @ReubenBond in #10738
- fix(testing): stabilize Event Hubs resume startup by @ReubenBond in #10741
- fix(test): retry SQL Server database reset by @ReubenBond in #10744
- test(runtime): make duplicate activation stress deterministic by @ReubenBond in #10742
- test(durable-jobs): isolate Azure storage per test by @ReubenBond in #10740
- fix(test): synchronize manual repartitioning rounds by @ReubenBond in #10732
- test: fix ConfirmationWorker retry timer race by @ReubenBond in #10768
- test: disable DiffEngine in automated runs by @ReubenBond in #10769
- chore(test): align .NET 10 runtime package versions by @ReubenBond in #10758
- fix(test): isolate EventSourcing counter perf tests by @ReubenBond in #10770
- fix(test): isolate membership completion waits by @ReubenBond in #10771
- test(directory): validate split handoff invariants by @ReubenBond in #10772
- fix(test): retry SQL Server setup login by @ReubenBond in #10774
- test(runtime): keep cancellation observers alive by @ReubenBond in #10790
- test(reminders): add provider conformance TestKit by @ReubenBond in #10785
- test(directory): defer upgrade invariants until convergence by @ReubenBond in #10795
- fix(test): await reminder range reconciliation by @ReubenBond in #10794
- fix(test): isolate stateless worker stream deliveries by @ReubenBond in #10793
- test(streaming): await subscription cursor drain by @ReubenBond in #10792
- test(transactions): synchronize local abort dispatch by @ReubenBond in #10791
- fix(test): own SQL Server schema setup connection by @ReubenBond in #10803
- fix(test): follow latest reminder reconciliation by @ReubenBond in #10815
- fix(test): await ReminderTestKit service startup by @ReubenBond in #10813
- test(streaming): cover first production during deactivation by @ReubenBond in #10811
- test: remove delays from async executor tests by @ReubenBond in #10834
- fix(test): retain SQL Server setup ownership by @ReubenBond in #10823
CI, build, dependencies & repository maintenance (34)
- ci: enable GitHub autobaseline for nightly-main pipeline by @ReubenBond in #10297
- chore(deps): bump dompurify from 3.4.11 to 3.4.12 in /src/Dashboard/Orleans.Dashboard.App by @dependabot[bot] in #10303
- refactor: enable nullable reference types across Orleans by @ReubenBond in #10291
- chore(deps): bump postcss from 8.5.15 to 8.5.25 in /src/Dashboard/Orleans.Dashboard.App by @dependabot[bot] in #10305
- chore(deps-dev): bump fast-uri from 3.1.4 to 3.1.5 in /docs/site by @dependabot[bot] in #10343
- chore(deps): bump mermaid from 11.15.0 to 11.16.1 in /src/Dashboard/Orleans.Dashboard.App by @dependabot[bot] in #10350
- chore(deps): bump dompurify from 3.4.12 to 3.4.13 in /src/Dashboard/Orleans.Dashboard.App by @dependabot[bot] in #10351
- chore(deps): bump js-yaml from 4.3.0 to 4.3.1 in /docs/site by @dependabot[bot] in #10346
- build: validate samples against locally packed Orleans packages by @ReubenBond in #10388
- chore: add repository code owners by @ReubenBond in #10419
- ci: enforce build and test results by @ReubenBond in #10402
- ci: cover omitted maintained tests by @ReubenBond in #10416
- fix(ci): include omitted provider tests by @ReubenBond in #10403
- fix(ci): wait for SQL Server query readiness by @ReubenBond in #10441
- ci: capture SQL Server failure diagnostics by @ReubenBond in #10487
- Enable Copilot Knowledge Base by @ReubenBond in #10494
- fix(security): remediate repository alerts by @ReubenBond in #10516
- Disable Copilot Knowledge Base by @ReubenBond in #10517
- ci: add MariaDB registry fallback by @ReubenBond in #10559
- fix(dashboard): add ESLint flat configuration by @ReubenBond in #10567
- fix(ci): retry transient dashboard npm restores by @ReubenBond in #10561
- Update vulnerable SSH.NET and nanoid dependencies by @ReubenBond in #10678
- build(deps): bump dotnet-sdk from 10.0.302 to 10.0.400 by @dependabot[bot] in #10686
- fix(deps): update Polly.Extensions to 8.6.5 by @ReubenBond in #10786
- ci: publish .NET test results on pull requests by @ReubenBond in #10730
- fix(ci): publish .NET test results with allowed actions by @ReubenBond in #10750
- ci: report code coverage on pull requests by @ReubenBond in #10733
- fix(ci): collect coverage during test runs by @ReubenBond in #10755
- fix(ci): preserve complete coverage data by @ReubenBond in #10787
- [Automated] Update API Surface Area by @github-actions[bot] in #10799
- fix(ci): retry transient artifact uploads by @ReubenBond in #10837
- fix(ci): retry transient coverage initialization failure by @ReubenBond in #10839
- ci: publish Azure Pipelines code coverage by @ReubenBond in #10842
- fix(ci): limit coverage to Orleans assemblies by @ReubenBond in #10843
New Contributors
- @danielmeza made their first contribution in #10254
- @wenwangcode made their first contribution in #10136
- @tomaszstrejczek made their first contribution in #9125
- @juan-arias made their first contribution in #8896
- @jaironalves made their first contribution in #9823
- @vladrai made their first contribution in #10276
- @jsedlak made their first contribution in #9328
- @BernhardPollerspoeck made their first contribution in #9537
Full Changelog: v10.2.2...v10.3.0