92 lines
2.2 KiB
Markdown
92 lines
2.2 KiB
Markdown
# Inbox `watch` Test Plan
|
|
|
|
## Scope
|
|
|
|
This document covers blocking thread-activity wait behavior via `inbox watch`.
|
|
|
|
Shared conventions live in [../_shared/README.md](../_shared/README.md).
|
|
|
|
## case: watch-wakes-on-matching-thread
|
|
|
|
### 用例意义
|
|
|
|
验证 `watch` 在新匹配线程到达时会被唤醒,并返回线程、消息与事件信息。
|
|
|
|
### 前置条件
|
|
|
|
- `worker-d` 当前没有匹配 `pending` 线程
|
|
- `watch` 先于 `send` 启动
|
|
|
|
### 输入
|
|
|
|
```bash
|
|
inbox --db TMPDIR/coord.db --json watch --agent worker-d --status pending --timeout-seconds 2
|
|
inbox --db TMPDIR/coord.db --json send --from leader --to worker-d --subject "Build admin editor" --summary "Create the first editor screen"
|
|
```
|
|
|
|
### 预期输出
|
|
|
|
- `watch` 退出码为 `0`
|
|
- `watch.data.woke == true`
|
|
- 返回 `thread`、`message`、`event`
|
|
|
|
### 断言结论
|
|
|
|
- `watch` 唤醒结果不仅说明“醒了”,还提供触发该唤醒的具体事件上下文
|
|
|
|
## case: watch-respects-status-filter
|
|
|
|
### 用例意义
|
|
|
|
验证 `watch --status` 只会对匹配状态的后续事件唤醒。
|
|
|
|
### 前置条件
|
|
|
|
- 存在一个会被推进到 `blocked` 的线程 `THREAD_ID`
|
|
- `watch` 以 `--status blocked` 先启动
|
|
|
|
### 输入
|
|
|
|
```bash
|
|
inbox --db TMPDIR/coord.db --json watch --agent worker-c --status blocked --timeout-seconds 2
|
|
inbox --db TMPDIR/coord.db --json update --agent worker-c --thread THREAD_ID --status blocked --summary "Need policy decision"
|
|
```
|
|
|
|
### 预期输出
|
|
|
|
- `watch` 只在线程进入 `blocked` 后返回
|
|
- 返回的 `thread.status == "blocked"`
|
|
|
|
### 断言结论
|
|
|
|
- `watch` 的状态过滤作用在“事件发生后的线程状态”上
|
|
|
|
## case: watch-times-out-with-no-activity
|
|
|
|
### 用例意义
|
|
|
|
验证在超时时间内没有匹配活动时,`watch` 返回稳定超时契约。
|
|
|
|
### 前置条件
|
|
|
|
- 没有新匹配事件会发生
|
|
|
|
### 输入
|
|
|
|
```bash
|
|
inbox --db TMPDIR/coord.db --json watch --agent worker-d --status pending --timeout-seconds 1
|
|
```
|
|
|
|
### 预期输出
|
|
|
|
- 退出码为 `10`
|
|
- JSON 错误码为 `no_matching_work`
|
|
|
|
### 断言结论
|
|
|
|
- `watch` 超时被归类为“无匹配工作”,而不是内部错误
|
|
|
|
## Notes
|
|
|
|
- 未传 `--after-event` 时,`watch` 默认从“当前时刻之后”开始等待,不会回放既有事件
|