A job already tracked in cancellations is a redelivery (e.g. replayed
on reconnect after a credential rotation), not new distinct work.
Previously any redelivery landing while a prior assignment was still
pending crashed the whole agent via CapacityExceeded, which is how a
single flaky reconnect turned into a dead node instead of a no-op.
The stream error already correctly ends the session instead of looping
reconnect attempts (tested since the 0.3 protocol landed), but the plain
tonic status gave no hint that the fix is `register --replace`, not a
retry. Diagnosing that live on synprod today took hours longer than it
needed to.
Both runner and job-image builds used one job cross-building
linux/amd64,linux/arm64 in a single buildx call — under QEMU, the
arm64 half was slow enough to stall the whole CI queue behind it
(meta issue #42, hit twice today). Now each architecture builds
natively on a runner labeled for it (syncode-linux-amd64 /
syncode-linux-arm64), pushes to a per-arch tag, and a small merge job
combines them into the final multi-arch manifest with the same
imagetools create idiom already used to re-tag an existing image.
day01
merged commit e952bc36c5 into %!s()2026-08-18 19:28:25 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Carries the credential-expiry error message (
d6800e7) and the per-arch image build split (4459ba4) onto main.