Release the _meta revision fix as 0.2.0 - #8
Merged
Conversation
Owner decision. The fix on main is numbered 0.1.2; this makes it 0.2.0.
For a client declaring 2025-11-25 a method that was refused now answers
(ping), and results on that path have lost two fields -- resultType and
_meta serverInfo. A 0.1.0 consumer could have depended on either. For a
published package the wire JSON is the API, so that is a minor bump.
The field removal is the breaking-shaped half and carries the decision on
its own. An earlier statement of the rationale had the ping direction
backwards -- it said a method that answered now refuses, which is true of
no method in this release. A reviewer caught it by enumerating every
method on this tree and on 0.1.0's rather than by reading the rationale:
ping 0.1.0: REFUSED -32601 0.2.0: answered
every other method: unchanged status on both
That sentence was one of the two grounds given for the number and reached
the changelog unchecked. The changelog now names the error rather than
quietly rewording it.
Also in this release, because a lane found the README recommending a
requirement that spans the break the version exists to signal:
CONVENTIONS.md gains a standing rule -- the README states what the package
does today, and every behavioural claim in it is pinned by a test that
runs. test/beam_mcp/readme_claims_test.exs discharges it. Each test quotes
the README sentence it pins and asserts that sentence is still present, so
a claim that moves without its test fails, and a test guarding a deleted
claim fails too rather than reading as coverage. Three claims previously
had nothing holding them, including that every method is served bare with
tools/call reaching dispatch -- a security property that rested on prose.
Scored by mutation. Reverting the README dependency fails the claim quote;
inserting a session guard fails the two behavioural tests:
MUTANT A 8 tests, 1 failure REAL_EXIT=2
MUTANT B 8 tests, 2 failures REAL_EXIT=2
Mutant B's source check reported old-remaining 1 because the replacement
clause embeds the original line, so that count carried no information;
what proved it applied was the effect. Assert the effect, not only the
match count.
./tools/gate.sh format / compile / test / credo pass
reuse pass (20 commentable files)
licence files pass
Gate OK. exit=0
mix test 47 tests, 0 failures
Base re-derived rather than assumed: PR #7 merged by rebase, so main
carries a rewritten commit and the local one was not its ancestor. Trees
compared identical (a866ad8 both, empty diff) before resetting onto main.
Reviewed on a checkout of the index by two independent lanes over rounds 7
and 8; both approved tree 072cf981. The committed tree is that tree plus
the two round-8 lane reports and nothing else.
Six non-blocking items both lanes raised are filed rather than folded in,
including whether the README should recommend ~> 0.2.0 rather than ~> 0.2
-- ~> 0.2 admits 0.3.0 and so spans the next break the way ~> 0.1 spanned
this one. That is a maintainer's call and is not made here.
Signed-off-by: Ayla Croft <aylacroft@proton.me>
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.
Owner decision: the
_metarevision fix that merged as0.1.2releases as0.2.0.Why
For a client declaring
2025-11-25, a method that was refused now answers (ping), and results on that path have lost two fields —resultTypeand_metaserverInfo. A0.1.0consumer could have depended on either. For a published package the wire JSON is the API, so this is a minor bump. The field removal is the breaking-shaped half and carries the decision on its own.One of the two stated grounds was wrong and is corrected rather than quietly reworded. The rationale said "a method that answered now refuses" — true of no method in this release. A reviewer caught it by enumerating every method on this tree and on
0.1.0's:That sentence reached the changelog unchecked from the decision that used it. Correcting it strengthens the case for
0.2.0rather than weakening it.A standing rule, from a lane finding
The README recommended
{:beam_mcp, "~> 0.1"}— a requirement spanning the very break the version bump exists to signal. Nothing was broken for a new user; the defect is that a consumer who copied it at0.1.0is carried across the break by a routinemix deps.updatewith no signal. It survived a deliberate version sweep because the stale string was0.1, not the0.1.2that changed.So
CONVENTIONS.mdgains: the README states what the package does today, and every behavioural claim in it is pinned by a test that runs.test/beam_mcp/readme_claims_test.exsdischarges it — each test quotes the README sentence it pins and asserts that sentence is still present, so a claim that moves without its test fails, and a test guarding a deleted claim fails too rather than reading as coverage while guarding nothing.Three claims previously had nothing holding them, including that every method is served bare with
tools/callreaching dispatch — a security property that rested on prose.Verification
Scored by mutation: reverting the README dependency fails the claim quote (
8 tests, 1 failure); inserting a session guard fails the two behavioural tests (8 tests, 2 failures). Mutant B's source check reportedold remaining: 1because the replacement embeds the original line — that count carried no information, and the effect is what proved it applied.Base
PR #7 merged by rebase while round 7 was in flight, so
maincarries a rewritten commit and the local one was not its ancestor. Trees compared identical (a866ad8dboth, empty diff) before resetting ontomain.Review
Rounds 7 and 8, two independent lanes on checkouts of the index; both approved tree
072cf981. The committed tree is that tree plus the two round-8 lane reports and nothing else — verifiable withgit diff 072cf981 HEAD^{tree}.Filed, not folded in
Six non-blocking items both lanes raised, including whether the README should recommend
~> 0.2.0rather than~> 0.2:~> 0.2admits0.3.0and so spans the next break the way~> 0.1spanned this one.~> 0.MINORis a common Hex idiom, so that is a maintainer's call and is not made here.