Sandbox agent-relay cloud run workflows fail after their command steps succeed, because the post-step mount flush dies on 410 cursor_expired and never performs the full resync the error asks for. Two independent occurrences on 2026-09-09, ~20 min apart, on different runs.
This is a rollout ordering problem, not a missing fix
relayfile-cloud#196 "expire cursors and retain event history" merged 2026-09-07 21:54Z <- server starts emitting 410
relayfile#476 "resync expired event cursors" merged 2026-09-08 05:37Z <- client handler
released v0.10.56 05:51Z
The server began expiring cursors roughly eight hours before the client-side handler was released. #476 is exactly the missing behaviour — "recognize 410 cursor_expired / action: full_resync … clear the stale event cursor and force exactly one authoritative full-tree reconciliation" — and its own description flags the dependency:
makes retained-event pruning safe for mount clients once both PRs are reviewed, merged, released, and intentionally enabled by a human
The deployed clients are all older than the handler
sandbox snapshot: relay-orchestrator-sdk-11.10.3-relayfile-v0.10.55-... <- one release short
sf-mini CLI: 0.10.41
finn-mini CLI: 0.10.22
That answers the reporter's question of why cursor expiry does not trigger the resync its own log message names: the code that would do it is not in v0.10.55.
Suggested fix
Bump the sandbox snapshot's pinned relayfile to v0.10.56 or later, and audit any other pinned client. Until then, every mount whose event cursor expires mid-run fails non-deterministically, which blocks both demo workflows and the flows review-swarm CI gate.
The other half — the WebSocket 403 — is probably separate
The reported sequence is: WebSocket handshake returns 403 → falls back to polling → polling's cursor is rejected with 410 → no resync. The 410 half is explained above. The 403 is not, and should not be assumed to share a cause.
Worth noting alongside it, without claiming causation: delegated credential minting is currently failing fleet-wide for CLI clients —
mint delegated relayfile credentials: http 502 relayauth_mint_failed:
RelayAuth request failed (500) /v1/identities;
unable to verify whether RelayAuth identity creation committed
A 403 on a WebSocket upgrade is consistent with an auth/token problem, and the reporter separately observed Relaycast workspace key repair failed: 503 database_overloaded the same day. Those may share a root cause in the session/credential path, or may not — it is being investigated separately and should be established rather than assumed.
Relayfile itself is up. Verified from the deployed factory's authenticated evidence: Relayfile workspace mirror preflight: mounted=1 failed=0 routedRepos=19, with successful ensureSubRoot and listTree operations. Clients holding a valid credential and a current version work fine.
Sandbox
agent-relay cloud runworkflows fail after their command steps succeed, because the post-step mount flush dies on410 cursor_expiredand never performs the full resync the error asks for. Two independent occurrences on 2026-09-09, ~20 min apart, on different runs.This is a rollout ordering problem, not a missing fix
The server began expiring cursors roughly eight hours before the client-side handler was released. #476 is exactly the missing behaviour — "recognize
410 cursor_expired/action: full_resync… clear the stale event cursor and force exactly one authoritative full-tree reconciliation" — and its own description flags the dependency:The deployed clients are all older than the handler
That answers the reporter's question of why cursor expiry does not trigger the resync its own log message names: the code that would do it is not in v0.10.55.
Suggested fix
Bump the sandbox snapshot's pinned relayfile to v0.10.56 or later, and audit any other pinned client. Until then, every mount whose event cursor expires mid-run fails non-deterministically, which blocks both demo workflows and the
flowsreview-swarm CI gate.The other half — the WebSocket 403 — is probably separate
The reported sequence is: WebSocket handshake returns 403 → falls back to polling → polling's cursor is rejected with 410 → no resync. The 410 half is explained above. The 403 is not, and should not be assumed to share a cause.
Worth noting alongside it, without claiming causation: delegated credential minting is currently failing fleet-wide for CLI clients —
A 403 on a WebSocket upgrade is consistent with an auth/token problem, and the reporter separately observed
Relaycast workspace key repair failed: 503 database_overloadedthe same day. Those may share a root cause in the session/credential path, or may not — it is being investigated separately and should be established rather than assumed.Relayfile itself is up. Verified from the deployed factory's authenticated evidence:
Relayfile workspace mirror preflight: mounted=1 failed=0 routedRepos=19, with successfulensureSubRootandlistTreeoperations. Clients holding a valid credential and a current version work fine.