Skip to content

HostLoom 0.15.1

Choose a tag to compare

@kidoz kidoz released this 12 Oct 16:44
· 16 commits to main since this release

The sixteenth release of HostLoom. Nothing in it changes a signature an application compiles against: it changes what the packages let a reader see, how the Redis adapters resolve their connection when an application registers a multiplexer beside them, and which versions the whole set builds on.

HostLoom.Caching no longer discards an explicit write. A SetAsync that overlapped an invalidation — routine while a Redis or Valkey subscription is being established, because the first acknowledged subscription raises a flush — was a silent no-op: the value reached neither tier, no error surfaced, and the next read missed without reporting degradation. An explicit set now always reaches the distributed tier, as SetIfAbsentAsync and WarmupAsync already did; only the in-process commit stays generation-guarded, and a factory's result is still discarded when an invalidation overlaps the fill.

Every framework package except HostLoom.Analyzers now ships an XML documentation file. Generation is enabled for every project beneath src/ except that package and the composition generator compiler, whose assemblies run inside a build rather than in an application, and the API comments are completed where parameters went undocumented, so IntelliSense and documentation tooling surface the same remarks the sources already carried. Nothing is enforced by it: there is no documentation-coverage gate, CS1591 stays suppressed for the members that remain undocumented, and no member gained or lost a signature.

UseRedis composes RedisCacheStore and RedisLockProvider over the RedisConnection the caching and locking builders share. Both types also offer a constructor for an application-supplied IConnectionMultiplexer, so registering a multiplexer beside HostLoom left two resolvable constructors for each; the registration now names the shared connection, both adapters retain the configured Redis options, and an application no longer has to replace the lock-provider registration by hand. A store or provider that an application registered itself is still used as it is.

The pinned dependencies move forward, with one hold: Confluent.Kafka stays at 2.15.1 because 2.16.0 fails Kafka topic administration against Apache Kafka 3.9, which the transport integration suite reproduces on every run. HostLoom.Valkey advertises the Native AOT compatibility it already declared through the aot package tag.

No package is published for the first time; the whole set publishes at 0.15.1. @hostloom/websocket-client is not part of this NuGet set and has no changes since its 0.3.0 release.

Added

  • Every shipped framework package now carries its XML documentation file. Documentation generation is enabled for all source projects except the analyzers and the composition generator compiler, and the existing API comments are completed where parameters went undocumented, so IntelliSense and documentation tooling surface the same remarks the sources already carried.

Changed

  • Update MessagePack from 3.1.10 to 3.1.11, including its upstream fix for an LZ4 decompression integer overflow (GHSA-7rj2-5w9w-r9jx), StackExchange.Redis from 3.3.1 to 3.4.0, and xunit.v3 from 4.0.1 to 4.0.2. Confluent.Kafka stays at 2.15.1.
  • HostLoom.Valkey advertises its Native AOT compatibility through the aot package tag, matching its IsAotCompatible declaration.

Fixed

  • TieredCache writes an explicit SetAsync to the distributed tier even when an invalidation moves the key's generation between the write's capture and its commit. The write was previously discarded entirely — the value reached neither tier, nothing was reported, and a later read missed without degrading. The flush an invalidation channel raises as a subscription is established is enough to hit it, which is how the container-built Valkey cache exposed it. A factory result is still discarded when an invalidation overlaps the fill, and the in-process commit stays generation-guarded.
  • HostLoom.Redis explicitly constructs RedisLockProvider and RedisCacheStore over the shared RedisConnection when selected through UseRedis. Registering an IConnectionMultiplexer alongside HostLoom no longer causes ambiguous-constructor failures. Both adapters retain the configured Redis options, and applications no longer need to replace the lock-provider registration manually. Existing caller-provided instances and factories remain in use.