Skip to content

Prepares 0.9.0 - #140

Merged
johnnyt merged 1 commit into
mainfrom
sr-gffo-release-0-9-0
Sep 30, 2026
Merged

johnnyt merged 1 commit into
mainfrom
sr-gffo-release-0-9-0

Conversation

@johnnyt

@johnnyt johnnyt commented Sep 30, 2026 •

Copy link
Copy Markdown
Member

Prepares 0.9.0

The release prep for statifier_router 0.9.0. It does the bump and the changelog promotion and nothing else, in the four files the release recipe names (.claude/wurk/release.md, "The files a release commit touches"):

  • mix.exs: @version goes from 0.8.0 to 0.9.0.
  • CHANGELOG.md: a ## [0.9.0] 2026-09-30 section directly below the header. It has a lead paragraph and an upgrading paragraph, then the one fragment's ### Added bullets carried over byte for byte. The header's changelog.d/ link moves to blob/v0.9.0 (step 7).
  • changelog.d/sr-xgi8.md: deleted. It was the only fragment added since v0.8.0 (git diff v0.8.0..origin/main --stat -- changelog.d). changelog.d/README.md stays.
  • README.md: the install pin goes from ~> 0.8.0 to ~> 0.9.0, the exact-minor form.

No tag and no publish. The merge and the annotated tag at the merge SHA belong to the conductor, and mix hex.publish belongs to the operator. mix hex.build builds 0.9.0. The tar it wrote was deleted before the commit.

Why a minor

git diff v0.8.0..origin/main --stat -- lib is non-empty (the BasicHTTP front). Every public surface change since v0.8.0 adds something, and none removes or narrows anything:

  • New modules: StatifierRouter.BasicHTTP, StatifierRouter.BasicHTTP.Front, StatifierRouter.Schema.Location and StatifierRouter.Migrations.V04.
  • New functions: StatifierRouter.Migrations.up_locations/1 and down_locations/1.
  • A new configuration key, :basichttp. Before this release, StatifierRouter.Config.new/1 refused it as {:unknown_key, :basichttp}. So every new refusal the key brings reaches only a configuration that sets it: the reserved basichttp binding id, {:exclusive_keys, :basichttp, :send_types} and {:declared_send_types, type} for either processor string. A configuration without the key builds the same snapshot and reserves only execution, as before.
  • StatifierRouter.Config's table type and new_error union grow by one member each (:locations, and the new exclusive-keys pair). Only a configuration or call that uses the new surface reaches either one.
  • StatifierRouter.Migrations.up/1 and down/1 walk the same versions as in 0.8.0. V04 is opt-in and outside the version walk.
  • The remaining lib/ changes are moduledoc text (Addresses, Schema, Schema.Id, SendHandler, Webhook, and the Delivery note on the persistence reentrancy refusal) plus three code changes that run only for a configuration that sets :basichttp: Delivery.locate/3 inserts a location row on an :if_absent insert, create_options/2 reads the new @doc false Config.create_persistence_options/2 (which answers the configuration's persistence options unchanged when the key is unset), and Migrations.package_columns/2 became a @doc false public helper (a refactor of the existing column refusal). None changes what a configuration without the key sees.

The statifier floor moves from ~> 2.9 to ~> 2.10. This does not break any API, but a host sees it: a host still on statifier 2.9 has to upgrade statifier to take this release. The lead's upgrading paragraph says so. The statifier_persistence floor does not move.

The upgrading note

The step is in the changelog's upgrading paragraph, the same place the 0.8.0 section put its step:

  • A host that does not set :basichttp changes nothing apart from the statifier floor.
  • A host that wants the front sets :basichttp and adds one migration calling up_locations/1, with down_locations/1 on rollback.

The README's "Upgrading the tables" already carries the V04 migration with both calls, so the README gains nothing beyond the pin.

Gate

Full mix quality ran on this exact tree (git write-tree 54f485d8 before and after the run). The repo gate lock and a machine slot were held from the run through the commit. The run's output:

Running quality checks...

✓ Format: No changes needed (326ms)
✓ Compile: dev + test compiled (warnings as errors) (29.9s)

Running analysis stages in parallel...

○ Doctor: skipped (:doctor not installed)
○ Gettext: skipped (:gettext not installed)
○ Sobelow: skipped (:sobelow not installed)
✓ Isolated tests: Passed (1.9s)
✓ Doc links: 1 link checked (10ms)
✓ Dependencies: No unused dependencies (404ms)
✓ Credo: No issues (1.4s)
✓ Docs: No warnings (1.4s)
✓ Tests: 420 of 420 passed, 97.7% coverage (3.0s)
⋯ Dialyzer: building PLT (this is a one-time cost)
✓ Dialyzer: No warnings (PLT built this run) (46.7s)

✓ All quality checks passed!

The three skipped stages are tools this project does not install.

Refs: sr-gffo

The bump and the changelog promotion, and nothing else: `mix.exs`'s
`@version`, which `StatifierRouter.version/0` and the docs'
`source_ref` both read; the one `changelog.d/` fragment on main
(sr-xgi8) assembled into a `## [0.9.0] 2026-09-30` section under a
lead paragraph and an upgrading paragraph, and deleted in the same
commit, every bullet carried over byte for byte; the header's
`changelog.d/` link moved to `blob/v0.9.0`; and the README install pin
moved from `~> 0.8.0` to `~> 0.9.0`, as a minor
moves it.

A minor, because the release adds public surface and removes or
narrows none: `StatifierRouter.BasicHTTP`, `StatifierRouter.BasicHTTP.Front`,
`StatifierRouter.Schema.Location` and `StatifierRouter.Migrations.V04`
are new modules; `up_locations/1` and `down_locations/1` are new
functions; `:basichttp` is a new configuration key, which `new/1`
refused as unknown before, so every refusal it brings (the reserved
`basichttp` binding id, `{:exclusive_keys, :basichttp, :send_types}`,
`{:declared_send_types, type}` for either processor string) reaches
only a configuration that sets it. `up/1` and `down/1` walk the same
versions as in 0.8.0. The statifier floor moves from `~> 2.9` to
`~> 2.10`; the upgrading paragraph says a host still on statifier 2.9
upgrades statifier to take this release. The statifier_persistence
floor does not move.

No tag and no publish: the merge and the tag are the conductor's, the
publish the operator's. `mix hex.build` builds 0.9.0; the tar it wrote
was deleted before this commit.

Full `mix quality` green under the repo gate lock and a machine slot on
this exact tree (write-tree 54f485d before and after the run), held
across this commit: format, compile, isolated tests, doc links, deps,
credo, docs, 420 of 420 tests at 97.7% coverage, dialyzer.

Refs: sr-gffo
@johnnyt
johnnyt merged commit e38142f into main Sep 30, 2026
1 check passed
@johnnyt
johnnyt deleted the sr-gffo-release-0-9-0 branch September 30, 2026 16:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant