Repository navigation
Releases 2.15.0 - #458
Merged
Merged
Releases 2.15.0#458
Conversation
The title and the intro's range move from 2.14.0 to 2.15.0, and the
intro gains one sentence naming the hosts 2.15.0's changed answer
reaches. A 2.15.0 section closes the page in the house shape, written
from the fragment's host-facing sentences:
- a host must change only where the new compile refusal reaches it: a
chart that calls a function that is not In, a predicator builtin or a
declared host function is refused with {:unknown_function, name,
source}, where it compiled and raised error.execution at each call;
- a host may start registering host functions with :function_providers
(or declaring names with :function_names), with the purity contract,
the resume and replay re-stamp, and the invoke non-inheritance;
- the conformance corpus does not change.
Documentation only: no changelog.d fragment, as changelog.d/README.md
excludes documentation.
Refs: st-3tmk
Assembles the host function providers fragment into a 2.15.0 section and deletes it, moves mix.exs @Version to 2.15.0, and moves the README requirement to ~> 2.15. The lead paragraph names the new option and the compile refusal. Every bullet is carried byte for byte. ADR-0066's SemVer commitment makes this a minor release: the release adds the :function_providers and :function_names options, and the undeclared-function check stays at compile time as built (ruled by the operator, 2026-10-12). Statifier.Compiler.Error's closed reason union grows by {:unknown_function, name, source}, which the Changed section carries: a chart refused by it used to compile and raise error.execution at every evaluation of the call. No runtime dependency requirement moves and the conformance corpus does not change. Committed on the staged tree the full mix quality and mix quality --profile merge ran green on (write-tree e0431c6 before the commit). Prep only: the tag and the publish are not part of this commit. Refs: st-3tmk
- The intro says why 2.15.0's compile refusal is listed under Changed and not as a Breaking entry: it refuses only a chart whose call raised error.execution whenever it was evaluated. - The must-change bullet names a chart stored before 2.15.0 and recompiled under it, from its source or a Statifier.Chart blob. - Step 2 says that compile/2 and MachineState.new/2 raise ArgumentError for a provider list that does not resolve, where start_link/2 refuses. - Step 5 adds, as the guide says, that a chart given as <invoke> content cannot call a host function. Refs: st-3tmk
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release prep for statifier 2.15.0. The prep only: the desk merges, tags v2.15.0 at the merge SHA and pushes the tag; release.yml publishes on the tag push.
The version and why
2.15.0, a minor. The release adds the
:function_providersand:function_namesoptions (ADR-0078), andStatifier.Compiler.Error's closed reason union,t:reason/0, grows by{:unknown_function, name, source}: a chart whose expressions call a function that is notIn, a predicator builtin or a declared host function is refused at compile time, where it compiled and raisederror.executionat every evaluation of the call. The check stays at compile time as built, ruled by the operator, 2026-10-12, who named this release the same day. The fragment carries the refusal under Changed; none is a Removed or Deprecated entry.The closed-set answer
Read from
git diff v2.14.0..origin/main -- liband the fragment, for a new member of a closed vocabulary a host pattern-matches:Statifier.Compiler.Errort:reason/0gains{:unknown_function, name :: String.t(), source :: String.t()}. This is the one new member of a closed union.Statifier.Session.start_link/2can answer{:error, {:function_providers, reason}}for a provider list that does not resolve, before it starts anything.Statifier.MachineStategains afunctionsfield andput_function_providers/2;Statifier.Positiondrops the field as it dropsinvoke_typesandsend_types.Statifier.Chart.from_binary/1answers:not_a_statifier_blobfor a blob carrying:function_providersor a:function_namesthat is not a list of strings, an existing answer.No runtime dependency requirement or lock line moves since v2.14.0, and the conformance corpus does not change.
Fragments promoted
Into
## [2.15.0] 2026-10-12, each bullet byte for byte, then deleted (changelog.d/README.mdstays):changelog.d/st-g648.mdThe heading carries no dash and the file gains no link reference (
.claude/wurk/release.mdstep B). The lead paragraph names the new option and the compile refusal; it makes no "registers nothing" claim, as no send type changes.The upgrading page
A separate commit, as
docs/upgrading.mdis outside the release commit's files. The title and the intro's range move to 2.15.0, and a new intro sentence names the hosts 2.15.0's changed answer reaches. The 2.15.0 section, written from the fragment's host-facing sentences::function_providers, or declare its name with:function_names; add a clause for the new reason where the compiler's reasons are matched exhaustively). A~> 2.14requirement already accepts 2.15.0.<invoke>does not inherit the list. Requires~> 2.15.The commits
.claude/wurk/release.md's files,mix.exs@version "2.15.0", the README pin{:statifier, "~> 2.15"}, theCHANGELOG.mdsection and the deleted fragment. Committed on the staged tree the fullmix qualityandmix quality --profile mergeran green on, with no change between the green runs and the commit, the repository's gate lock and a machine slot held across both runs and the commit.Gate
Full
mix qualitygreen and attested on the final tree (3,329 of 3,329 tests, 96.3% coverage, Dialyzer clean, regression ratchet and conformance corpus passed, README stage green), andmix quality --profile mergegreen; its ADR judge skipped, as no file in this diff is in a judged scope. Earlier runs on the same tree, on a heavily loaded machine, failed only on Basic HTTP timing cases (the regression ratchet's optional Basic HTTP cases andStatifier.Send.BasicHTTPSessionTest's delayed-send cases), which pass when run alone; this diff touches no code.Review round: wurk-diff-critic, one fresh round over origin/main...f7525a3, returned 3 findings (none must-fix). All 3 fixed in acea473, on the upgrading page only: the intro now says why the compile refusal is listed under Changed and not as a Breaking entry (it refuses only a chart whose call raised
error.executionwhenever it was evaluated; the fragment bullet is carried byte for byte and minor follows the 2.14.0 precedent); the must-change bullet names a chart stored before 2.15.0 and recompiled under it; and the may-start steps say thatcompile/2andMachineState.new/2raiseArgumentErrorfor a bad provider list and that a chart given as<invoke>content cannot call a host function. Head reviewed: f7525a3; head after fixes: acea473. The full gate andmix quality --profile mergeran green again on acea473.After the merge
The desk merges, pulls main, tags v2.15.0 at the merge SHA and pushes the tag; release.yml publishes on that tag push. Nothing in this PR tags or publishes.