Files
ai-workflow-skill/docs/tests/inbox/fetch/README.md
T

2.9 KiB

Inbox fetch Test Plan

Scope

This document covers agent-scoped candidate thread retrieval via inbox fetch.

Shared conventions live in ../_shared/README.md.

case: fetch-returns-pending-thread-for-target-agent

用例意义

验证 fetch 能按目标执行者拉取待处理线程。

前置条件

  • leader 已向 worker-a 发送至少一个 pending 线程

输入

inbox --db TMPDIR/coord.db --json fetch --agent worker-a --status pending

预期输出

  • 命令退出码为 0
  • 返回 data.threads
  • 至少包含一个 assigned_to == "worker-a"status == "pending" 的线程

断言结论

  • fetch 默认是执行者视角的候选工作列表,不是全局线程扫描

case: fetch-respects-status-and-limit-filters

用例意义

验证 fetch 同时遵守状态过滤与返回上限。

前置条件

  • worker-a 拥有多个不同状态的线程
  • 其中至少两个线程满足目标状态过滤条件

输入

inbox --db TMPDIR/coord.db --json fetch --agent worker-a --status pending,blocked --limit 1

预期输出

  • 命令退出码为 0
  • 返回线程数不超过 1
  • 返回的每条线程都满足 status in ["pending","blocked"]

断言结论

  • fetchstatuslimit 会同时生效
  • 返回顺序按 updated_at 倒序,优先暴露最新线程

case: fetch-unread-uses-read-cursor

用例意义

验证 fetch --unread 基于 agent 的 read cursor 计算未读,而不是仅按线程是否存在新消息。

前置条件

  • leader 已向 worker-e 发送一个 pending 线程 THREAD_ID

输入

inbox --db TMPDIR/coord.db --json fetch --agent worker-e --status pending --unread
inbox --db TMPDIR/coord.db --agent worker-e --json show --thread THREAD_ID --mark-read
inbox --db TMPDIR/coord.db --json fetch --agent worker-e --status pending --unread
inbox --db TMPDIR/coord.db --json send --from leader --to worker-e --thread THREAD_ID --summary "Use sentence case" --body "Keep the nav labels in sentence case."
inbox --db TMPDIR/coord.db --json fetch --agent worker-e --status pending --unread

预期输出

  • 第一次 fetch --unread 返回该线程
  • show --mark-read 后,第二次 fetch --unread 无匹配结果
  • 新消息追加后,第三次 fetch --unread 再次返回该线程

断言结论

  • 未读判断依赖 thread_reads.last_read_message_id
  • 新消息到达会让同线程重新进入未读结果集

case: fetch-returns-no-matching-work-when-empty

用例意义

验证 fetch 在没有匹配线程时返回稳定的“无工作”错误契约。

前置条件

  • 空数据库已完成 init

输入

inbox --db TMPDIR/coord.db --json fetch --agent worker-z --status pending

预期输出

  • 退出码为 10
  • JSON 错误码为 no_matching_work

断言结论

  • 空结果不是成功空数组,而是显式的“无匹配工作”信号