Reference in New Issue
Block a user
Delete Branch "fix/2764-chat-separation-fail-closed"
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?
What
Follow-up to merged #2807 / #2780. CR2 #11492 RC: the Activity API source-filter tests were seeding canvas-origin rows with a bearer token that could resolve to the target workspace, so they could be logged as agent-sourced instead of canvas-sourced, breaking the separation the spec asserts.
postA2AMessageto accept asourceparameter:"canvas": sends no workspace-resolving auth and noX-Workspace-ID, forcing ProxyA2AcallerIDempty →activity_logs.source_idNULL (matching/activity?source=canvas)."agent": sends the workspace bearer token →source_id = workspace_id(matching/activity?source=agent).E2E_ADMIN_TOKENdependency from the Activity API block.Test plan
npx eslint e2e/chat-separation.spec.tspasses.Fixes #2764 / CR2 #11492
🤖 Generated with Claude Code
APPROVED on head
f3b443df.5-axis review:
f3b443df, including E2E Chat, Canvas, Platform, and Shellcheck.No findings.
APPROVED on head
f3b443df5e.I verified the diff is scoped to
canvas/e2e/chat-separation.spec.ts. The source-bucket setup now uses the real A2A proxy with two distinct auth shapes: no bearer / noX-Workspace-IDfor the canvas-origin probe, producingsource_id == NULL, and the workspace bearer for the agent-origin probe, producing a non-null workspacesource_id. Removing theE2E_ADMIN_TOKENdependency is safe for this test because the canvas-origin row is intentionally the unauthenticated/no-caller path that thesource=canvasfilter keys on.The assertions are no longer tautological: each bucket still has the non-empty guard, checks the expected
source_idshape, and also requires the unique seeded probe text to appear in the correct bucket. I found notest.skip, bare return, or remaining admin-token dependency in the spec.E2E ChatandCI / all-requiredare green on this head.