authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-06-20 11:13:27-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-06-20 11:13:27-07:00
log4d790f0064ab99287d3ccb17d2f003f5ed8e8d3e
treeb7d82104a0a9dcc6ca65f903636b9ab682e42e84
parent3ecf3685ba7dbaca04f6a1219a8d42e6094dc526
signature Signed by PGP key B5690EEEBB952194

[codex] Bound relay registration replay diagnostics (#3420)

Co-authored-by: codex <codex@users.noreply.github.com>

2 files changed, 20 insertions(+), 6 deletions(-)

infra/relay/src/agentActivity/MobileRegistrations.test.ts+12-2
......@@ -7,6 +7,7 @@ import * as NodeCryptoLayer from "@effect/platform-node/NodeCrypto";
77import { describe, expect, it } from "@effect/vitest";
88import * as Effect from "effect/Effect";
99import * as Layer from "effect/Layer";
10import * as Logger from "effect/Logger";
1011import * as Redacted from "effect/Redacted";
1112import { FetchHttpClient } from "effect/unstable/http";
1213
......@@ -232,6 +233,11 @@ describe("MobileRegistrations", () => {
232233 });
233234
234235 it.effect("keeps device registration successful when activity replay fails", () => {
236 const messages: unknown[] = [];
237 const logger = Logger.make(({ message }) => {
238 messages.push(message);
239 });
240
235241 return Effect.gen(function* () {
236242 const result = yield* Effect.gen(function* () {
237243 const registrations = yield* MobileRegistrations.MobileRegistrations;
......@@ -250,7 +256,7 @@ describe("MobileRegistrations", () => {
250256 Effect.fail(
251257 new AgentActivityRows.AgentActivityRowListPersistenceError({
252258 userId: "dev:julius",
253 cause: "replay failed",
259 cause: "sensitive device replay detail",
254260 }),
255261 ),
256262 }),
......@@ -262,7 +268,11 @@ describe("MobileRegistrations", () => {
262268 );
263269
264270 expect(result).toEqual({ ok: true });
265 });
271 expect(messages).toContainEqual([
272 "device registration activity replay failed",
273 { errorTag: "AgentActivityRowListPersistenceError" },
274 ]);
275 }).pipe(Effect.provide(Logger.layer([logger], { mergeWithExisting: false })));
266276 });
267277
268278 it.effect("unregisters the current user's device", () => {
infra/relay/src/agentActivity/MobileRegistrations.ts+8-4
......@@ -51,8 +51,10 @@ export const make = Effect.gen(function* () {
5151 deviceId: input.payload.deviceId,
5252 })
5353 .pipe(
54 Effect.tapError((cause) =>
55 Effect.logWarning("device registration activity replay failed", { cause }),
54 Effect.tapError((error) =>
55 Effect.logWarning("device registration activity replay failed", {
56 errorTag: error._tag,
57 }),
5658 ),
5759 Effect.ignore,
5860 );
......@@ -70,8 +72,10 @@ export const make = Effect.gen(function* () {
7072 deviceId: input.payload.deviceId,
7173 })
7274 .pipe(
73 Effect.tapError((cause) =>
74 Effect.logWarning("live activity registration replay failed", { cause }),
75 Effect.tapError((error) =>
76 Effect.logWarning("live activity registration replay failed", {
77 errorTag: error._tag,
78 }),
7579 ),
7680 Effect.ignore,
7781 );