10 KiB
Inbox Test Documentation Roadmap
Purpose
This roadmap tracks the human-readable Markdown test plan for inbox.
It exists so a new agent can immediately answer four questions without re-reading the whole codebase:
- which test-plan documents already exist
- which cases have already been written down
- which cases are still missing
- what file should be updated next
This roadmap is for the Markdown test-plan set under docs/tests/inbox/.
It is not a replacement for automated Go tests.
Current Snapshot
Snapshot date:
2026-03-19
Current state:
inboxCLI is implemented end-to-end- automated Go integration tests already exist for the main lifecycle, wait flows, unread behavior, artifacts, and JSON error contracts
- this roadmap now exists under
docs/tests/inbox/ROADMAP.md - the command, workflow, and shared Markdown test-plan documents have not been authored yet
Progress summary for planned test-plan documents, excluding ROADMAP.md:
- planned document files:
16 - authored document files:
0 - planned case slugs in this roadmap:
61 - authored case slugs in this roadmap:
0
Scope
In scope:
inbox initinbox sendinbox fetchinbox claiminbox renewinbox updateinbox replyinbox doneinbox failinbox cancelinbox listinbox showinbox watchinbox wait-reply- cross-command workflows
- shared test conventions for JSON output, exit codes, fixtures, and assertions
Out of scope:
orchcouncil-review- implementation details that are not visible through the CLI contract
Tracking Rules
Directory model:
- one folder per command or shared area
- one
README.mdper folder - no one-file-per-case sprawl
Case identity:
- do not use numeric IDs
- identify a case by
path + case slug - recommended heading pattern inside the command document:
## case: send-rejects-invalid-payload-json
Per-case structure inside the command document:
用例意义前置条件输入预期输出断言结论
How to update this roadmap when a new case is written:
- add the case content to the target
README.md - move the case slug from
Pending Case BacklogtoAuthored Case Register - update the authored counts in
Current Snapshot - if a whole command document is created, update
Document Progress
Allowed status values in this roadmap:
pendingin_progressdonedeferred
Existing Automated Coverage Reference
The Markdown test-plan set starts at zero, but these automated tests already exist and should be used as source material when writing the docs:
- integration_test.go
TestInboxLifecycle - integration_test.go
TestInboxFailLifecycle - integration_test.go
TestInboxRenewWaitReplyAndCancel - integration_test.go
TestInboxWatchListUnreadAndAppend - integration_test.go
TestInboxUnreadReadCursor - integration_test.go
TestInboxJSONErrorsAndExitCodes
These tests do not remove the need for the Markdown plan. They only reduce discovery work.
Planned Directory Tree
docs/tests/inbox/
ROADMAP.md
README.md
_shared/
README.md
workflows/
README.md
init/
README.md
send/
README.md
fetch/
README.md
claim/
README.md
renew/
README.md
update/
README.md
reply/
README.md
done/
README.md
fail/
README.md
cancel/
README.md
list/
README.md
show/
README.md
watch/
README.md
wait-reply/
README.md
Document Progress
| Path | Purpose | Planned Cases | Authored Cases | Status |
|---|---|---|---|---|
docs/tests/inbox/README.md |
Global testing conventions and glossary | 0 | 0 | pending |
docs/tests/inbox/_shared/README.md |
Shared fixtures, JSON assertions, exit-code rules | 0 | 0 | pending |
docs/tests/inbox/workflows/README.md |
Cross-command scenarios | 8 | 0 | pending |
docs/tests/inbox/init/README.md |
init command cases |
2 | 0 | pending |
docs/tests/inbox/send/README.md |
send command cases |
6 | 0 | pending |
docs/tests/inbox/fetch/README.md |
fetch command cases |
4 | 0 | pending |
docs/tests/inbox/claim/README.md |
claim command cases |
4 | 0 | pending |
docs/tests/inbox/renew/README.md |
renew command cases |
3 | 0 | pending |
docs/tests/inbox/update/README.md |
update command cases |
5 | 0 | pending |
docs/tests/inbox/reply/README.md |
reply command cases |
4 | 0 | pending |
docs/tests/inbox/done/README.md |
done command cases |
4 | 0 | pending |
docs/tests/inbox/fail/README.md |
fail command cases |
4 | 0 | pending |
docs/tests/inbox/cancel/README.md |
cancel command cases |
3 | 0 | pending |
docs/tests/inbox/list/README.md |
list command cases |
4 | 0 | pending |
docs/tests/inbox/show/README.md |
show command cases |
4 | 0 | pending |
docs/tests/inbox/watch/README.md |
watch command cases |
3 | 0 | pending |
docs/tests/inbox/wait-reply/README.md |
wait-reply command cases |
3 | 0 | pending |
Authoring Order
Recommended order:
docs/tests/inbox/README.mddocs/tests/inbox/_shared/README.mddocs/tests/inbox/workflows/README.mddocs/tests/inbox/send/README.mddocs/tests/inbox/fetch/README.mddocs/tests/inbox/claim/README.mddocs/tests/inbox/reply/README.mddocs/tests/inbox/done/README.mddocs/tests/inbox/show/README.md- the remaining command documents
Reason:
- the workflow file captures the highest-value end-to-end behavior first
- the command documents can then reuse shared conventions and already-fixed terminology
Authored Case Register
No Markdown test cases have been authored yet.
When the first case is written, add rows in this format:
| Path | Case Slug | Coverage Note | Status |
|---|---|---|---|
docs/tests/inbox/send/README.md |
send-creates-new-thread |
minimal happy path for new thread creation | done |
Pending Case Backlog
docs/tests/inbox/workflows/README.md
pendingthread-lifecycle-happy-pathpendingblocked-question-reply-resume-to-donependingfail-lifecycle-from-claim-to-terminalpendingcancel-lifecycle-after-worker-claimpendingwatch-wakes-then-fetch-sees-new-threadpendingartifact-visible-through-send-and-showpendingunread-clears-after-mark-read-and-reappears-on-new-messagependingwait-reply-clears-blocked-unread-for-agent
docs/tests/inbox/init/README.md
pendinginit-creates-schema-on-empty-dbpendinginit-is-idempotent-on-existing-db
docs/tests/inbox/send/README.md
pendingsend-creates-new-threadpendingsend-appends-message-to-existing-threadpendingsend-reads-body-from-body-filependingsend-attaches-artifact-with-metadatapendingsend-rejects-invalid-payload-jsonpendingsend-rejects-invalid-artifact-metadata-json
docs/tests/inbox/fetch/README.md
pendingfetch-returns-pending-thread-for-target-agentpendingfetch-respects-status-and-limit-filterspendingfetch-unread-uses-read-cursorpendingfetch-returns-no-matching-work-when-empty
docs/tests/inbox/claim/README.md
pendingclaim-acquires-thread-leasependingclaim-rejects-when-thread-missingpendingclaim-rejects-when-thread-already-claimedpendingclaim-records-requested-lease-duration
docs/tests/inbox/renew/README.md
pendingrenew-extends-active-leasependingrenew-rejects-non-ownerpendingrenew-rejects-without-active-lease
docs/tests/inbox/update/README.md
pendingupdate-moves-thread-to-in-progresspendingupdate-moves-thread-to-blocked-with-payloadpendingupdate-accepts-body-file-and-artifactpendingupdate-rejects-invalid-payload-jsonpendingupdate-rejects-non-owner
docs/tests/inbox/reply/README.md
pendingreply-adds-answer-messagependingreply-supports-control-kindpendingreply-attaches-artifactpendingreply-rejects-invalid-payload-json
docs/tests/inbox/done/README.md
pendingdone-marks-thread-terminalpendingdone-persists-result-body-and-artifactpendingdone-rejects-non-ownerpendingdone-rejects-on-terminal-thread
docs/tests/inbox/fail/README.md
pendingfail-marks-thread-failedpendingfail-persists-failure-body-and-artifactpendingfail-rejects-non-ownerpendingfail-rejects-on-terminal-thread
docs/tests/inbox/cancel/README.md
pendingcancel-marks-thread-cancelledpendingcancel-persists-reason-and-artifactpendingcancel-rejects-when-thread-missing
docs/tests/inbox/list/README.md
pendinglist-filters-by-statuspendinglist-filters-by-created-bypendinglist-filters-by-assigned-topendinglist-respects-limit
docs/tests/inbox/show/README.md
pendingshow-returns-thread-and-message-historypendingshow-includes-artifacts-per-messagependingshow-mark-read-advances-read-cursorpendingshow-rejects-when-thread-missing
docs/tests/inbox/watch/README.md
pendingwatch-wakes-on-matching-threadpendingwatch-respects-status-filterpendingwatch-times-out-with-no-activity
docs/tests/inbox/wait-reply/README.md
pendingwait-reply-wakes-on-answer-after-messagependingwait-reply-can-start-from-after-eventpendingwait-reply-times-out-when-no-reply
Definition Of Done
This roadmap is complete only when all of the following are true:
- every implemented inbox command has a corresponding document folder
- each planned command document exists
- each pending case slug has been either authored or explicitly deferred
- the authored-case register matches the actual Markdown files on disk
- a new agent can pick any pending case and know exactly where it should be written