feat(requests): deliver respond/More-Info outcomes to the requester agent as real A2A turns #2614
Reference in New Issue
Block a user
Delete Branch "feat/2606-respond-notifies-requester"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes the loop the CTO hit live: clicking Done/Reject/Approve in the Tasks/Approvals tabs (or sending More Info) only emitted a structure event — the agent that raised the request never received anything and stayed silent until something made it poll
check_requests.Now a terminal response on an agent-raised request enqueues a
message/sendA2A turn to the requester (same a2a-queue path as scheduler ticks / the inbox nudge sweeper), idempotency-keyed per request; recipient-authored More-Info messages deliver the ask per message. Best-effort — an enqueue failure never fails the respond;check_requestsremains the durable pull path.Tests: notification routing/idem-key/body on respond, More-Info delivery, and no-notify for user-raised requests. Full handlers pkg green.
Refs core#2606.
🤖 Generated with Claude Code
Requesting changes.
5-axis review on head
3aeac57:message/send, stable idempotency keyrequest-responded:<id>, and best-effort failure handling. More-Info also uses per-message idempotency, which fits multi-round threads.EnqueueA2Aconflict behavior.AddMessageis registered on the workspace-auth route (/workspaces/:id/requests/:requestId/messages), but unlikeGet,Respond, andCancel, the handler never checks that:idis a participant and never bindsauthor_type/author_idto the authenticated workspace. It still trusts the body. This PR turns recipient-authored messages into real A2A turns, so any workspace-token caller that knows a request id can spoofauthor_type/author_idas the recipient, append a More-Info message, flip the request toinfo_requested, and enqueue an arbitrary message/send turn to the requester agent. Please add the same workspace-token participant binding/authorization here: requester may author as itself, recipient may author as itself, non-participants get 403, and body identity is ignored on the workspace path. Add regression tests for both recipient and non-participant workspace paths.I did not run local Go tests because this runtime has no
gobinary; Gitea Platform Go was still pending when reviewed.Approved on head
9a8b3b21eb.5-axis review:
Local verification note: I could not run the focused Go tests in this runtime because go is not installed. I reviewed the current diff and test coverage directly. PR status is not fully green at review time due external/pending governance/check contexts, but I found no code blocker in this change.
New commits pushed, approval review dismissed automatically according to repository settings
APPROVED. Re-reviewed current head
e688742ea2. The request outcome delivery remains best-effort, idempotency-keyed, and scoped to requester-agent notification for terminal responses and recipient-authored More-Info turns. The workspace-token AddMessage path binds authorship to the authenticated workspace and checks participant authz before delegating to the store. The updated authz tests now expect both request lookups (handler-level authz Get plus store Get), which addresses the stale test failure; the staticcheck-triggering condition is no longer present in the reviewed diff. Required contexts are green by max-id collapse: CI / all-required, Platform, E2E API Smoke, and Handlers Postgres; remaining reds are governance/advisory. I could not rerun Go tests locally because Go/golangci-lint are unavailable in this container. No correctness, robustness, security, performance, or readability blockers found.