bug(recover): the recovery workflow's push fails with HTTP 400 because the checkout's Authorization header is never unset #1574
Labels
No labels
bump
major
bump
minor
bump
patch
kind
bug
kind
chore
kind
docs
kind
epic
kind
feature
loop/paused
mirror-drift
priority
critical
priority
high
priority
low
priority
medium
size
L
size
M
size
S
size
XL
status
blocked
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
frankenbit/release-toolkit#1574
Loading…
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.ymlcannot push its recovery branch on an adopter that checks out with the defaultpersist-credentials. The push fails with HTTP 400, so the dispatch-only recovery workflow (#1135) never opens its PR.Measured 2026-10-08, frankenbit/tic-tac-toe, pinned
@v0.67.0Run 32,
recover pending cut,version=0.2.0, real run (dry run 31 on the same tree succeeded):Cause
checkoutstep isactions/checkout@v4with nopersist-credentials: false. It leaveshttp.https://git.frankenbit.de/.extraheader = AUTHORIZATION: basic …in the repo-local git config.reusable-recover-pending-cut.yml:363onv0.67.0and onmain) writes a secondAuthorization: token …extraheader into aGIT_CONFIG_GLOBALfile and does not unset the local one. git sends both headers.git ls-remote --heads:Authorizationheader: the normal auth challenge (could not read Username);AUTHORIZATION: basicheader:The requested URL returned error: 400, the exact error above;rt prepalready handles this.withTokenConfig(internal/prep/git.go:393,:558) unsetshttp.<base>/.extraheaderfirst, "or it would out-rank GIT_CONFIG_GLOBAL". The recovery step is shell, notrt prep, and has no such line.Not measured
Workaround used
The documented local route: run
rt recover-pending-cutlocally and commit by hand, which produced tic-tac-toe#8. The restore itself is unaffected: the restored fragments are byte-identical to the prepare's parent.Arm the fix should carry
A test in which the checkout's persisted extraheader is present at push time. A step that works only on a credential-free checkout would pass every arm that never runs
actions/checkout.Refs #1135, #1166