Skip to content

收敛 task store 对伪 ServerCallContext 的兼容缺口 #447

@liujuanjuan1984

Description

@liujuanjuan1984

背景

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) 仅填充 staterequested_extensions 时,store.save() 会失败并由 TaskStoreOperationWrappingDecorator 包装成 task-store 操作错误。

同时,tests/support/helpers.py 里的 make_request_context_mock() 目前正使用 MagicMock(spec=ServerCallContext) 构造 call_context,且未设置 user。这意味着同类脆弱上下文已经存在于仓库测试辅助中,而不是纯理论风险。

需要回答的问题

  1. _normalize_task_store_context() 是否应在非空 context 上补齐默认 UnauthenticatedUser / 真实 ServerCallContext 语义,而不是直接原样透传?
  2. make_request_context_mock() 是否应改为构造真实 ServerCallContext,或至少显式填充 user
  3. 除 HTTP 主路径外,哪些执行路径会把 helper 生成的 call context 传入 task store,需要一并补测试?
  4. 是否应新增回归测试,覆盖伪 ServerCallContext 输入下 save/get/delete/list 的行为边界?

目标

  • 消除 task store 对伪 ServerCallContext 的脆弱依赖。
  • 让测试辅助与真实运行时上下文语义保持一致。
  • 防止同类 owner 解析错误再次以 TaskStoreOperationError 形式出现。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions