From 968a20bd379c20e6a413fe4b07d939969db5cc4a Mon Sep 17 00:00:00 2001 From: "Molecule AI Dev Engineer A (Kimi)" Date: Tue, 26 May 2026 13:17:58 +0000 Subject: [PATCH] fix(a2a,orgtoken,registry): handle RowsAffected errors in background paths Fixes ignored result.RowsAffected() errors in: - a2a_queue.go drain stitch: log error instead of mis-firing "no row" path - orgtoken/tokens.go Revoke: return error instead of false-negative (false, nil) - registry/provisiontimeout.go sweep: log error instead of silent skip Co-Authored-By: Claude Opus 4.7 --- workspace-server/internal/handlers/a2a_queue.go | 7 ++++++- workspace-server/internal/orgtoken/tokens.go | 5 ++++- workspace-server/internal/registry/provisiontimeout.go | 6 +++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/workspace-server/internal/handlers/a2a_queue.go b/workspace-server/internal/handlers/a2a_queue.go index a212ba683..2792f13ca 100644 --- a/workspace-server/internal/handlers/a2a_queue.go +++ b/workspace-server/internal/handlers/a2a_queue.go @@ -434,7 +434,12 @@ func (h *WorkspaceHandler) stitchDrainResponseToDelegation(ctx context.Context, log.Printf("A2AQueue drain stitch: update failed for delegation %s: %v", delegationID, err) return } - if rows, _ := res.RowsAffected(); rows == 0 { + rows, err := res.RowsAffected() + if err != nil { + log.Printf("A2AQueue drain stitch: RowsAffected error for delegation %s: %v", delegationID, err) + return + } + if rows == 0 { log.Printf("A2AQueue drain stitch: no delegate_result row for delegation %s (queued-row may not exist yet)", delegationID) return } diff --git a/workspace-server/internal/orgtoken/tokens.go b/workspace-server/internal/orgtoken/tokens.go index 94d588ec7..48f98a2d7 100644 --- a/workspace-server/internal/orgtoken/tokens.go +++ b/workspace-server/internal/orgtoken/tokens.go @@ -192,7 +192,10 @@ func Revoke(ctx context.Context, db *sql.DB, id string) (bool, error) { if err != nil { return false, fmt.Errorf("orgtoken: revoke: %w", err) } - n, _ := res.RowsAffected() + n, err := res.RowsAffected() + if err != nil { + return false, fmt.Errorf("orgtoken: revoke RowsAffected: %w", err) + } return n > 0, nil } diff --git a/workspace-server/internal/registry/provisiontimeout.go b/workspace-server/internal/registry/provisiontimeout.go index 5711e9e0f..0b863c35f 100644 --- a/workspace-server/internal/registry/provisiontimeout.go +++ b/workspace-server/internal/registry/provisiontimeout.go @@ -190,7 +190,11 @@ func sweepStuckProvisioning(ctx context.Context, emitter ProvisionTimeoutEmitter log.Printf("Provision-timeout sweep: failed to flip %s to failed: %v", c.id, err) continue } - affected, _ := res.RowsAffected() + affected, err := res.RowsAffected() + if err != nil { + log.Printf("Provision-timeout sweep: RowsAffected error for %s: %v", c.id, err) + continue + } if affected == 0 { // Raced with restart / register — no harm, just skip. continue -- 2.52.0