Author orch Markdown test plan
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
# Orch `answer` Test Plan Index
|
||||
|
||||
## Status
|
||||
## Case Files
|
||||
|
||||
No command case files are authored yet.
|
||||
|
||||
Use [../ROADMAP.md](../ROADMAP.md) for planned case slugs and document progress.
|
||||
| Case Slug | File | Coverage Note |
|
||||
| --- | --- | --- |
|
||||
| `answer-appends-answer-to-active-thread` | [answer-appends-answer-to-active-thread.md](./answer-appends-answer-to-active-thread.md) | appends an inbox answer message onto the active blocked attempt thread |
|
||||
| `answer-accepts-payload-json-without-body` | [answer-accepts-payload-json-without-body.md](./answer-accepts-payload-json-without-body.md) | accepts structured `--payload-json` input even when no body text is provided |
|
||||
| `answer-rejects-empty-body-and-payload` | [answer-rejects-empty-body-and-payload.md](./answer-rejects-empty-body-and-payload.md) | rejects an answer request that provides neither body text nor payload JSON |
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
# Case: `answer-accepts-payload-json-without-body`
|
||||
|
||||
## 用例意义
|
||||
|
||||
验证 `answer` 在未提供 `--body` 的情况下,仍可通过纯 `--payload-json` 向当前阻塞尝试写回结构化决策。
|
||||
|
||||
## 前置条件
|
||||
|
||||
- 运行 `run_blog_002` 中的任务 `T2` 已处于 `blocked`
|
||||
- `blocked` 列表中可见 `T2`
|
||||
- 已知该阻塞尝试对应线程为 `THREAD_ID`
|
||||
|
||||
## 输入
|
||||
|
||||
```bash
|
||||
orch --db TMPDIR/coord.db --json answer --run run_blog_002 --task T2 --payload-json '{"decision":"stdout","source":"leader"}'
|
||||
inbox --db TMPDIR/coord.db --json show --thread THREAD_ID
|
||||
```
|
||||
|
||||
## 预期输出
|
||||
|
||||
- `answer` 退出码为 `0`
|
||||
- `answer.data.message.kind == "answer"`
|
||||
- `answer.data.message.payload_json.decision == "stdout"`
|
||||
- `answer.data.message.payload_json.source == "leader"`
|
||||
- `show.data.messages` 末尾新增一条 `kind=answer` 的消息
|
||||
- 末尾消息的 `payload_json.decision == "stdout"`
|
||||
|
||||
## 断言结论
|
||||
|
||||
- `answer` 不要求 leader 必须提供纯文本正文;结构化 payload 本身就可以构成有效答复
|
||||
- worker 可以从同一条 `answer` 消息里读取结构化决策,而不必依赖约定俗成的正文格式
|
||||
|
||||
## 补充约束
|
||||
|
||||
- `--payload-json` 必须是合法 JSON;非法值应返回 `invalid_input`
|
||||
- `--body` 与 `--body-file` 仍然互斥,即使本用例不使用它们
|
||||
@@ -0,0 +1,36 @@
|
||||
# Case: `answer-appends-answer-to-active-thread`
|
||||
|
||||
## 用例意义
|
||||
|
||||
验证 `answer` 会把 leader 的答复写回当前阻塞尝试的 inbox 线程,并以 `answer` 消息形式供 worker 继续消费。
|
||||
|
||||
## 前置条件
|
||||
|
||||
- 运行 `run_blog_002` 中的任务 `T2` 已处于 `blocked`
|
||||
- `blocked` 列表中可见 `T2`
|
||||
- 已知该阻塞尝试对应线程为 `THREAD_ID`
|
||||
|
||||
## 输入
|
||||
|
||||
```bash
|
||||
orch --db TMPDIR/coord.db --json answer --run run_blog_002 --task T2 --body "Use stdout for MVP."
|
||||
inbox --db TMPDIR/coord.db --json show --thread THREAD_ID
|
||||
```
|
||||
|
||||
## 预期输出
|
||||
|
||||
- `answer` 退出码为 `0`
|
||||
- `answer.data.message.kind == "answer"`
|
||||
- `answer.data.task.task_id == "T2"`
|
||||
- `show.data.messages` 末尾新增一条 `kind=answer` 的消息
|
||||
- 末尾消息 `body == "Use stdout for MVP."`
|
||||
|
||||
## 断言结论
|
||||
|
||||
- `answer` 的本质是向活动线程追加 leader 决策消息,而不是直接修改任务状态
|
||||
- worker 仍需继续通过 `inbox` 或后续 `reconcile` 推进任务状态
|
||||
|
||||
## 补充约束
|
||||
|
||||
- `answer` 支持 `--body-file` 与 `--payload-json`
|
||||
- `--body` 与 `--body-file` 互斥;若两者都为空,则至少需要提供 `--payload-json`
|
||||
@@ -0,0 +1,29 @@
|
||||
# Case: `answer-rejects-empty-body-and-payload`
|
||||
|
||||
## 用例意义
|
||||
|
||||
验证 `answer` 在既没有正文也没有结构化 payload 时返回稳定输入错误,而不是写入空答复消息。
|
||||
|
||||
## 前置条件
|
||||
|
||||
- 运行 `run_blog_002` 中的任务 `T2` 已处于 `blocked`
|
||||
|
||||
## 输入
|
||||
|
||||
```bash
|
||||
orch --db TMPDIR/coord.db --json answer --run run_blog_002 --task T2
|
||||
```
|
||||
|
||||
## 预期输出
|
||||
|
||||
- 退出码为 `30`
|
||||
- JSON 错误码为 `invalid_input`
|
||||
|
||||
## 断言结论
|
||||
|
||||
- `answer` 至少需要一种有效输入载荷:正文或 `payload-json`
|
||||
- 空答复会在写入线程前被拒绝,而不是生成一条语义不明的 `answer` 消息
|
||||
|
||||
## 补充约束
|
||||
|
||||
- 若同时传入 `--body` 和 `--body-file`,也应返回 `invalid_input`
|
||||
Reference in New Issue
Block a user