From 0f04b8d9a0384e1fa765f43f469a63491fd0a416 Mon Sep 17 00:00:00 2001 From: clawbot <35+clawbot@noreply.example.org> Date: Fri, 2 Oct 2026 16:30:44 +0000 Subject: [PATCH] Name the reaper's hard delete in the eventBodyQuery comment (closes #455) The comment credited the deleted_at predicate with refusing a reaped event. The retention reaper deletes event rows outright, so a reaped event is simply gone; nothing soft-deletes an event, so the predicate excludes nothing today. Model: opus-5-5 --- internal/handlers/event_body.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/internal/handlers/event_body.go b/internal/handlers/event_body.go index cf2452f..e0b242c 100644 --- a/internal/handlers/event_body.go +++ b/internal/handlers/event_body.go @@ -15,10 +15,12 @@ import ( // eventBodyQuery reads one event's stored body as bytes. The cast // to blob is what makes the driver hand back the stored bytes // rather than a string conversion, so Content-Length taken from -// the result matches what goes on the wire. The soft-delete -// predicate is spelled out because Raw bypasses GORM's default -// scope, and it is what stops a reaped event still being -// downloadable. +// the result matches what goes on the wire. The retention reaper +// deletes event rows outright, so a reaped event is simply gone +// and the query finds no row. The deleted_at predicate repeats +// the soft-delete scope GORM adds to its own queries, which Raw +// bypasses; nothing soft-deletes an event, so today it excludes +// nothing. const eventBodyQuery = "SELECT cast(body as blob) " + "FROM events WHERE id = ? AND webhook_id = ? AND deleted_at IS NULL"