Hold the Certum signing jobs to one login at a time - #199
Merged
Merged
Conversation
The v1.8.0 release failed with "SimplySign rejected the credentials 3 times; check the account name, the otpauth URI and the clock" — and every one of those was fine. In the same run, minutes apart, the CLI's Windows job opened a session against the same account and signed. Four jobs across three workflows sign with one Certum SimplySign account, and two of them — "Windows app" and the CLI matrix's windows leg — both hang off `needs: check`, so they start together and log in together. A TOTP code is single-use, so whichever login lands second is told "invalid user name or token". Connect-SimplySign.ps1 sees only an unexpected window, dismisses it, pastes a fresh code and eventually gives up, blaming the credentials. It is a race, and it has been there since signing was introduced in #165. It had simply been winning: at v1.7.0 the two logins overlapped by three seconds, at v1.8.0 they overlapped entirely. A shared `certum-simplysign` concurrency group now holds every signing job in the repository to one login at a time, releases and the manual signing check alike, with cancel-in-progress false so the loser queues rather than dies. The group cannot be narrowed to the windows leg: job-level concurrency may use only the github, inputs and vars contexts, not matrix, so the CLI's linux and macOS legs queue on it too. They are minutes of waiting against an account lockout. The thrown message now names a concurrent signing job as the first thing to suspect, since the old one sent this investigation after three things that were all correct. Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
"Microsoft's" sits inside a single-quoted bash string, so the apostrophe closed
it and left the rest of the sentence bare. The first unquoted ")" then ended the
step:
line 48: syntax error near unexpected token `)'
v1.8.0 is the first release to reach that line — it landed in #170 at 14:01 on
2026-09-15, and the last release before it ran at 11:20 the same morning. Both
release workflows carry the sentence, so elevate-audit would have failed the
same way on its next tag.
Neither notes step runs outside a release, which is why a syntax error sat in
main for four days. Checking it is cheap: every `run:` block in the repository
that is not pwsh now passes `bash -n` (91 of them), and that is worth a job of
its own if this happens again.
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The v1.8.0 release failed on
Open the SimplySign session:All three were fine. In the same run, the CLI's Windows job opened a session against the same account and signed successfully.
What actually happened
Four jobs across three workflows sign with one Certum SimplySign account. Two of them —
Windows appand the CLI matrix'swindowsleg — both hang offneeds: check, so they start together and log in together. A TOTP code is single-use, so whichever login lands second is told "invalid user name or token".Connect-SimplySign.ps1can only see an unexpected window: it dismisses it, pastes a fresh code, and after three rounds gives up blaming the credentials.The race has been there since signing landed in #165. It had simply been winning:
Windows apploginThe fix
A shared
certum-simplysignconcurrency group holds every signing job in the repository to one login at a time — both release workflows and the manual signing check — withcancel-in-progress: falseso the loser queues instead of dying. The queue holds up to 100, so nothing is dropped.The group cannot be narrowed to the windows leg: job-level
concurrencymay use only thegithub,inputsandvarscontexts, notmatrix. So the CLI's linux and macOS legs queue on it too — minutes of waiting, weighed against an account lockout. Splitting the windows leg into its own job would avoid that, at the cost of duplicating the CLI build steps; worth doing if the wait becomes annoying.The thrown message now names a concurrent signing job as the first thing to suspect, since the old wording sent this investigation after three things that were all correct.
Verification
Not run end to end: exercising it means a real release, and every attempt is a login against an account that locks on repeated failure. What was checked:
release.yml× 2,release-audit.yml,signing-check.yml).Connect-SimplySign.ps1parses — the first draft of the message used\"and would have thrown at the exact moment it was needed. PowerShell escapes with a backtick.macos/,windows/,cli/,shared/andaudit/, and this is release plumbing.v1.8.0 itself was unblocked separately by re-running the failed job alone, with nothing competing for the session.
Co-authored-by: Claude Opus 5 noreply@anthropic.com
Second fault: the release notes step never parsed
With the session fixed,
Publish releasefailed too — a different bug, found the same evening:Microsoft'ssits inside a single-quoted bash string in the Release notes step, so the apostrophe closed the string and left the rest of the sentence bare; the first unquoted)ended the step. Reproduced locally by extracting the block and runningbash -non it.v1.8.0 is the first release to reach that line: it landed in #170 at 14:01 on 2026-09-15, and the last release before it ran at 11:20 that morning.
release-audit.ymlcarries the same sentence, so elevate-audit would have failed identically on its next tag. Both are fixed.Neither notes step runs outside a release, which is how a syntax error sat in
mainfor four days. I checked the rest: every non-pwshrun:block in the repository — 91 of them — now passesbash -n, and only these two were broken. A CI job doing exactly that would be cheap insurance; say the word and I'll add one, thoughactionlintmay be the better tool and will likely surface unrelated warnings.Note on releasing v1.8.0
Re-running the existing run will not pick this up: a re-run uses the workflow as of the tagged commit. To release 1.8.0 with the fix, merge this, then move the
v1.8.0tag to the newmainhead and push it — that starts a fresh run on the fixed workflow. The tag is public but no release was ever published against it.