背景
src/opencode_a2a/server/task_store.py 当前通过 _normalize_task_store_context() 对传入的 ServerCallContext | None 做最小规范化,但当调用方传入“看起来像 ServerCallContext”的伪对象时,函数会直接原样返回,不会补齐或校验 context.user。
在 DatabaseTaskStore 路径下,这会把错误延后到 upstream owner_resolver(context),最终表现为 TaskStoreOperationError("save"|"get"|"delete", task_id)。本地已可复现:对 MagicMock(spec=ServerCallContext) 仅填充 state 与 requested_extensions 时,store.save() 会失败并由 TaskStoreOperationWrappingDecorator 包装成 task-store 操作错误。
同时,tests/support/helpers.py 里的 make_request_context_mock() 目前正使用 MagicMock(spec=ServerCallContext) 构造 call_context,且未设置 user。这意味着同类脆弱上下文已经存在于仓库测试辅助中,而不是纯理论风险。
需要回答的问题
_normalize_task_store_context() 是否应在非空 context 上补齐默认 UnauthenticatedUser / 真实 ServerCallContext 语义,而不是直接原样透传?
make_request_context_mock() 是否应改为构造真实 ServerCallContext,或至少显式填充 user?
- 除 HTTP 主路径外,哪些执行路径会把 helper 生成的 call context 传入 task store,需要一并补测试?
- 是否应新增回归测试,覆盖伪
ServerCallContext 输入下 save/get/delete/list 的行为边界?
目标
- 消除 task store 对伪
ServerCallContext 的脆弱依赖。
- 让测试辅助与真实运行时上下文语义保持一致。
- 防止同类 owner 解析错误再次以
TaskStoreOperationError 形式出现。
背景
src/opencode_a2a/server/task_store.py当前通过_normalize_task_store_context()对传入的ServerCallContext | None做最小规范化,但当调用方传入“看起来像ServerCallContext”的伪对象时,函数会直接原样返回,不会补齐或校验context.user。在
DatabaseTaskStore路径下,这会把错误延后到 upstreamowner_resolver(context),最终表现为TaskStoreOperationError("save"|"get"|"delete", task_id)。本地已可复现:对MagicMock(spec=ServerCallContext)仅填充state与requested_extensions时,store.save()会失败并由TaskStoreOperationWrappingDecorator包装成 task-store 操作错误。同时,
tests/support/helpers.py里的make_request_context_mock()目前正使用MagicMock(spec=ServerCallContext)构造call_context,且未设置user。这意味着同类脆弱上下文已经存在于仓库测试辅助中,而不是纯理论风险。需要回答的问题
_normalize_task_store_context()是否应在非空 context 上补齐默认UnauthenticatedUser/ 真实ServerCallContext语义,而不是直接原样透传?make_request_context_mock()是否应改为构造真实ServerCallContext,或至少显式填充user?ServerCallContext输入下 save/get/delete/list 的行为边界?目标
ServerCallContext的脆弱依赖。TaskStoreOperationError形式出现。