Name the release 2.2.0, and say what the pinned AssemblyVersion does not cover (#746) - #941
Conversation
…not cover Version and FileVersion move to 2.2.0; BREAKING-CHANGES.md's "Unreleased" section becomes "2.2.0 -- since 2.1.0". AssemblyVersion stays 2.0.0.0, as it has for the whole of 2.x. The comment on that pin said holding it at 2.0.0.0 "makes every 2.x release a drop-in replacement". That is true of binding and not of compatibility, and this release is where the difference shows: 2.2.0 renames two members that shipped in 2.1.0, so a consumer that swaps the assembly without recompiling still binds and then throws MissingMethodException when the call is reached. The comment now says which of the two it guarantees, and the BREAKING-CHANGES entry says the same thing from the caller's side rather than claiming the rename can only surface as a build error. The number is checked against #746: 2.2.0 advances tier 1 and completes none of it, and the note recording that is on the issue. Measured on this tree: suite 7117 passed / 0 failed. Against a build of the merge commit: casbench 116/119 with 0 wrong, 0 error, 0 timeout; canoncheck idempotence 0/834 and order 0/2738 for the canonical form, matching the committed baseline exactly; rulecheck 30 sets, 1365 applications, 0 that never settle, 0 value changes. Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
|
The two that were still running, on the same build of the merge commit (
That closes the release checklist — suite and harnesses green and read rather than summarised, a All six harnesses were run against a |
The last checklist item before 2.2.0 can be tagged.
VersionandFileVersionmove to 2.2.0, andBREAKING-CHANGES.md'sUnreleasedsection becomes2.2.0 — since 2.1.0.And a correction to the comment on the pin
AssemblyVersionstays2.0.0.0, as it has for the whole of 2.x. The comment explaining why said that holding it there "makes every 2.x release a drop-in replacement".That is true of binding and not of compatibility, and this release is exactly where the difference shows. 2.2.0 renames two members that shipped in 2.1.0, so a consumer that swaps the assembly without recompiling still binds — and then throws
MissingMethodExceptionwhen the call is reached.I had written the
BREAKING-CHANGESentry claiming the rename "breaks a build rather than an answer … there is nothing to discover at runtime". The pinnedAssemblyVersionis what makes that wrong, and it is wrong in the direction that matters, so both the comment and the entry now say which of the two the pin guarantees.The number
Checked against #746 rather than picked: 2.2.0 advances tier 1 and completes none of it. The polynomial layer is done, canonical form is specified and implemented in both halves, and expression metadata is retired as having no consumer; pattern-matching-as-data is begun but internal, and the per-commit corpus is not wired into CI. Nothing of tier 2 ships. The note recording that is on the issue.
Strict semver would read a rename of a shipped member as a major. This project has not: 2.1.0 shipped a dozen changed answers under a minor, on the stated principle that correctness outranks compatibility. A rename is a weaker break than a changed answer, so 2.2.0 is consistent rather than an exception — stated explicitly here rather than left as an inference.
Measured, on a build of the merge commit rather than on a branch
casbenchcanoncheckrulecheckcrashcheckanddocsamplesare running against the same build; I will post their results here rather than tag without them.🤖 Generated with Claude Code