Repository navigation
release: v0.9.0 + PyPI Trusted Publishing; protect main with conversation resolution and test-quality / gate (#244, #245) - #264
Merged
Conversation
… a blocking required check (#244) - setup_branch_protection.sh: payload adds required_conversation_resolution and the `test-quality / gate` context, lists modeb-linux by default and writes the remaining switches out as false; `--check` now prints a read-only ok:/drift: report from one GET. - ai-gates-quality.yml: the test-quality job is blocking; the other AI gates stay advisory. - _ai-gate.yml: the called job has no name:, so ran and skipped runs report under the same check name; zero changed files now fails a blocking gate. - docs/CI-GATES.md, CHANGELOG.md: real protection state, promotion exception with evidence, why required approvals stay off, Scorecard gap. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Th13jVHptQQ1mCLah7XBay
Version 0.9.0 on every version-sync site, generated references and grammar schema regenerated. CHANGELOG [Unreleased] moved into [0.9.0] (62 bullets before and after; the 7 breaking entries name their contract). publish-pypi is enabled behind environment pypi with needs [build, release], id-token write only and a SHA-pinned action; gates now fails when the tag differs from the pyproject version. RELEASING.md documents the monthly cadence, the Trusted Publisher values and the failed-publish recovery. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Th13jVHptQQ1mCLah7XBay
This was referenced Oct 23, 2026
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.
Prepares release v0.9.0 and the branch-protection change. Nothing is applied live by merging this PR. The tag push, the
pypienvironment, PyPI registration and the protection PUT happen after merge.#244 — protection without required approvals (
ccd1b21)test-qualityAI gate is now blocking. The other three AI gates stay advisory.name:. Every AI gate check is now reported as<gate> / gate. Reason: a job skipped by its ownif:is reported under the unevaluatedname:template (measured on 4 public repos). That would have left the required check waiting forever onskip-ai-gate-labelled or fork PRs.scripts/setup_branch_protection.sh:required_conversation_resolutionand thetest-quality / gatecheck;modeb-linuxby default (it is already required live);--checknow printsok:/drift:lines against livemain(one read-only GET). Against live today:summary: 2 drift, 15 ok.enforce_admins, no PR could ever be approved.docs/CI-GATES.mdrecords this and the promotion-criteria exception. OpenSSF ScorecardCode-Reviewstays unsatisfied.#245 — v0.9.0 cut + PyPI Trusted Publishing (
e3b1b98)CHANGELOG.md: Unreleased →## [0.9.0] — 2026-10-22. All 62 entries are kept, and the 7 breaking entries carryContract:lines namingdocs/compatibility.mdcontracts.release.yml:gatesnow fails when the tag does not equal the pyproject version.publish-pypiis enabled withneeds: [build, release]andenvironment: pypi. Its only permission isid-token: write, andpypa/gh-action-pypi-publishis pinned to its v1.14.3 SHA.docs/RELEASING.md: release cadence (monthly, plus right after a P0 fix), Trusted Publisher values, the environment prerequisite, and a recovery table for a failed publish.Verification
e3b1b98:Ran 5566 tests … OK (skipped=1).rfc_lint,gen_plugin_references --checkandcheck_version_sync(0.9.0, 7 sites) all pass.python -m build+twine checkPASSED.needsflip;Refs #244, #245 (both are closed manually after the live steps).
🤖 Generated with Claude Code
https://claude.ai/code/session_01Th13jVHptQQ1mCLah7XBay