Skip to content

fix(release): pin the ruleset-checking verifier and drop ref_protected from the release gates - #1211

Merged
qnbs merged 1 commit into
mainfrom
fix/pin-ruleset-verifier
Nov 10, 2026
Merged

qnbs merged 1 commit into
mainfrom
fix/pin-ruleset-verifier

Conversation

@qnbs

@qnbs qnbs commented Nov 10, 2026 •

Copy link
Copy Markdown
Owner

User description

Summary

Part of #1206, step 2 of 2 after #1210. The release verifier now checks the active tag rulesets itself, so the GHCR and Tauri release gates stop depending on github.ref_protected, which community reports describe as false for tag pushes (discussion 142985, discussion 66588). If that value were false on the real tag push, both verifier jobs would be skipped, nothing would publish, and the immutable tag could not be removed.

What changes

  • docker.yml and tauri-build.yml: the verifier pin moves from 147470682b62 to d348d863f0cc, the protected-main commit from fix(signing): require active tag rulesets for release tags in the verifier #1210 that contains the ruleset check (GitHub-verified). github.ref_protected == true is removed from the verifier job and from both publish conditions.
  • scripts/release-security-gate.mjs and its types: the pin constant moves, and the exact conjunction for the verifier job and for both publish jobs no longer contains ref_protected. Re-adding it, or adding any permissive branch, is rejected as a change of the exact condition.
  • tests/unit/tooling/releaseSecurityGate.test.ts and tests/unit/workflowPolicy.test.ts follow the new contract. A test pins that neither workflow mentions ref_protected, and another that a looser or a stricter verifier condition is rejected for both workflows. The two "unprotected tag" cases were removed because the condition they mutated no longer exists.
  • New .github/workflows/tag-verifier-proof.yml: dispatch-only, contents: read, no secrets. It runs the pinned verifier with the production token against an existing annotated tag (default v1.29.2), so the ruleset read with the Actions token is proven before a real release tag is pushed. Its pin must match the release workflows, which a test enforces.
  • docs/CI.md and the changelog describe the new contract.

Evidence

Known limit

The API hides bypass_actors from callers without admin rights, so the verifier cannot prove that no actor can bypass release-tags-immutable. That stays a maintainer-verified setting (read earlier: no bypass actors on ruleset 26812769).

Release boundary

No tag, GitHub Release, registry push or Vercel mutation. This PR does not authorize v1.29.3.

Summary by Sourcery

Ensure tag-based GHCR and Tauri releases rely on the pinned ruleset-aware verifier rather than the unreliable github.ref_protected status.

New Features:

  • Add a dispatch-only, read-only workflow to prove the pinned release-tag verifier can validate an existing tag with the production Actions token.

Bug Fixes:

  • Prevent GHCR and Tauri publishing from being skipped when GitHub reports github.ref_protected as false for tag pushes.

Enhancements:

  • Move the release verifier pin to the ruleset-checking protected-main commit and make the verifier itself responsible for enforcing tag protection.
  • Update release security validation and documentation to require exact verifier and publish conditions without github.ref_protected.

Documentation:

  • Document the updated release-gate contract and tag-verifier proof workflow.
  • Record the release-gate changes in the unreleased changelog.

Tests:

  • Update workflow and release-gate tests to enforce the new verifier pin, exact conditions, and read-only proof workflow.

Summary by cubic

Completes step 2 of 2 for #1206: drops github.ref_protected from the GHCR and Tauri release gates. Community reports describe it as false for tag pushes, so both verifier jobs and both publish jobs could be skipped and nothing would publish.

