diff --git a/apps/webapp/app/routes/api.v1.waitpoints.tokens.$waitpointFriendlyId.complete.ts b/apps/webapp/app/routes/api.v1.waitpoints.tokens.$waitpointFriendlyId.complete.ts index 916bfd1986..133b6bc55f 100644 --- a/apps/webapp/app/routes/api.v1.waitpoints.tokens.$waitpointFriendlyId.complete.ts +++ b/apps/webapp/app/routes/api.v1.waitpoints.tokens.$waitpointFriendlyId.complete.ts @@ -72,7 +72,16 @@ const { action, loader } = createActionApiRoute( { status: 200 } ); } catch (error) { - logger.error("Failed to complete waitpoint token", { error }); + // Re-throw Response objects (intentional HTTP responses like the 404 above) so the + // client gets the correct status code instead of a 500, and we don't log them as errors. + if (error instanceof Response) throw error; + + logger.error("Failed to complete waitpoint token", { + error: + error instanceof Error + ? { name: error.name, message: error.message, stack: error.stack } + : error, + }); throw json({ error: "Failed to complete waitpoint token" }, { status: 500 }); } } diff --git a/apps/webapp/app/v3/marqs/sharedQueueConsumer.server.ts b/apps/webapp/app/v3/marqs/sharedQueueConsumer.server.ts index 0d6327f064..20ee9daf7d 100644 --- a/apps/webapp/app/v3/marqs/sharedQueueConsumer.server.ts +++ b/apps/webapp/app/v3/marqs/sharedQueueConsumer.server.ts @@ -600,7 +600,7 @@ export class SharedQueueConsumer { (!retryingFromCheckpoint && !EXECUTABLE_RUN_STATUSES.withoutCheckpoint.includes(existingTaskRun.status)) ) { - logger.error("Task run has invalid status for execution. Going to ack", { + logger.warn("Task run has invalid status for execution. Going to ack", { queueMessage: message.data, messageId: message.messageId, taskRun: existingTaskRun.id,