Inbox send Test Plan
Scope
This document covers thread creation and message append behavior exposed by inbox send.
Shared conventions live in ../_shared/README.md.
case: send-creates-new-thread
用例意义
验证 send 在未指定既有线程时会创建新线程,并写入首条任务消息。
前置条件
- 空数据库已完成
init
输入
inbox --db TMPDIR/coord.db --json send --from leader --to worker-a --subject "Implement feature X" --summary "Add retry policy" --body "Implement retry handling for the HTTP client." --run run_blog_001 --task T1
预期输出
- 命令退出码为
0 - 返回
thread.thread_id thread.status == "pending"thread.created_by == "leader"thread.assigned_to == "worker-a"message.kind == "task"
断言结论
send会新建线程而不是只插入孤立消息- 新线程的默认初始状态是
pending
case: send-appends-message-to-existing-thread
用例意义
验证 send 在指定既有 --thread 时会向原线程追加消息,而不是重建线程。
前置条件
- 已存在一个由
leader发给worker-d的线程THREAD_ID
输入
inbox --db TMPDIR/coord.db --json send --from leader --to worker-d --thread THREAD_ID --summary "Use a markdown editor" --body "Prefer a textarea-based markdown editor for v1."
inbox --db TMPDIR/coord.db --json show --thread THREAD_ID
预期输出
send成功,返回的thread.thread_id仍为THREAD_ID- 线程状态保持原值,不被强制改写为新状态
show可见消息数增加
断言结论
- 追加消息不会重置线程生命周期
- 线程历史按时间顺序保留旧消息与新消息
case: send-reads-body-from-body-file
用例意义
验证 send --body-file 会把文件内容写入消息正文。
前置条件
TMPDIR/task.md已存在,内容为测试正文
输入
inbox --db TMPDIR/coord.db --json send --from leader --to worker-d --subject "Build admin editor" --summary "Create the first editor screen" --body-file TMPDIR/task.md
inbox --db TMPDIR/coord.db --json show --thread THREAD_ID
预期输出
send成功show首条消息的body与文件内容一致
断言结论
body-file内容会被原样读取- 该行为与直接传
--body的最终存储结果等价
case: send-attaches-artifact-with-metadata
用例意义
验证 send 支持附带 artifact、kind 和 metadata,并可在返回值或后续 show 中读取。
前置条件
TMPDIR/task.md已存在
输入
inbox --db TMPDIR/coord.db --json send --from leader --to worker-d --subject "Build admin editor" --summary "Create the first editor screen" --artifact TMPDIR/task.md --artifact-kind brief --artifact-metadata-json '{"label":"task-brief"}'
预期输出
- 命令退出码为
0 message.artifacts长度为1- artifact
path == "TMPDIR/task.md" - artifact
kind == "brief" - artifact
metadata_json.label == "task-brief"
断言结论
send可以在创建消息时持久化附件及其结构化元数据
case: send-rejects-invalid-payload-json
用例意义
验证 send 对非法 --payload-json 输入给出稳定错误契约。
前置条件
- 空数据库已完成
init
输入
inbox --db TMPDIR/coord.db --json send --from leader --to worker-z --subject "Invalid payload json" --payload-json not-json
预期输出
- 退出码为
30 - JSON 错误码为
invalid_input
断言结论
- 非法 payload 在写库前就会被拒绝
- 错误归类为输入问题,而不是内部错误
case: send-rejects-invalid-artifact-metadata-json
用例意义
验证 send 对非法 artifact metadata JSON 给出稳定错误契约。
前置条件
- 空数据库已完成
init
输入
inbox --db TMPDIR/coord.db --json send --from leader --to worker-z --subject "Invalid artifact json" --artifact TMPDIR/report.md --artifact-metadata-json not-json
预期输出
- 退出码为
30 - JSON 错误码为
invalid_input
断言结论
- artifact metadata 会在写入前校验 JSON 合法性
Notes
- 新建线程时未显式传
--summary,会回退到--subject --body与--body-file互斥;该约束由 shared 文档统一说明