Skip to content

Review gate blocks every Release Please PR: regeneration force-pushes, which fails the continuity check #342

Description

@lamemustafa

Found while trying to merge #337. This blocks all releases, not just v0.6.0.

Symptom

Review gate (scheduled) is a required context and sits at action_required, so #337 is permanently BLOCKED with every other check green and zero unresolved threads.

From the reconcile run log:

Review gate GitHub did not record the prior head, so review continuity cannot be
verified across that rewrite. Re-create the branch as described in #299 before
running the review gate: untraceable force-push discontinuity cannot be verified

Review gate (scheduled) action_required check created for d91447b...

Cause

Release Please updates its release PR by force-pushing the branch, which is normal operation for it. Verified:

$ git merge-base --is-ancestor abdd12b d91447b    # previous #337 head
  -> not an ancestor; the branch was rewritten

scripts/publish-review-gate-check.mjs treats an untraceable rewrite as unverifiable and fails closed — untraceableRewriteError(), the behaviour settled in #318 (4527569, 2026-09-07).

That behaviour is correct for a human branch, where a force-push could replace reviewed code without a trace. It is wrong for a release branch that a bot regenerates from master on every upstream merge.

Timeline supports this reading: v0.5.1 released 2026-08-17; #318 landed 2026-09-07; v0.6.0 is the first release attempt since, and it cannot merge. The discontinuity here was created when #341 merged and Release Please regenerated the branch — before any hand edit — so it is not a consequence of editing the branch.

Why this recurs

Every merge to master regenerates the release PR, so the release branch is rewritten repeatedly by design. Under the current gate, a release PR becomes unmergeable as soon as anything else lands.

Options, none taken

  1. Exempt the release-please branch from the continuity check. The branch is bot-generated and its diff is mechanically derived from master, so there is no prior reviewed state a rewrite could smuggle past — the property the check exists to protect. Narrowest change, but it weakens a security-relevant gate and needs a deliberate decision.
  2. Treat a rewrite as traceable when the new head contains the base branch tip and the diff is regenerable. More precise, more code, and it is the kind of "verify the grammar you do not own" work that has cost this repo repeatedly (Page-reference checking needs a parser, not another special case #197, chore(deps): keep @types/node on the runtime's major #331).
  3. Re-create the branch per docs(gst): record filing-profile discovery hold #299 before each merge. Works once; the next regeneration reproduces the block.

Related complication

Correcting generated release notes requires hand commits on the release branch (#337 carries two, for a reverted entry and for source-only full-year flows). Those are lost on the next regeneration. Whatever fix is chosen should say where release-note corrections are supposed to live, because right now the only place they can exist is a branch that is rewritten without warning.

Not fixing this unilaterally: it changes a gate whose fail-closed posture was chosen deliberately in #318 after seven review rounds.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions