From 735b002a1978c4e4474be9d373eac86a87f395cb Mon Sep 17 00:00:00 2001 From: JohnnyT Date: Wed, 30 Sep 2026 00:30:43 -0600 Subject: [PATCH 1/2] Carries the 0.24.0 minor in the upgrading page Adds a "0.23 to 0.24" section in the page's minor shape, one section with no patch subsection, as "0.21 to 0.22" is. Schema: NONE; the migrations module still holds V01 through V08, and nothing under lib/statifier_persistence/ecto/ changed since v0.23.1. It names the two things a host sees: - the per-chart advisory lock is keyed by the store as well as the content hash, so two stores in one Postgres database no longer wait on each other; the first key is unchanged, so a host whose own locks use another first key sees no overlap it did not see before; - the conformance suite's names in a using module carry one reserved prefix, so a host test module that called a suite helper by its old name adds the prefix. The title, the opening paragraph, the pin chain and the schema sentence move on to 0.24. A change touching no Elixir code; the full gate runs on the release commit's tree, which carries this one. Refs: sp-7ghq --- docs/upgrading.md | 37 +++++++++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) 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**. From d5491c4a425bb76a2af06c9ae3eb4e3fc693ecfc Mon Sep 17 00:00:00 2001 From: JohnnyT Date: Wed, 30 Sep 2026 00:33:12 -0600 Subject: [PATCH 2/2] Releases v0.24.0 Bumps @version to 0.24.0 and moves the README install pin to `~> 0.24.0`. A minor, not a patch: the per-chart advisory lock's key now carries the store (chart_store/1 in StatifierPersistence.Storage.Ecto), which a dated Amendment on the retention record decides, and the shipped conformance suite renames the names it defines in a host test module under one reserved prefix, a public injected function among them. Read in the lib/ diff since v0.23.1: - storage/ecto.ex: chart_lock/3 hashes chart_store(opts) with the content hash as the second key; the first key, @chart_lock_namespace, is unchanged. Two private helpers, chart_store/1 and quote_identifier/1. Fragment sp-j6vh.md. - testing/storage_conformance.ex: every injected attribute, private helper and nested module moves under `conformance_` / `Conformance`, and __conformance_forward_adapter_call__/4 becomes conformance_forward_adapter_call/4. No case is added or removed. Fragment sp-b3y4.md. No closed set a host matches grows: Executions.error/0, Storage.error/0, the adapter behaviour's callbacks and telemetry events/0 are unchanged. No migration: the migrations module holds V01 through V08, and nothing under lib/statifier_persistence/ecto/ changed. The statifier floor stays ~> 2.9. docs/upgrading.md carries the "0.23 to 0.24" section in the commit before this one. Promotes changelog.d/sp-b3y4.md and changelog.d/sp-j6vh.md (both Changed) into a `## [0.24.0] 2026-09-30` section and deletes them. The bullets are carried over byte for byte; the lead paragraphs are the only prose written here: the release kind and the upgrade note. The heading carries no `-` separator and the date is this machine's local date. The header's changelog.d/ link moves to v0.24.0. No link-reference block is added. No published section is edited. Gate: full `mix quality` green on this exact staged tree, write-tree ed0a57c630c927ba3d67219fb51e9fbe3816c873 (format, compile with warnings-as-errors, doc links, deps, credo, docs, 1,427 of 1,427 tests at 95.8% coverage, dialyzer), with the repo gate lock and a machine slot held across the run and this commit; Postgres answered on 5432. `mix hex.build` built statifier_persistence 0.24.0. No tag, no publish. Refs: sp-7ghq --- CHANGELOG.md | 20 +++++++++++++++++++- README.md | 2 +- changelog.d/sp-b3y4.md | 3 --- changelog.d/sp-j6vh.md | 3 --- mix.exs | 2 +- 5 files changed, 21 insertions(+), 9 deletions(-) delete mode 100644 changelog.d/sp-b3y4.md delete mode 100644 changelog.d/sp-j6vh.md 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/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