A node credential lasts fifteen minutes and nothing ever replaced it. Nodes::rotate existed but had no caller and no message to carry its result, so every node was locked out a quarter of an hour after enrolling and only a fresh enrolment token got it back. That is what took dev down.
The control plane now pushes Rotated on the open session whenever the node speaks and the credential it holds is within the renewal margin of expiry. It is pushed rather than requested, and offered again on every heartbeat, so a lost message costs nothing.
An enrolled node that never spoke now settles as offline as well. It was reported as newly gone on every sweep forever, which is what buried the real failure in the log.
Paired with syncode/runnerfix/keep-the-node-credential-current, which keeps what this hands over.
A node credential lasts fifteen minutes and nothing ever replaced it. `Nodes::rotate` existed but had no caller and no message to carry its result, so every node was locked out a quarter of an hour after enrolling and only a fresh enrolment token got it back. That is what took dev down.
The control plane now pushes `Rotated` on the open session whenever the node speaks and the credential it holds is within the renewal margin of expiry. It is pushed rather than requested, and offered again on every heartbeat, so a lost message costs nothing.
An enrolled node that never spoke now settles as offline as well. It was reported as newly gone on every sweep forever, which is what buried the real failure in the log.
Paired with `syncode/runner` `fix/keep-the-node-credential-current`, which keeps what this hands over.
A node credential lasts fifteen minutes and nothing ever replaced it.
`Nodes::rotate` existed but had no caller and no message to carry its
result, so every node was locked out a quarter of an hour after enrolling
and only a fresh enrolment token got it back. That is what took dev down.
The control plane now pushes `Rotated` on the open session whenever the
node speaks and the credential it holds is within the renewal margin of
expiry. It is pushed rather than requested, and offered again on every
heartbeat, so a lost message costs nothing.
An enrolled node that never spoke now settles as offline as well. It was
reported as newly gone on every sweep forever, which is what buried the
real failure in the log.
day01
merged commit 4ee9829202 into %!s()2026-08-12 08:06:40 +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.
A node credential lasts fifteen minutes and nothing ever replaced it.
Nodes::rotateexisted but had no caller and no message to carry its result, so every node was locked out a quarter of an hour after enrolling and only a fresh enrolment token got it back. That is what took dev down.The control plane now pushes
Rotatedon the open session whenever the node speaks and the credential it holds is within the renewal margin of expiry. It is pushed rather than requested, and offered again on every heartbeat, so a lost message costs nothing.An enrolled node that never spoke now settles as offline as well. It was reported as newly gone on every sweep forever, which is what buried the real failure in the log.
Paired with
syncode/runnerfix/keep-the-node-credential-current, which keeps what this hands over.