diff --git a/CHANGELOG.md b/CHANGELOG.md index dc4e51e..470ef8d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,10 +6,28 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Entries for unreleased work are not written here directly. Each issue drops a -fragment in [`changelog.d/`](https://github.com/riddler/statifier_persistence/blob/v0.23.1/changelog.d/README.md); the fragments are assembled +fragment in [`changelog.d/`](https://github.com/riddler/statifier_persistence/blob/v0.24.0/changelog.d/README.md); the fragments are assembled into a version section at release. See that README for the format and for when a change warrants an entry at all. +## [0.24.0] 2026-09-30 + +Feature release: on Postgres, `StatifierPersistence.Storage.Ecto` keys +its per-chart advisory lock by the store as well as the content hash, so +two stores in one database no longer wait on each other, and +`StatifierPersistence.Testing.StorageConformance` names everything it +defines in a host test module under one reserved prefix. + +Upgrading: no schema migration, the `statifier` floor stays `~> 2.9`, +and no answer a host matches is added or removed. **A host test module +that called one of the conformance suite's helpers by its old name adds +the `conformance_` prefix.** See `docs/upgrading.md`, "0.23 to 0.24". + +### Changed + +- `StatifierPersistence.Testing.StorageConformance` defines every attribute, function and nested module it puts into a host test module under one reserved prefix, `conformance_` (`Conformance` for a nested module), and its moduledoc states that prefix as the host contract, so a host module's own helpers no longer collide with the suite's; a host test module that called one of the suite's helpers by its old name (`input_log_execution/2`, for one) adds the prefix, and the telemetry handler `__conformance_forward_adapter_call__/4` is now `conformance_forward_adapter_call/4`. +- `StatifierPersistence.Storage.Ecto` keys its per-chart advisory lock on Postgres by the store (the chart table under its prefix) as well as the content hash, so two stores in one database no longer wait on each other for a hash they share; every caller of one store still shares the lock, the first key is unchanged, and a host that held its own advisory locks against the old key sees no overlap it did not see before. + ## [0.23.1] 2026-09-29 Patch release: `StatifierPersistence.Testing.StorageConformance` no diff --git a/README.md b/README.md index ad1058a..771475c 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ crash semantics. This package is that loop, packaged. ```elixir def deps do [ - {:statifier_persistence, "~> 0.23.0"}, + {:statifier_persistence, "~> 0.24.0"}, # Optional, for the Postgres adapter: {:ecto_sql, "~> 3.10"} ] diff --git a/changelog.d/sp-b3y4.md b/changelog.d/sp-b3y4.md deleted file mode 100644 index 86a268f..0000000 --- a/changelog.d/sp-b3y4.md +++ /dev/null @@ -1,3 +0,0 @@ -### Changed - -- `StatifierPersistence.Testing.StorageConformance` defines every attribute, function and nested module it puts into a host test module under one reserved prefix, `conformance_` (`Conformance` for a nested module), and its moduledoc states that prefix as the host contract, so a host module's own helpers no longer collide with the suite's; a host test module that called one of the suite's helpers by its old name (`input_log_execution/2`, for one) adds the prefix, and the telemetry handler `__conformance_forward_adapter_call__/4` is now `conformance_forward_adapter_call/4`. diff --git a/changelog.d/sp-j6vh.md b/changelog.d/sp-j6vh.md deleted file mode 100644 index 799547e..0000000 --- a/changelog.d/sp-j6vh.md +++ /dev/null @@ -1,3 +0,0 @@ -### Changed - -- `StatifierPersistence.Storage.Ecto` keys its per-chart advisory lock on Postgres by the store (the chart table under its prefix) as well as the content hash, so two stores in one database no longer wait on each other for a hash they share; every caller of one store still shares the lock, the first key is unchanged, and a host that held its own advisory locks against the old key sees no overlap it did not see before. diff --git a/docs/upgrading.md b/docs/upgrading.md index d7a672b..47d3fca 100644 --- a/docs/upgrading.md +++ b/docs/upgrading.md @@ -1,7 +1,7 @@ -# Upgrading a host from 0.13 to 0.23 +# Upgrading a host from 0.13 to 0.24 This page says what a host changes to move `statifier_persistence` from -0.13.0 to 0.23.0, one minor at a time. A host here is the code that +0.13.0 to 0.24.0, one minor at a time. A host here is the code that embeds the package: the module that calls `use StatifierPersistence.Ecto`, the migrations it runs, the options it passes to `StatifierPersistence.Executions` and `StatifierPersistence.Driver`, the @@ -14,7 +14,7 @@ Take the minors in order, and move the pin with each one, as the README recommends: `{:statifier_persistence, "~> 0.14.0"}`, then `"~> 0.15.0"`, then `"~> 0.16.0"`, then `"~> 0.17.0"`, then `"~> 0.18.0"`, then `"~> 0.19.0"`, then `"~> 0.20.0"`, then `"~> 0.21.0"`, then `"~> 0.22.0"`, -then `"~> 0.23.0"`. +then `"~> 0.23.0"`, then `"~> 0.24.0"`. The `statifier` floor stays `~> 2.6` through 0.17.0; 0.18.0 moves it to `~> 2.9`, and every later release keeps it there. @@ -34,7 +34,7 @@ with its own migration, and an install still short of V06 follows the V06 ordering rule in the `StatifierPersistence.Ecto.Migrations` documentation first. No release before 0.17.0 adds a migration; 0.17.0 does (V08, under "0.16 to 0.17"), and -no release from 0.18.0 through 0.23.0 adds one, and neither does the +no release from 0.18.0 through 0.24.0 adds one, and neither does the 0.23.1 patch. ## 0.13 to 0.14 @@ -419,3 +419,32 @@ answer a host matches is added or removed. cases that retire a hash after a create's or a migration's first check: each module that uses the suite now retires chart hashes of its own, derived from the module's name. Nothing in your suite changes. + +## 0.23 to 0.24 + +Schema: **NONE**. The `statifier` floor stays `~> 2.9`, and no answer a +host matches is added or removed. + +- **If two stores share one Postgres database**, two hosts or two test + suites each with its own charts table, they no longer wait on each + other for a chart hash they share: the Ecto adapter's per-chart + advisory lock is now keyed by the store (the charts table under its + prefix) as well as the content hash. Every caller of one store still + shares the lock, and creates, migrations and retirements on one store + are ordered as in 0.23.0. The lock's first key, `1397769032`, is + unchanged, so a host whose own two-key advisory locks use another + first key, as "0.22 to 0.23" asks, sees no overlap it did not see + before. What the lock reaches is in + [What the chart lock reaches](chart-lock.md). **NONE**. +- **If a test module of yours uses + `StatifierPersistence.Testing.StorageConformance` and calls one of the + helpers the suite defines in it** (`input_log_execution/2`, for one), + add the prefix to the call: every attribute, function and nested + module the suite puts into your module is now named under one reserved + prefix, `conformance_` (`Conformance` for a nested module), and the + suite's moduledoc states that prefix as the contract. The telemetry + handler `__conformance_forward_adapter_call__/4` is now + `conformance_forward_adapter_call/4`. A helper of your own that shared + a name with one of the suite's no longer collides with it; one named + under the prefix does. A module that calls none of the suite's + helpers: **NONE**. diff --git a/mix.exs b/mix.exs index a1b5f56..8978ac8 100644 --- a/mix.exs +++ b/mix.exs @@ -1,7 +1,7 @@ defmodule StatifierPersistence.MixProject do use Mix.Project - @version "0.23.1" + @version "0.24.0" @source_url "https://github.com/riddler/statifier_persistence" def project do