The verifier pin moves to the protected-main commit that checks active tag rulesets itself (added in #1210).

  • The security gate, its tests, and the workflow-policy tests require the exact condition without ref_protected and reject looser or stricter variants.
  • New dispatch-only, read-only tag-verifier-proof.yml runs the pinned verifier with the production token against an existing tag, proving the ruleset read before a real tag is pushed.
  • The verifier still cannot prove that no actor can bypass the release-tags-immutable ruleset, which stays a maintainer-verified setting.

Written for commit 1cc5310. Summary will update on new commits.

View guided diff Turn on auto-fix


CodeAnt-AI Description

Allow verified version tags to reach release publishing without relying on GitHub’s protection flag

What Changed

  • GHCR and Tauri releases no longer depend on GitHub’s unreliable protection flag for tag pushes; publishing still requires the pinned verifier and exact-commit security audit to succeed.
  • Added a dispatch-only, read-only workflow to test the pinned verifier against an existing tag before a release.

Impact

✅ Fewer skipped GHCR releases on tag pushes
✅ Fewer skipped Tauri releases on tag pushes
✅ Releases still require successful tag verification and security audits

💡 Usage Guide

Checking Your Pull Request

Every time you make a pull request, our system automatically looks through it. We check for security issues, mistakes in how you're setting up your infrastructure, and common code problems. We do this to make sure your changes are solid and won't cause any trouble later.

Talking to CodeAnt AI

Got a question or need a hand with something in your pull request? You can easily get in touch with CodeAnt AI right here. Just type the following in a comment on your pull request, and replace "Your question here" with whatever you want to ask:

@codeant-ai ask: Your question here

This lets you have a chat with CodeAnt AI about your pull request, making it easier to understand and improve your code.

Example

@codeant-ai ask: Can you suggest a safer alternative to storing this secret?

Preserve Org Learnings with CodeAnt

You can record team preferences so CodeAnt AI applies them in future reviews. Reply directly to the specific CodeAnt AI suggestion (in the same thread) and replace "Your feedback here" with your input:

@codeant-ai: Your feedback here

This helps CodeAnt AI learn and adapt to your team's coding style and standards.

Example

@codeant-ai: Do not flag unused imports.

Retrigger review

Ask CodeAnt AI to review the PR again, by typing:

@codeant-ai: review

Check Your Repository Health

To analyze the health of your code repository, visit our dashboard at https://app.codeant.ai. This tool helps you identify potential issues and areas for improvement in your codebase, ensuring your repository maintains high standards of code health.

Summary by CodeRabbit

  • Release Improvements
    • Docker and Tauri releases can now publish from version tags without requiring the tag to be marked as protected. Tag verification, security checks, and commit matching are still required.
  • New Features
    • Added a manual, read-only workflow to verify an existing annotated release tag. It does not publish a release.
  • Documentation
    • Updated CI documentation to reflect the release checks and manual workflow behavior.

…d from the release gates

The release verifier now checks the active tag rulesets itself, so the GHCR and Tauri gates no longer depend on github.ref_protected, which is reported as false for tag pushes. Move the pin in both workflows, the policy checker and its tests to the protected-main commit that contains the check, require the exact remaining conditions, and add a dispatch-only read-only proof that runs the pinned verifier with the production token against an existing tag.
@vercel

vercel Bot commented Nov 10, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
worldscript-studio Ready Ready Preview Nov 10, 2026 3:54am UTC

@codeant-ai

codeant-ai Bot commented Nov 10, 2026 •

Copy link
Copy Markdown

CodeAnt  CodeAnt Review Status

✅  Review completed

Status Commit Started (UTC) Finished (UTC)
✅  #b0455 Reviewed your PR 1cc5310 Nov 10, 2026 · 03:54 04:00

@chatgpt-codex-connector

Copy link
Copy Markdown
Codex Review Summary: ❌ Failed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ❌ Failed 2026-11-10T03:54:15.912960Z
We couldn’t complete this review. Comment @codex review to try again.
1cc5310 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@codeant-ai

codeant-ai Bot commented Nov 10, 2026

Copy link
Copy Markdown

Thanks for using CodeAnt! 🎉

We're free for open-source projects. if you're enjoying it, help us grow by sharing.

Share on X ·
Reddit ·
LinkedIn

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@sourcery-ai

sourcery-ai Bot commented Nov 10, 2026

Copy link
Copy Markdown

Sorry @qnbs, you've used your own review budget of 250,000 diff characters for the last 7 days.

You can request another review in 1 day and 10 hours by commenting @sourcery-ai review. Upgrade to get a review now.

@coderabbitai

coderabbitai Bot commented Nov 10, 2026 •

Copy link
Copy Markdown

Explain Change →

No actionable comments were generated in the recent review.

Walkthrough

Docker and Tauri release workflows remove github.ref_protected checks and retain tag verification, security-audit, and SHA-match requirements for publishing. The changes also add a read-only manual tag-verification workflow and update the gate checks, tests, and documentation.

Changes: Release tag verification and publishing

Layer / File(s) Summary
Tag verification and proof
.github/workflows/docker.yml, .github/workflows/tauri-build.yml, .github/workflows/tag-verifier-proof.yml, scripts/release-security-gate.mjs, tests/unit/tooling/releaseSecurityGate.test.ts
Verifier jobs run for pushed version tags and use the updated pinned verifier. The manual workflow validates and verifies an existing tag with read-only permissions. Gate validation and tests cover the verifier conditions and proof workflow.
Release publishing conditions and checks
.github/workflows/docker.yml, .github/workflows/tauri-build.yml, scripts/release-security-gate.mjs, scripts/release-security-gate.d.mts, tests/unit/tooling/releaseSecurityGate.test.ts, tests/unit/workflowPolicy.test.ts, docs/CI.md, CHANGELOG.md
Publishing conditions no longer check github.ref_protected. They retain tag, verifier, audit, and SHA-match requirements. Gate constants, tests, and documentation reflect the updated conditions.
Merge Risk: Minimal · up to 1cc53

The change removes the protected-tag check from the release gates and relies on the pinned verifier's ruleset check instead. It adds a read-only proof workflow. No concrete merge-blocking risk was found. Run the proof workflow after merge and record the result before any release tag is considered.

Recent review info

Run configuration

Commits

Reviewing files that changed from the base of the PR and between d348d86 and 1cc5310.

Files selected for processing: 9

  • .github/workflows/docker.yml
  • .github/workflows/tag-verifier-proof.yml
  • .github/workflows/tauri-build.yml
  • CHANGELOG.md
  • docs/CI.md
  • scripts/release-security-gate.d.mts
  • scripts/release-security-gate.mjs
  • tests/unit/tooling/releaseSecurityGate.test.ts
  • tests/unit/workflowPolicy.test.ts
Files with no reviewable changes: 1

  • scripts/release-security-gate.d.mts

Included review availability: This review used your included allowance. 0 included reviews remain after this review. Your included PR review attempts over the past 7 days set your current allowance at 1 review per hour.

@sourcery-ai

sourcery-ai Bot commented Nov 10, 2026

Copy link
Copy Markdown

Reviewer's Guide

Implementation

Update the release gate checker and its declared interface to require the new exact tag-push conditions and pin the verifier commit that checks tag rulesets.

  • scripts/release-security-gate.mjs L27-29, L92, L329
  • scripts/release-security-gate.d.mts L11 (removed lines)

Configuration

Align Docker and Tauri verification and publishing gates with the ruleset-checking verifier, and add a read-only dispatch workflow to prove it can inspect an existing tag with the production token.

  • .github/workflows/docker.yml L75, L85, L114
  • .github/workflows/tag-verifier-proof.yml L1-61
  • .github/workflows/tauri-build.yml L23, L34, L373

Documentation

Document that ruleset enforcement now happens in the pinned verifier and explain the dispatch-only proof workflow and pin-rotation requirements.

  • docs/CI.md L164

Record the updated release-gate contract and verifier pin in the unreleased changelog.

  • CHANGELOG.md L10

Tests

Update release security gate and workflow-policy tests to enforce the new verifier pin, exact conditions, and read-only proof workflow.

  • tests/unit/tooling/releaseSecurityGate.test.ts L22-26, L97-133 (+5 small edits)
  • tests/unit/workflowPolicy.test.ts L378, L557

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@codeant-ai codeant-ai Bot added the size:L This PR changes 100-499 lines, ignoring generated files label Nov 10, 2026
@codeant-ai

codeant-ai Bot commented Nov 10, 2026

Copy link
Copy Markdown

View results CodeAnt  CodeAnt Quality Gate Results

Commit 1cc53103 · Scanned Nov 10, 2026 at 03:54 UTC

✅  Overall Status: PASSED

Quality Gate Status Details
New code coverage ⚪  Not applicable Not applicable — no applicable code changes
Secrets ✅  Passed 0 secrets found, 6 false positive secrets suppressed
Duplicate code ✅  Passed 0.0% duplicated
SAST ✅  Passed No security issues
Bugs ✅  Passed Rating S · No bugs
IaC ✅  Passed Rating B · 1 issues (1 medium)

@codeant-ai

codeant-ai Bot commented Nov 10, 2026

Copy link
Copy Markdown

View results CodeAnt  CodeAnt Coverage Report

Commit 1cc53103 · Scanned Nov 10, 2026 at 03:54 UTC

⚪  Overall Status: Not applicable

Coverage Status Details
New Code Coverage ⚪  Not applicable Not applicable — no applicable code changes

New-code coverage threshold not configured; coverage is reported but not enforced.

@codescene-access codescene-access Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gates Passed
3 Quality Gates Passed

See analysis details in CodeScene

Quality Gate Profile: The Bare Minimum
Install CodeScene MCP: safeguard and uplift AI-generated code. Catch issues early with our IDE extension and CLI tool.

@github-actions

Copy link
Copy Markdown

[check-pr-size] PR size is over the target tier (normal profile): 9 files, 159 meaningful lines, 1 commits — limit ≤8 files / ≤400 lines / ≤6 commits. Consider splitting into smaller, independently reviewable PRs.

@codeant-ai

codeant-ai Bot commented Nov 10, 2026

Copy link
Copy Markdown

CodeAnt  CodeAnt Nitpicks

1 code suggestion

1. This rejects only four named events, so adding workflow_call or another trigger still passes despite the proof no longer being dispatch-only.

Incomplete implementation · tests/unit/tooling/releaseSecurityGate.test.ts:107

@codeant-ai

codeant-ai Bot commented Nov 10, 2026

Copy link
Copy Markdown

CodeAnt  CodeAnt PR Risk

🟢  Low Risk

  • The PR appears safe to merge; no actionable issues were identified in the review.

Assessed commit: 1cc5310340ab

@codecov

codecov Bot commented Nov 10, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ All tests successful. No failed tests found.

📢 Thoughts on this report? Let us know!

This branch was successfully deployed

1 active deployment
Preview — 1cc53103 Deployed Nov 10, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L This PR changes 100-499 lines, ignoring generated files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant