From b8e881fafe16bbf59eb6164f22c854feb69d7037 Mon Sep 17 00:00:00 2001 From: isshaddad Date: Wed, 15 Jul 2026 10:17:59 -0400 Subject: [PATCH 1/2] fix(webapp): log transient Attio 5xx/429 at warn instead of error --- .server-changes/attio-sync-transient-retry.md | 6 ++++++ apps/webapp/app/services/attio.server.ts | 19 ++++++++++++------- 2 files changed, 18 insertions(+), 7 deletions(-) create mode 100644 .server-changes/attio-sync-transient-retry.md diff --git a/.server-changes/attio-sync-transient-retry.md b/.server-changes/attio-sync-transient-retry.md new file mode 100644 index 00000000000..58685a70dba --- /dev/null +++ b/.server-changes/attio-sync-transient-retry.md @@ -0,0 +1,6 @@ +--- +area: webapp +type: improvement +--- + +Transient Attio CRM sync failures are now retried quietly instead of surfacing as errors. diff --git a/apps/webapp/app/services/attio.server.ts b/apps/webapp/app/services/attio.server.ts index c26eca8e37e..f0852509f4f 100644 --- a/apps/webapp/app/services/attio.server.ts +++ b/apps/webapp/app/services/attio.server.ts @@ -47,13 +47,18 @@ class AttioClient { if (!response.ok) { const body = await response.text(); - logger.error("Attio assert failed", { - object, - matchingAttribute, - status: response.status, - body, - }); - throw new Error(`Attio assert ${object} failed with status ${response.status}`); + // 5xx/429 are transient (the worker retries); warn + tag so they don't page Sentry. Real 4xx stay error. + const transient = response.status >= 500 || response.status === 429; + const fields = { object, matchingAttribute, status: response.status, body }; + if (transient) { + logger.warn("Attio assert failed", fields); + } else { + logger.error("Attio assert failed", fields); + } + const message = `Attio assert ${object} failed with status ${response.status}`; + throw transient + ? Object.assign(new Error(message), { logLevel: "warn" as const }) + : new Error(message); } const recordId = ((await response.json()) as any).data?.id?.record_id; From a362d790028ae5dde98cf9c7b93dcc4436ccadfb Mon Sep 17 00:00:00 2001 From: Iss <74388823+isshaddad@users.noreply.github.com> Date: Wed, 15 Jul 2026 10:40:44 -0400 Subject: [PATCH 2/2] Update .server-changes/attio-sync-transient-retry.md Co-authored-by: devin-ai-integration[bot] <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- .server-changes/attio-sync-transient-retry.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.server-changes/attio-sync-transient-retry.md b/.server-changes/attio-sync-transient-retry.md index 58685a70dba..9c54416a467 100644 --- a/.server-changes/attio-sync-transient-retry.md +++ b/.server-changes/attio-sync-transient-retry.md @@ -3,4 +3,4 @@ area: webapp type: improvement --- -Transient Attio CRM sync failures are now retried quietly instead of surfacing as errors. +Transient internal sync failures are now retried quietly instead of surfacing as errors.