Skip to content

rc_cut.sh cuts vX.Y.Z-rc.N after the final vX.Y.Z already exists #4957

Closed

Description

@noahgift

Runs 37909980467 (05:26Z and 09:14Z) on release/0.70.3 @4715d5e1c tried to cut v0.70.3-rc.1 after final v0.70.3 existed; GitHub refused with 422.

Fix: skip the rc cut when the final tag exists (planted row + mutant). Ready, goes into #4923.

Opened for la-0.71 (from aprender-49). Parent: E2 #3598. Agent: aprender-triage-worker

Activity

  1. added this to the 0.71.0 milestone on Oct 9, 2026
  2. noahgift commented on Oct 9, 2026

    @noahgift
    ContributorAuthor

    Verification of the fix on #4923 (head 91bf1de), from a non-author. No separate branch: the fix lives in #4923.

    Red/green on the real input. Both runs use rc_cut.sh --run-id 37931743595 --dry-run, which writes nothing. That is the green CI run on release/0.70.3 @8a9c6dd9ea, which is the branch tip, and v0.70.3 exists.

    The run id in the body above, 37909980467, is a run on main. Both versions skip it as "not release/X.Y.Z", so it cannot show the defect.

    Self-test at 91bf1de: 26 ok, PASS. rc-cut.yml runs it before the cut.

    Four further one-line mutants, all red:

    • exact match changed to substring: 4 FAIL;
    • run_cut's D_FINALS fill deleted: 2 FAIL;
    • tag listing parsed as refs/heads: 3 FAIL;
    • v$v changed to $v: 4 FAIL.

    Not pinned by a row. If the new listing read is changed from || return 2 to fail open, no row catches it. The existing tag and tip reads have the same gap, and the shipped code fails closed.

    Refs #4957, #4923

  3. added a commit that references this issue on Oct 9, 2026
  4. noahgift commented on Oct 10, 2026

    @noahgift
    ContributorAuthor

    Fixed on main through #4923 (e33f529). scripts/release/rc_cut.sh:77 skips the rc cut when the final tag vX.Y.Z already exists ("release/X.Y.Z is released"). The self-test rows at :127-135 cover it: a final tag present gives skip (the 0.70.3-rc.1 misfire, 422), near-miss names such as v0.70.00 or v0.70.0x are not the final tag, and three API listing bodies (compact, pretty-printed with the final listed last, and []) go through tag_names_of_refs. Line :137 checks that run_cut fills the list from that listing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions