RELEASE 2.0.0: version bump and changelog (merge LAST, then tag) - #53
Open
AminDhouib wants to merge 3 commits into
Open
RELEASE 2.0.0: version bump and changelog (merge LAST, then tag)#53AminDhouib wants to merge 3 commits into
AminDhouib wants to merge 3 commits into
Conversation
Human decision 2026-07-25: tag 2.0.0 now, at W5, rather than after W16 as plan_RELEASE originally stated. The cost was stated and accepted; the changelog therefore declares W6-W16 as NOT EVIDENCED rather than letting their absence read as a passing result. Bumped 1.2.0 -> 2.0.0 in pyproject.toml, the README install pins, and the RUNBOOK example. Left alone deliberately: - singleton.py's "<= 1.2.0" comments are historical statements about which released backends lack the version file. They are correct as written. - tools/package_verify.py and tests/ use 1.2.0 as an illustrative sample version; nothing binds the real package version (verified: no importlib.metadata/__version__ assertion anywhere in src/ or tests/). - smoke_mcp.py is gitignored (untracked local helper); its version assertion was updated in the working copy only. The major bump is required regardless of scope: STEALTH_MCP_SESSION_STORAGE_CAP_GB -> STEALTH_MCP_BROWSER_SESSION_STORAGE_CAP_GB and --session-cap-gb -> --browser-session-cap-gb ship with NO back-compat alias, so the old names lapse silently on upgrade. That is the lead item in the changelog. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
W5's contract generator resolved to 94 served / 3 release-qualified, not 94 qualified. plan_RELEASE 2.5 disqualifies exactly the evidence the other 91 have: a `.fn`-only call and the representative journey cannot satisfy a transport or cross-OS success claim. Verified independently: `pytest -m transport --collect-only` yields ONE node on this base. My earlier "the contract can claim all 94" was wrong - I carried forward the get_cookies hard-block framing instead of re-deriving the per-tool rule. The changelog was silent on this. Stating it, and stating it in BOTH directions: the 91 are covered end-to-end against real Chrome (set-equality tripwire, 94 covered / 0 exempt), they simply are not verified over the wire. Omitting it would overclaim; reporting a bare "3 qualified" would read as "91 untested", which is equally false. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…e sdist Found while dry-running the publish path for a v2.0.0 tag. The sdist was 15 MB against a 192 KB wheel: 12.8 MB assets/ (demo media) + 2.8 MB audit/ (the campaign's internal plans and findings). W3's install-smoke installs the sdist on three runner cells, so the weight was paid on every gate run as well as by anyone building from source. Verified safe before changing anything: package_verify's `_check_sdist_members` requires only pyproject.toml + README.md at the sdist root, and `_check_package_data` requires the embedded/js files, which live under src/. Neither excluded directory is structurally required. tests/ is kept deliberately so a downstream packager can still run the suite from the sdist. Measured locally, not assumed: sdist 15 MB -> 592 KB (25x) wheel 192 KB -> 192 KB (unchanged) package_verify verify --expect-version v2.0.0 -> OK, before and after tests/test_package_verify.py + test_release_workflows.py -> 37 passed Also confirms the tag/version agreement gate accepts the `v2.0.0` form, so that failure mode cannot surface late in the tag run. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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.
The 2.0.0 version bump + CHANGELOG. Merge this last.
Human decision 2026-07-25: tag 2.0.0 now, at W5, rather than after W16 as
plan_RELEASE originally stated. The cost was stated and accepted. This PR makes that
decision honest rather than quiet — the changelog declares W6–W16 as not evidenced
instead of letting their absence read as a passing result.
Merge order (this PR is the last step before the tag)
Do not merge #51. It is the staging integration branch, used only to give W5 one
tree to generate a contract from. Its content is the merge of the PRs above.
Then:
git tag v2.0.0 && git push origin v2.0.0That runs the full three-OS gate at the tag SHA. Only if it is green does
publishdownload the gate-built artifact, re-check its SHA-256 against the build manifest, and
upload those exact bytes. It never rebuilds.
What changed here
pyproject.toml1.2.0→2.0.0README.mdRUNBOOK.mdstatusexample outputCHANGELOG.mdDeliberately left alone
singleton.py's<= 1.2.0comments are historical statements about which releasedbackends lack the version file. They are correct as written and must not be bumped.
tools/package_verify.pyandtests/use1.2.0as an illustrative sample version.Verified nothing binds the real package version — there is no
importlib.metadata/__version__assertion anywhere insrc/ortests/, andtest_package_verify.py+test_singleton_version_aware.pypass (53/53).smoke_mcp.pyhardcodes"version":"1.2.0"and would have broken, but it isgitignored (untracked local helper), so it was fixed in the working copy only.
Scope
2.0.0 carries 85 commits since the untagged 1.2.0 — the whole audit campaign, not
just the recent release work.
The breaking change is the lead item
STEALTH_MCP_SESSION_STORAGE_CAP_GB→STEALTH_MCP_BROWSER_SESSION_STORAGE_CAP_GBand
--session-cap-gb→--browser-session-cap-gb, with no back-compat alias.Anyone setting either loses it silently on upgrade and reverts to the default. This
is the single most user-visible thing in the release, so it leads the changelog rather
than sitting in a register.
What 2.0.0 does and does not claim
Fixed, all shipping in every prior release and all invisible to the old in-process test
seam: browsers destroyed every ~2s over real stdio;
list_tabsraising after anyclose_tab; every navigation after aclose_tabsilently switching tabs and leakingone;
close_tab/switch_to_tabfailing on rediscovered targets; the headlessHeadlessChromeUser-Agent tell; catch-all network interception on every zero-hookspawn.
Not claimed, stated explicitly in the changelog: macOS navigation (F-773 — neither
"works" nor "broken"; unreproduced outside hosted runners); headless
undetectability (F-774 blanks high-entropy client hints); the
switch_to_tabstorageresidual; any HTTP-transport claim; and every W6–W16 workstream, listed individually as
not evidenced.
A known flake exists in
install-smoke (sdist Linux/X64)on Chrome cold-spawn. It mayblock the tag run and need a re-run; it is recorded rather than papered over.