Skip to content

fix(registry): allow roll-forward from unresolved latest - #780

Merged
ytallo merged 1 commit into
mainfrom
fix/promote-from-unresolvable-latest
Aug 12, 2026
Merged

fix(registry): allow roll-forward from unresolved latest#780
ytallo merged 1 commit into
mainfrom
fix/promote-from-unresolvable-latest

Conversation

@ytallo

@ytallo ytallo commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

What changed

  • read raw latest and next Registry tag pointers for promotion preconditions
  • keep the exact compare-and-swap update and full dependency resolution as post-promotion verification
  • cover raw tag lookup, stale candidates, stale destinations, and idempotent recovery in tests

Why

A provider promotion could not roll forward because resolving the old latest dependency graph failed after a shared dependency had already advanced. The Registry still had valid raw tag pointers and a compatible next candidate, but preflight stopped before the guarded tag update.

Impact

The exact-version promotion executor can recover this ordering failure without weakening its expected-current-tag or expected-candidate checks. A successful promotion still has to resolve the resulting latest graph to the requested version.

Validation

  • 10 passed in test_registry_release.py
  • 174 passed across .github/scripts/tests
  • python3 -m compileall -q .github/scripts/registry_release.py
  • git diff --check

Classification: no-ticket (CI/release recovery).

Summary by CodeRabbit

  • Bug Fixes

    • Improved release promotion checks to accurately validate raw version tags.
    • Added safer handling for missing release tags during registry operations.
    • Improved post-promotion verification to confirm the correct release tag before resolving its version.
  • Tests

    • Expanded coverage for raw tag lookup, missing tags, and promotion validation.

@vercel

vercel Bot commented Aug 12, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
workers Ready Ready Preview Aug 12, 2026 2:14pm
workers-tech-spec Ready Ready Preview Aug 12, 2026 2:14pm

Request Review

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: d8b7810f-a927-4942-ad4d-842b5edfbe7c

📥 Commits

Reviewing files that changed from the base of the PR and between 0cae4fd and 3f8c549.

📒 Files selected for processing (2)
  • .github/scripts/registry_release.py
  • .github/scripts/tests/test_registry_release.py

📝 Walkthrough

Walkthrough

The release script adds raw registry tag lookup, supports requests without payloads, and uses raw latest and next pointers for promotion checks. Tests cover missing tags, stale candidates, idempotent recovery, and stale latest validation.

Changes

Registry tag promotion

Layer / File(s) Summary
Raw tag lookup and request handling
.github/scripts/registry_release.py, .github/scripts/tests/test_registry_release.py
request_json supports omitted payloads. release_tag_version reads matching tags from worker version metadata and can allow missing tags. Tests cover direct lookup and missing pointers.
Promotion checks and verification
.github/scripts/registry_release.py, .github/scripts/tests/test_registry_release.py
Promotion uses raw latest and next pointers for expected-value checks. Post-promotion verification checks raw latest before resolved version verification. Promotion tests mock the raw tag lookup where required.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Promotion
  participant release_tag_version
  participant RegistryAPI
  participant resolve_version
  Promotion->>release_tag_version: Read raw latest and next tags
  release_tag_version->>RegistryAPI: List worker versions
  RegistryAPI-->>release_tag_version: Return version metadata
  release_tag_version-->>Promotion: Return tag pointers
  Promotion->>RegistryAPI: Submit promotion request
  Promotion->>release_tag_version: Verify raw latest tag
  Promotion->>resolve_version: Verify resolved latest version
Loading

Poem

A rabbit checks the tags with care,
latest and next are lined up there.
Missing pointers may pass the gate,
Raw checks confirm the promoted state.
Then resolved versions seal the fate.

✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/promote-from-unresolvable-latest

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@ytallo ytallo added the no-ticket PR deliberately has no Linear ticket (bump/typo/CI-only) label Aug 12, 2026
@github-actions

Copy link
Copy Markdown
Contributor

skill-check — worker

0 verified, 57 skipped (no docs/).

Layer Result
structure
vale
ai
render

Four for four. Nicely done.

@ytallo
ytallo marked this pull request as ready for review August 12, 2026 14:31
@ytallo
ytallo merged commit fff1836 into main Aug 12, 2026
16 of 19 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

no-ticket PR deliberately has no Linear ticket (bump/typo/CI-only)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant