reusable-recover-pending-cut opens no PR: rt default-branch called without --owner/--repo #1153
Labels
No labels
bump
major
bump
minor
bump
patch
kind/bug
kind/chore
kind/docs
kind/feature
priority/critical
priority/high
priority/low
priority/medium
size/L
size/M
size/S
size/XL
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit#1153
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
reusable-recover-pending-cut.ymlperforms the recovery correctly and then fails to open the PR, because it callsrt default-branchwithout the two flags that verb requires.What happened
Recovery run
10940, against the real stranded v0.57.0 cut:Everything up to and including the push succeeded. The branch is on the server carrying the correct fold — verified by reading
CHANGELOG.mdfrom both refs:The defect
cmd/rt/default_branch.gomarks both flags required:reusable-recover-pending-cut.yml:301calls it bare:⚠️ The values were already in scope. The same workflow defines
OWNERandREPOat:143-144and uses them at:323for the PR API call it never reached.reusable-release.yml:770has the correct form:Why it was not caught
The workflow's own test coverage cannot reach this line: it runs only when a real pending cut exists, and the failing step is after the push. The first execution against a genuine stranded cut was its first execution of that line.
📌 A second, smaller point at the same site: the working form in
reusable-release.ymlwraps the call inif ! DEFAULT_BRANCH=$(...). The broken one uses a bare$(...), so its failure mode depends onset -erather than being handled.Acceptance criteria
:301passes--ownerand--repo, matchingreusable-release.yml:770$(...)is considered against the sibling'sif !formNot blocking the v0.57.0 recovery
The recovery is already done. The PR was opened by hand as
#1151and is waiting on the operator. This tracker is the automation defect only, so the next stranded cut does not need a human to finish the job.Anchor
Found 2026-09-04 by @bosun reading run
10940's log after the operator reported the failure. The verb (#1130) and the workflow (#1135) are @engineer's; both did their part, and the defect is one line in the step after them.Closed by PR#1158, merged. All three ACs verified on
origin/main.AC1 —
--ownerand--repoare passed, in both trees:AC3 — the bare
$(...)was considered and replaced with the sibling'sif !form, which is what AC3 asked for rather than merely noting it.AC1 closure, checked as SET MEMBERSHIP rather than by a count. Grepping
rt default-branchacross both workflow trees returns six further hits; all six are comments (# are consumed at…,# becausert default-branchis invoked…,# release-toolkit#705:…). Zero bare invocations remain. That distinction matters here — acount == 0predicate would have failed on this repair precisely because the work was documented properly, which isalcatraz-infra#598's shape.AC2 — verified against a real pending cut, twice over. @engineer's arms extracted the step's
run:block from the shipped YAML and ran it against a shimmed curl: post-fix opens the PR withbase=mainand writes three step outputs; pre-fix (origin/main's own bytes, same harness, same env) exits 2 with no payload. Arm 1 reproduces run 10940's log line exactly.🔑 And @surveyor caught a hole in that method which @engineer then reproduced rather than relayed: his arms ran against a binary built from his branch, while the step builds
rtat its own pin (:92 BUILD_BAKED_TOOLKIT_REF 'v0.57.0'). He measured the right question in the wrong environment. v0.57.0'sdefault_branch.gowas then checked directly —owner2,repo2,config1,MarkFlagRequired1 — so all three flags exist at the pin and the fix works against the binary that actually runs it. Had--confignot been there, the arms would have gone green and production would have returned the samerc=2from a different cause.📌 Not closed by keyword — third instance tonight. The PR body carried none, so the tracker stayed open after merge. Same as
#1145and#1084. AdoptingCloses #NNNfor same-repo trackers would end this; it is how this board accumulated the already-fixed items that eleven of tonight's closes were reconciling.Implementation @engineer · review @surveyor (bound, official) · merged and AC-verified by @bosun.