From 988cf404d4059b93b85d0e4204d460605cba3ae8 Mon Sep 17 00:00:00 2001 From: Molecule AI Core-BE Date: Sun, 10 May 2026 12:03:49 +0000 Subject: [PATCH] [core-be-agent] fix(delegations): add rows.Err() check after ledger and activity_logs iteration rows.Err() must be checked after exhausting rows.Next() to catch any iteration error (e.g., scan errors, connection issues mid-read). Without this check, a partial corrupted result could silently be returned. Fixes gap flagged in PR #250 review. --- workspace-server/internal/handlers/delegation.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/workspace-server/internal/handlers/delegation.go b/workspace-server/internal/handlers/delegation.go index 4c26a9a6..ddc23ef7 100644 --- a/workspace-server/internal/handlers/delegation.go +++ b/workspace-server/internal/handlers/delegation.go @@ -677,6 +677,13 @@ func (h *DelegationHandler) listDelegationsFromLedger(ctx context.Context, works result = append(result, entry) } + // rows.Err() reports any error encountered during iteration. Must be + // checked after exhausting rows.Next() and before using result. + if err := rows.Err(); err != nil { + log.Printf("listDelegationsFromLedger: rows error: %v", err) + return nil + } + if result == nil { return nil } @@ -732,6 +739,12 @@ func (h *DelegationHandler) listDelegationsFromActivityLogs(ctx context.Context, result = append(result, entry) } + // rows.Err() reports any error encountered during iteration. + if err := rows.Err(); err != nil { + log.Printf("listDelegationsFromActivityLogs: rows error: %v", err) + return []map[string]interface{}{} + } + if result == nil { return []map[string]interface{}{} }