diff options
| author | Peter Stone <thepeterstone@gmail.com> | 2026-07-12 05:36:32 +0000 |
|---|---|---|
| committer | Peter Stone <thepeterstone@gmail.com> | 2026-07-12 05:36:32 +0000 |
| commit | 9a87f9db5af943ea253b814d4196020341e3c2ba (patch) | |
| tree | acaeb91e0fad131b15d4d6d41c5d0ea0254c2966 /internal/api/http_test.go | |
| parent | 73fbd05a1230552bcef9834d3ee999ef19957693 (diff) | |
fix(widget): surface unmatched task IDs instead of silently no-opping
CompleteNativeTask/UncompleteNativeTask/RescheduleNativeTask ran a plain
UPDATE ... WHERE id = ? and returned whatever error Exec gave back --
which is nil even when 0 rows match, since that's not a SQL error. A
stale or wrong id from the widget looked identical to a real completion:
HTTP 200, nothing changed in the database. Real incident: 1 of 3 widget
completeTask taps silently no-opped this way.
Now checks RowsAffected() and returns ErrNativeTaskNotFound (mirrors the
existing pattern in sqlite.go's ApproveAgentSession/DenyAgentSession).
HandleWidgetComplete and HandleWidgetReschedule surface this as 404
instead of a fake 200, so the widget can tell 'nothing changed' apart
from 'it worked.'
Diffstat (limited to 'internal/api/http_test.go')
0 files changed, 0 insertions, 0 deletions
