Skip to content

Name the next release 2.1.0, with the performance pair and the #746 tier note - #914

Merged
Rafael-SOWNet merged 1 commit into
masterfrom
release/2.1.0
Aug 12, 2026
Merged

Name the next release 2.1.0, with the performance pair and the #746 tier note#914
Rafael-SOWNet merged 1 commit into
masterfrom
release/2.1.0

Conversation

@Rafael-SOWNet

Copy link
Copy Markdown
Collaborator

Release preparation for 2.1.0, carrying the two checklist items 2.0.0 shipped without.

The version

Version and FileVersion go to 2.1.0; AssemblyVersion stays 2.0.0.0, which is what the comment
beside it asks for — the assembly is strong-named, so every AssemblyVersion change breaks binding for a
consumer without a redirect, and holding it makes each 2.x a drop-in replacement.

Not a patch. The sixteen commits since the tag change answers, withdraw two deliberately, and reserve a
word (NaN).

The performance pair

v2.0.0 (the 1691st commit) against the candidate (the 1707th), 18 benchmarks each, measured minutes
apart on one machine in one session — because columns from different hardware cannot be read as a ratio,
which is what the top of that file has always said.

No regression. The largest real move is SolveMedium at +4.6%; the rest sits inside ±3%. Allocation
is flat, and Derivate, EvalTrig and EvalTrigPrecise are byte-identical.

It corrects the pair above it

That one reported SimplifyEasy at +8.7%, attributed it to guards calling Evaled inside a pattern's
when clause, and asked for "a measurement of its own before more guards are written that way".

Six more guards of exactly that shape have landed since — #887's interval tests, #892's zero test, #881's
sign read, #902's positivity check, #897's sort guard. SimplifyEasy is +2.1% here, and its
allocation moves 0.5%. If the guards were the cause, the row should have moved further and allocation
should have followed, since Evaled allocates on its first call per node. Neither happened.

So the +8.7% was mostly the machine, the attribution in that section was wrong, and the action item it
raised is discharged — the pattern is not measurably expensive at this scale. Recorded in the file, since
the wrong reading is as instructive as the number.

The changelog said the wrong thing about which version shipped what

All thirteen entries added after the tag sat under ## 2.0.0 — since 1.4.0, which tells a reader they are
in the package they already have. They now sit under ## 2.1.0 — since 2.0.0 with their own glance table.

Three of them I had misremembered as pre-tag — the Compile exception (#894), the logarithm division
(#890) and the arctan/arccotan guard (#887) — which is why the split was derived by diffing the file
against v2.0.0
rather than judged by eye. Section and row counts were checked before and after: 20
rows and 13 sections moved, nothing duplicated, nothing dropped. My first attempt at the move did
duplicate content — 76 sections became 192, because the span of each section ran to the next ## and
swallowed the ### sections between — which the count caught and a backup undid.

The #746 tier note

Posted as a comment on #746, and it says
plainly that 2.1.0 advances no tier. Against v1.0's required infrastructure: the polynomial layer
untouched, the canonical-form specification untouched, pattern-matching-as-data untouched — this release
added switch arms — and assumptions-travelling-with-a-node untouched. The one item that moved is the
corpus-and-harness requirement.

Of the three standing conditions, two are met (performance measured; correctness coverage grown) and one
is unaffected (no package boundary moved).

The note also carries an argument for the roadmap: three separate pieces of work this session stopped at
the same wall
#902's two lost limits, #721/#890's domain contradiction, and the ln(a) + ln(b) guard
— and each is a guard-versus-coverage trade that exists only because an assumption cannot be attached to
an expression and carried. Three independent hits is a stronger case for scheduling v1.0's metadata item
early than any one of them is alone.

Checklist

Suite and harnesses green, output read ✔ 6488 C# + 130 F#; casbench 117/119 with 0 wrong; rootcheck 596/596; simpsweep 10463/10463; propcheck 1340 with 0 failures; crashcheck 1652 with 0 crashes; boundcheck 2 disagreements, both awaiting the #721 decision; docsamples 84 samples with 0 mismatches; sympycheck 24 programs with 0 failures
BREAKING-CHANGES.md entry per changed answer, measured on a build of each ✔ and now filed under the right version
Performance column, previous re-measured on the same machine, published as a pair
Version checked against #746, note saying which tier it does and does not advance
Wiki and website quickstart still true docsamples clean; the Solvers page was updated when #901 shipped

What I have not done: tagged, packed or published anything. This is the preparation; the release itself
is yours.

Three things a release needs, and two of them are what 2.0.0 skipped.

The version. Version and FileVersion go to 2.1.0 while AssemblyVersion stays 2.0.0.0, which is
what the comment beside it asks for: the assembly is strong-named, so every AssemblyVersion
change breaks binding for a consumer without a redirect, and holding it makes each 2.x a
drop-in. Not a patch: the sixteen commits since the tag change answers, withdraw two, and
reserve a word.

The performance pair. v2.0.0 (the 1691st) and the candidate (the 1707th), measured minutes
apart on one machine in one session, 18 benchmarks each. No regression: the largest real move
is SolveMedium at +4.6%, the rest inside +/-3%, and Derivate, EvalTrig and EvalTrigPrecise are
byte-identical in allocation.

It also corrects the pair above it, which reported SimplifyEasy at +8.7% and blamed guards
calling Evaled inside a pattern's when clause, asking for a measurement of its own before more
were written that way. Six more of exactly that shape have been added since -- #887, #892,
#881, #902, #897 -- and SimplifyEasy is +2.1% here with allocation moving 0.5%. If the guards
were the cause the row would have moved further and allocation would have followed, since
Evaled allocates on its first call per node. So the +8.7% was mostly the machine, the earlier
attribution was wrong, and the action item it raised is discharged.

The changelog said the wrong thing about which version shipped what. All thirteen entries added
after the tag sat under "2.0.0 -- since 1.4.0", which tells a reader they are in the package
they already have -- including three I had misremembered as pre-tag: the Compile exception, the
logarithm division and the arctan/arccotan guard. They now sit under "2.1.0 -- since 2.0.0"
with their own glance table. Which entries those are was derived by diffing the file against the
tag rather than judged by eye, and the section and row counts were checked before and after: 20
rows and 13 sections moved, nothing duplicated, nothing dropped.

Suite 6488 passed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@Rafael-SOWNet
Rafael-SOWNet merged commit 6a29162 into master Aug 12, 2026
23 of 25 checks passed
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