Skip to content

0.7.2

Choose a tag to compare

@jeremydmiller jeremydmiller released this 16 Aug 14:53
· 7 commits to main since this release
fa273a9

Three issues, on JasperFx 2.49.0 / Weasel 9.24.0.

⚠️ One behaviour change

The on-demand document table path now honours AutoCreate.None (#81). Fisher creates a document type's table on demand, the first time something reads or writes one. Under AutoCreate.None that path now checks instead of creating, and throws naming the document type if its table is missing — matching HiloSequence, which already declined, so the store no longer disagrees with itself.

If you deploy with AutoCreate.None, apply your schema out of band — and re-apply it after registering a new projection, since that registration is what maps the snapshot's document type. An existing table is not an error, so a store that already applies its schema properly is unaffected.

Fixes

FetchLatest<T> no longer synthesises a phantom aggregate (#88). On a stream that exists but holds no event T handles, FetchLatest returned a default-constructed aggregate where Marten and Polecat return null — the polecat#463 class, found by the CritterWatch port.

That matters because FetchLatest<T>(id) is null is the idiomatic "does this aggregate exist?" probe, so the probe was satisfied by any stream id holding events at all. And a default is not neutral: with a bool IsActive defaulting to true, the phantom read as an active alert for a service that had none.

An Inline-projected aggregate is now read from its projected document, which is what the write side already believed — the inline projection screens out streams it does not own, which is why no row was ever written for them.

New

LoadAsync<T>(object) (#89), the document contract's eighth operation from jasperfx#665. Public on IQuerySession alongside LoadAsync<T, TId>, matching Marten and Polecat so a consumer moving between the stores meets one spelling. It resolves a strong-typed wrapper, a raw value the wrapper is over, and the four canonical identity types alike.

The four canonical overloads are more specific and still win overload resolution, so no existing call site changes.

Compliance

32 suites, 275 tests, all green — 230 event and 45 document. 2.49.0 added no new suite file but widened DocumentLoadAndStoreCompliance by three tests for the new member.

Full suite 1250 green on net9.0 and net10.0, plus 36 in Fisher.AspNetCore.Tests and 13 in Fisher.EntityFrameworkCore.Tests.