@@ -45,10 +45,11 @@ one active maintainer.
4545
4646Before the historical first push, scheduled and manually dispatched live
4747execution was required to fail closed unless ` LIVE_SMOKE_ENABLED=true ` .
48- ` RELEASE_PLEASE_ENABLED ` was kept disabled and remains disabled until a
49- separately reviewed and tested ` last-release-sha ` bridge establishes the
50- recovery alpha as the previous-release boundary. An unset or non-true value
51- prevents the corresponding gated job from executing.
48+ ` RELEASE_PLEASE_ENABLED ` was kept disabled. The reviewed stable-readiness
49+ configuration now uses an explicit ` last-release-sha ` bridge to establish the
50+ recovery alpha as the previous-release boundary; the repository variable stays
51+ disabled until maintainers intentionally start the stable release sequence. An
52+ unset or non-true value prevents the corresponding gated job from executing.
5253The release live-model configuration resolves an unset or empty
5354` COMETAPI_LIVE_MODEL ` to ` gpt-5.4 ` .
5455
@@ -78,7 +79,7 @@ uv run ruff check src tests scripts
7879uv run ruff format --check src tests scripts
7980uv run pyright
8081uv run pytest -m " not live"
81- uv run python scripts/check_version.py --expected 0.1.0a1 -- require-changelog
82+ uv run python scripts/check_version.py --require-changelog
8283uv run python scripts/check_secrets.py
8384uv run python scripts/check_workflows.py
8485rm -rf dist
@@ -181,14 +182,18 @@ violations in one run and still returns non-zero when any violation exists.
181182 ` LIVE_SMOKE_ENABLED=true ` .
182183- ` release-please.yml ` maintains a human-reviewed version and changelog pull
183184 request from Conventional Commits after maintainers enable the
184- ` RELEASE_PLEASE_ENABLED ` repository variable. Keep it disabled after the
185- initial ` v0.1.0-alpha.1+recovery.1 ` release: the checked-in manifest version
186- lacks the recovery tag's build metadata and cannot safely infer the previous
187- release boundary. Enable it only after a separate reviewed change configures
188- and tests an explicit ` last-release-sha ` bridge.
189- - ` publish.yml ` runs only for a published immutable GitHub release. It resolves
190- the tag to the checked-out commit, fetches the protected default branch, and
191- rejects a commit that is not reachable from that branch. A protected
185+ ` RELEASE_PLEASE_ENABLED ` repository variable. The checked-in stable-readiness
186+ configuration establishes the recovery release boundary with the reviewed
187+ ` last-release-sha ` bridge. Keep the variable disabled except while executing
188+ an explicitly authorized release sequence. When it creates an approved
189+ release with the GitHub workflow token, it polls the GitHub API until that
190+ exact tag and commit are independently reported as immutable, then invokes
191+ the protected publication chain directly; workflow-token release events do
192+ not trigger a second workflow run.
193+ - ` publish.yml ` is called only with the independently verified immutable tag,
194+ commit, and default branch. It resolves the tag to the checked-out commit,
195+ fetches the protected default branch, and rejects a commit that is not
196+ reachable from that branch. A protected
192197 ` live-smoke ` job then checks out that exact verified commit and must succeed
193198 before the protected ` pypi ` job becomes eligible. The workflow publishes the
194199 previously verified artifacts with OIDC, then checks the public package
@@ -197,7 +202,9 @@ violations in one run and still returns non-zero when any violation exists.
197202 or empty live-model repository variable resolves to ` gpt-5.4 ` .
198203
199204Third-party Actions are pinned to full commit SHAs. Workflow permissions are
200- read-only by default; only the publishing job receives ` id-token: write ` .
205+ read-only by default. The reusable publication caller and protected publishing
206+ job declare ` id-token: write ` ; the caller passes the maximum permission and
207+ only the publishing job requests the OIDC token.
201208Publishing uses a protected ` pypi ` environment and concurrency control.
202209Arbitrary-branch and manual publication are forbidden.
203210
@@ -272,8 +279,9 @@ changelog, GitHub release, wheel, and source distribution.
272279 SHA256 ` a6820347317943ca22f7632acbe354dd992f31a122a6172dfe45b57960e3a093 `
273280 and source-distribution SHA256
274281 ` 98d86829ef14771e8b7ec180d452c6638289f49c14a39b7207be5c47cb64cde7 ` .
275- - ` LIVE_SMOKE_ENABLED=false ` . Release Please remains disabled until a separate
276- reviewed and tested ` last-release-sha ` bridge is merged.
282+ - ` LIVE_SMOKE_ENABLED=false ` . Release Please remains disabled outside an
283+ explicitly authorized release sequence; the reviewed ` last-release-sha `
284+ bridge is configured for the alpha-to-stable transition.
277285
278286## Stable release sequence
279287
@@ -282,8 +290,11 @@ feature or fix pull request
282290 -> required offline CI
283291 -> merge to the default branch
284292 -> automated release pull request
285- -> human review and merge
293+ -> human finalization of stable docs, metadata, and one-time bridge cleanup
294+ -> required release-PR CI, review, and merge
286295 -> immutable tag and GitHub release
296+ -> bounded API verification of immutable tag and commit identity
297+ -> direct call to the protected publication workflow
287298 -> verify immutable tag commit and protected-default-branch ancestry
288299 -> rebuild and verify exact artifacts
289300 -> protected live smoke against that exact commit
@@ -295,4 +306,11 @@ feature or fix pull request
295306
296307Stable ` 0.1.0 ` additionally requires the complete blocking Python matrix,
297308executed README examples against the built package, trusted live evidence, and
298- reviewed release-PR and changelog agreement.
309+ reviewed release-PR and changelog agreement. Before the stable release PR is
310+ merged, its finalization commit must state that ` 0.1.0 ` is approved for PyPI
311+ publication, use the stable installation command and classifier, and remove the
312+ one-time ` last-release-sha ` plus prerelease-versioning controls. The manifest,
313+ project metadata, lock file, and changelog must remain at the exact generated
314+ ` 0.1.0 ` version. If GitHub requires approval before checks run on the automated
315+ pull request, approve only that reviewed workflow execution and wait for every
316+ blocking check.
0 commit comments