Release: backport strict HEAD retry evidence to 17.0.0 - #4684
Conversation
WalkthroughThe release task adds a prerelease-only CI override, standardizes GitHub CI evidence parsing and validation, strengthens required-check discovery, and gates strict exact-HEAD recovery on complete healthy evidence. Documentation and extensive helper specs reflect the updated behavior. ChangesRelease CI gating
Estimated code review effort: 4 (Complex) | ~60 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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. Comment |
|
+ci-status |
|
+ci-force-full |
CI StatusHead SHA: Only the required gate is active unless hosted CI is requested. |
Force-Full Hosted CI RequestedTriggered 9 workflow(s) for View progress in the Actions tab. |
Review: Release CI-gate strict-HEAD backport (17.0.0)Reviewed the diff ( OverviewThis backports #4661's release-gate hardening onto Code quality
Potential issues / things worth double-checking
Security / correctnessNo security concerns — this only tightens an internal release-gate script; it doesn't touch runtime packages, public APIs, or shipped code. The design consistently favors failing closed (blocking a release) over failing open on ambiguous evidence, which is the correct posture for a publish gate. I was not able to execute the RSpec suite in this sandbox (tool execution was restricted), so I relied on static review of the code and the extensive existing/added spec coverage rather than a live run — the PR description states 335 examples pass locally, which lines up with what I read in the diff. Overall: solid, well-tested hardening change with only minor nits. |
Review feedback addressedCurrent head:
Validation: 336 focused examples, 0 failures; targeted RuboCop 2 files/0 offenses; Ruby syntax and |
|
+ci-status |
|
@coderabbitai review |
✅ Action performedReview finished.
|
Review: Backport strict HEAD retry evidence to 17.0.0This is a release-process-only backport of #4661 onto Overall assessmentThe change is a well-engineered hardening of the release CI gate: it makes every GitHub API evidence path (Checks API, Statuses/legacy API, branch-protection required-checks lookup) fail closed on anything ambiguous — malformed JSON, wrong SHA, non-positive IDs, missing Test coverage for this is unusually thorough (335 combined examples per the PR description), covering both the happy path and a long list of "what if the evidence is subtly wrong" cases for exact-HEAD recovery. RuboCop and Ruby-syntax checks are clean per the PR description. Correctness
Minor code-quality nit (left inline)
Other observations (not blocking)
No blocking issues found. The backport appears faithful to its stated scope (source hunks ported, one main-only message hunk correctly superseded by existing release-branch wording from #4676). |
CI StatusHead SHA: Force-full hosted CI is enabled for this PR. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c521db0e68
ℹ️ 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".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
+ci-status |
|
+ci-run-hosted |
|
@coderabbitai review |
|
Address-review refresh for exact head |
✅ Action performedReview finished.
|
CI StatusHead SHA: Force-full hosted CI is enabled for this PR. |
Hosted CI RequestedTriggered 9 workflow(s) for View progress in the Actions tab. |
Review: Backport strict HEAD retry evidence to
|
## Why Backport the diagnostic correction from #4680 to `release/17.0.0` after the strict retry-evidence backport in #4684. The prerelease safety guard correctly compares both the pre-pull starting version and the post-pull checkout version, but its failure message was still displaying and recommending the stale pre-pull version. In cross-line or advanced-checkout cases, that guidance can point the release operator at the wrong candidate even though downstream policy would reject it. ## What changed - pass the actual post-pull `current_version` to the retry-error formatter - update focused specs so messages and suggested commands identify the checked-out version - preserve the guard's comparisons against both starting and current versions This is the stable-patch-ID-equivalent of main PR #4680 commit `0416c3d0aa40f98f905b3f424c3e3790d9089f09`, rebased as one commit onto release tip `8601d96357b61b9818055a41ead46ed26d51bcbe`. ## Validation - full release-helper spec: 337 examples, 0 failures - targeted RuboCop: 2 files, 0 offenses - pre-push branch RuboCop: 33 files, 0 offenses - Ruby syntax and `git diff --check`: clean - stable patch ID matches the reviewed main fix - delta is exactly `rakelib/release.rake` and `react_on_rails/spec/react_on_rails/release_rake_helpers_spec.rb` - product metadata remains `17.0.0.rc.11` / `17.0.0-rc.11` The local Markdown-link hook could not parse the repository's current `.lychee.toml` with this host's Lychee 0.24.2. This PR changes no Markdown; hosted link checks remain required. ## Classification - Source: #4680 diagnostic correction - Target: `release/17.0.0`, next RC - Tracker: #3823 (`development`, RC phase) - Changelog: `not_user_visible` Confidence note: - Validated: exact patch equivalence, focused release-helper behavior, lint, syntax, diff scope, and version preservation - Pending: none; exact-head hosted CI and configured current-head review agents are complete - Residual risk: low; this corrects operator-facing diagnostics without changing the guard decision <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Improved prerelease release guidance to display the correct current version after repository updates. * Updated release error messages and commands to accurately reflect the version available for release. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
…t-policy * origin/main: (33 commits) Fix ci-required base ref for PR merge-ref checkouts (#4819) Honor response charset and reject non-2xx HTTP-served SSR bundles (#4817) [Pro] Redact RSC render-error metadata on the fetched (client-navigation) payload path (#4821) Forward-port the 17.0.1 changelog section to main (#4814) Handle selector metacharacters in renderComponent DOM IDs (#4808) [Pro] Prevent caching RSC renders with errors (#4804) Agents: trust Copilot review identities (#4807) Agents: bind fleet closeout to generated pack (#4805) Docs: ADR 0002 — Skills-in-package over MCP for agent-native DX (#4735) Scope GitHub release commands to the origin repository (#4803) Forward-port OSS npm license metadata fix (#4794) Add golden-output gate for the serverWebpackConfig generator template (#4790) Cover the rspack CSS SSR generator fixes and de-duplicate the loader path (#4788) Configure agent workflow repo policy (#4785) Forward-port gh include mixed framing from #4684 (#4784) Release: enforce one-change forward-port closeout (#4783) Forward-port multi-URL rolling-deploy seeding to main (#4782) Docs: clarify React 18 streaming without RSC (#4780) Docs: forward-port v17 upgrade and generator gate guidance (#4781) Record the final React on Rails 17.0.0 changelog (#4742) ... # Conflicts: # AGENTS.md # internal/contributor-info/release-train-runbook.md
Why
Backport #4661 to the active
release/17.0.0train so release retry guidance fails closed when GitHub CI evidence is incomplete, malformed, ambiguous, pending, or unhealthy. The next RC should not recommend an idempotent publish retry unless the evidence at the exact release commit is structurally valid and finalized.This is release-process hardening only. It does not change runtime packages, public APIs, product versions, dependency ranges, or lockfiles.
What changed
checksandapp_idfields while preserving malformed evidence for fail-closed validationgh api --includewithout accepting arbitrary reverse-mixed framingThe backport ports the three source files from #4661. One main-only message hunk is omitted because the release branch already carries equivalent retry wording from #4676; the strict evidence behavior and source spec coverage are preserved, including the newer post-pull prerelease guard already on the release branch.
Validation
4ab97d6cfe5ea1af975643d743fb1b65f8439455with no conflictsgit diff --checkpassed17.0.0.rc.11/17.0.0-rc.11.lychee.tomlbecause this host has Lychee 0.24.2, but this backport adds no guide URLs and hosted link checks cover the PRgh api --includegh 2.89.0probe against the unprotected PR branch now parses the 404 response and corroborates the branch as unprotectedchecks/app_idshapes; malformed booleans, numbers, strings, objects, array entries, and missing contexts remain fail-closedReview disposition
gh api --includecompatibility check. The probe exposed a genuine mixed-newline compatibility bug, fixed inc521db0e6with narrow framing rules and regression coverage.gh2.89.0 source confirms any page request or response-processing failure returns a nonzero command status, and this release helper rejects all captured output on nonzero status; no code change was needed.checks, and modern entries may omitapp_id. Fixed in1d7f7a200by normalizing only those optional omissions while preserving malformed evidence for strict validation.Classification
d4fef09df8b5da0f580563e4f5fb775f4fcb5f0f)release/17.0.0, next RCdevelopment, RC phase)not_user_visible(release-safety mechanics and operator documentation)Confidence note:
Summary by CodeRabbit
Release Process
Documentation
Quality