You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The release guide says production changes are merged to main and use an annotated-style tag, but CI does not verify the tag object type, exact tag target, or reachability from origin/main:
1. Update `VERSION` and the changelog in a reviewed pull request.
2. Merge to `main` and create the matching `v${VERSION}` tag.
3. Approve the protected `pypi` environment. The workflow verifies the tag,
dated changelog section, builds and tests the artifact, then publishes the
exact artifact to PyPI via trusted publishing and creates the matching
GitHub Release.
. Live repository inspection also found main without branch protection; the PyPI environments allow the configured reviewer to approve their own deployment and administrators to bypass.
Scope
Verify tag type, target SHA, and main reachability before any publish, attestation, or release write permission.
Configure protected-branch required checks.
Make the production environment approval independent or explicitly document a time-bounded solo-maintainer exception.
Test the negative paths.
Acceptance Criteria
Lightweight tags, tags on unmerged commits, moved/mismatched tags, and shallow-history ambiguity fail closed.
The workflow fetches enough trusted history to prove ancestry.
Required checks and force-push/deletion policy protect main.
Publication, attestation, and GitHub Release creation all depend on the same provenance gate.
Release documentation matches enforcement.
Validation
Exercise annotated/main, lightweight, foreign-commit, rewritten-tag, dispatch, and rerun cases in tests or a safe rehearsal repository; read back branch and environment settings.
Non-Goals
Do not replace trusted publishing or existing artifact attestations.
Goal
Prove that every PyPI/GitHub release comes from reviewed
mainhistory and passes a meaningful approval boundary.Background
The release validator checks only that the tag string matches
VERSIONand that a dated changelog section exists:base-cli/scripts/validate_release_ref.py
Lines 16 to 42 in 8a93d22
base-cli/.github/workflows/package.yml
Lines 70 to 104 in 8a93d22
base-cli/.github/workflows/package.yml
Lines 193 to 224 in 8a93d22
The release guide says production changes are merged to
mainand use an annotated-style tag, but CI does not verify the tag object type, exact tag target, or reachability fromorigin/main:base-cli/docs/releasing.md
Lines 120 to 127 in 8a93d22
mainwithout branch protection; the PyPI environments allow the configured reviewer to approve their own deployment and administrators to bypass.Scope
mainreachability before any publish, attestation, or release write permission.Acceptance Criteria
main.Validation
Exercise annotated/main, lightweight, foreign-commit, rewritten-tag, dispatch, and rerun cases in tests or a safe rehearsal repository; read back branch and environment settings.
Non-Goals
Do not replace trusted publishing or existing artifact attestations.
Project Fields
Ownership