Conversation
The repo front page still showed the v1 README while every release cut from main is a v2 pre-release. Make the v2 README (README.v2.md) the root README, with a banner that makes the status unmissable: alpha/beta pre-release line, breaking changes between pre-releases, not for production, v1.x is the stable line. Retire the freeze machinery that kept README.md pinned at v1: - the readme-v1-frozen pre-commit hook and the CI freeze check with its override-readme-freeze label gate - the --readme indirection in scripts/update_readme_snippets.py (the script now reads README.md, its only remaining purpose) - dead config that existed only for the split: the ruff hook exclude, the pyproject ruff extend-exclude entries, the SKIP env in shared.yml, and the examples/ trigger on the readme-snippets hook Point pyproject's readme at README.md so PyPI keeps publishing the v2 long description, and add a release-checklist step to bump the version examples in README.md and the docs when cutting a pre-release - the tagged commit's README is what PyPI shows.
There was a problem hiding this comment.
No issues found across 12 files
Tip: cubic can generate docs of your entire codebase and keep them up to date. Try it here.
Re-trigger cubic
There was a problem hiding this comment.
LGTM — docs/CI-config-only change with no runtime code touched; the README promotion and freeze-machinery removal look mechanically correct.
Extended reasoning...
Overview
This PR promotes README.v2.md to README.md, deletes the v1 monolith README from main, and removes the machinery that kept the old README frozen: the readme-v1-frozen pre-commit hook, the CI freeze-check step and its SKIP env, the --readme flag on scripts/update_readme_snippets.py, and related dead config (extend-exclude, ruff hook exclude). It also updates pyproject.toml's readme field, RELEASE.md's process steps, and the two tests that reference the README path. No SDK runtime code under src/ is touched.
Security risks
None. The change is documentation, build/CI configuration, a small simplification of a doc-tooling script, and test path updates. The removed CI step was a README freeze guard, not a security control.
Level of scrutiny
Low. Cross-checking the pieces against each other holds up: the readme-snippets pre-commit hook and CI step both run --check with no --readme argument, matching the script's new hard-coded README.md; the removed SKIP env referenced hooks that no longer exist in the config; the new README's snippet block is byte-identical to docs_src/index/tutorial001.py, so the snippet check passes; tests/test_examples.py and tests/docs_src/test_shape.py now point at README.md, which exists; and pyproject.toml already published the v2 long description, so the readme field change preserves behavior. The only non-mechanical aspect — promoting the v2 README at the beta rather than at the stable release — is an explicitly stated, easily reversible project decision documented in the PR description.
Other factors
The bug hunting system found no issues, and the affected paths are exercised by the PR's own CI (pre-commit, readme-snippets check, and the README-linting tests run against the merge ref), so any mismatch would surface there rather than at runtime.
The repo front page still documents v1 while every release cut from
mainis a v2 pre-release. This makes the v2 README (README.v2.md) the rootREADME.mdahead of the beta, and retires the machinery that keptREADME.mdfrozen at v1.What changed
README.mdis now the v2 README (README.v2.mdis deleted). The banner is rewritten as a[!CAUTION]callout that makes the status unmissable: this documents the v2 alpha/beta pre-release line, breaking changes are expected between pre-releases, do not use it in production, and v1.x (linked) is the stable line. The banner no longer hardcodes a version pin or the beta date (both went stale the moment a release was cut), drops the backwards-compatibility-shims promise in favor of the migration-guide pointer, and scopes the "installers don't pick pre-releases" claim topip/uv, where it's actually true.readme-v1-frozenpre-commit hook, the "Check README.md is not modified" CI step with itsoverride-readme-freezelabel gate, and the--readmeflag onscripts/update_readme_snippets.py(no caller left — the script now readsREADME.md, full stop).tests/test_examples.pylintsREADME.mdagain, andtests/docs_src/test_shape.pynames the README instead of globbing for two.exclude:(unmatchable undertypes: [python]), the[tool.ruff] extend-excludeREADME entries (ruff never selects.md), theSKIP:env inshared.yml(neither listed hook exists in the config), and theexamples/trigger on the readme-snippets hook (the v1 README that embeddedexamples/files is gone; the README now embeds onlydocs_src/). Verified inert:ruff format --check/ruff checkare byte-identical before and after.pyproject.toml:readme = "README.md"— PyPI already publishes the v2 long description; this keeps it working after the rename.RELEASE.md: new step 1 — bump the version examples inREADME.mdand the docs in the commit that gets tagged, since the tagged commit's README is the PyPI long description. Deliberate updates replace the frozen file.AGENTS.md/CONTRIBUTING.md/examples/README.mdupdated to match reality (the examples bullets now say what actually embeds/links what).What deliberately did not change
deploy-docs.ymlbuilds v1.x at/and main at/v2/fromdocs/— the README isn't an input, and the v2 docs stay under/v2/until v2 is stable.examples/snippets/stays: workspace members, imported bytests/server/mcpserver/test_integration.py, and referenced bydocs/migration.md. Consolidating them intostories/remains a follow-up — note for that PR: the test-module import has to move too.mainbut reachable in git history; thev1.xbranch carries its own (slimmer) v1 README plus the restructured v1 docs, which is where the banner points.Notes for reviewers
override-readme-freezelabel is needed. Required status checks are unaffected (all-greenonly; the freeze check was a step, not a job).[!CAUTION]renders as a red alert on GitHub. PyPI's renderer doesn't support alert syntax, so future pre-release pages will show the literal[!CAUTION]line at the top of the description — accepted: the bold "do not use in production" sentence carries the warning there, and the PyPI front page stays on the latest v1.x release until v2 goes stable.blob/main/README.v2.mdand to v1 README section anchors stop resolving; the banner is the redirect. Permalinks at historical SHAs keep working.v2.0.0b1, so the beta's PyPI page is built from this README.override-readme-freezelabel.AI Disclaimer