A resource view is more than its renderer. Keep its controls, metadata, fields, and commands together—then give each client a useful way to present them.
Shared contracts are working. This report supplies demo adapters; application-wide and native terminal wiring is the next step.
Interactive contract demonstration
Take the same view somewhere else.
Actual headless modules
Expand a conversation, select an API or terminal branch, then collapse it or change clients. The same message IDs, nested relationships, and selected members travel through every presentation.
Query …
Two real API-projected fixture conversations with eight nested messages. Local demo actions do not change live Coleo data.
A portable relationship and selection model
A branch is a relationship, not a renderer trick.
Mail thread API + shared tree model
Delivery blueprint review
└─ Root message from Tim
├─ API branch: scoped paging
│ └─ Verify partial sources
└─ Terminal branch: one named view
└─ TUI visibility
Handoff conversation
└─ Root handoff note
└─ CLI: export the tree
└─ TUI: keyboard groups
Relationships come from the API. Message-ID, In-Reply-To, and References establish actual parent links; input order and neighboring rows do not.
Focus, expansion, and selection are separate. A collapsed branch keeps selected descendants. Mixed checkboxes describe partly selected groups.
Selection is an explicit snapshot. A branch selects loaded member IDs, including hidden descendants. New replies remain unselected. Query-scope changes clear selection; sorting and client changes preserve it.
Coverage stays visible. Unknown children and missing parents are represented explicitly. A complete loaded group is not a promise about future messages.
Thread fixtures are loaded through GET /api/mail/threads. Branch membership is also verified through the revision-guarded selection API.
Failure semantics you can exercise
Unavailable doesn’t mean empty.
Working reconciliation function
Lose a source, and its last loaded section remains visible in that query—including its reply relationships and selected descendants. Confirm the source is genuinely empty, and the old rows disappear. Counts are marked incomplete during an outage.
Mail is healthy. These buttons feed fixture snapshots through the real reconciliation contract.
The experiment uses local fixture snapshots, not a live Maildir or WebSocket disconnect. Socket recovery and fetch scheduling are still a delivery gate.
Eight root resources, including two conversations. Retaining a thread retains its attached hierarchy; nested messages do not become independently paged roots.
Measured on an isolated, migrated SQLite fixture
The first fix changes what you can reach.
Current Hono endpoint
57→532
records reached by cursor paging
Before: take a short source prefix, then apply the cursor. Older items disappear from traversal.
Now: apply visibility and cursor boundaries before the limit, then merge in a consistent order.
0 duplicate IDs25 records per page
Cumulative records reached
Old prefix algorithmFixed endpoint
525 blocked tasks + 7 status reports. The blue series is generated by calling the current endpoint. The orange series reproduces the recorded pre-fix algorithm over the same fixture. This is a correctness proof, not a latency benchmark.
…focused tests passed
…assertions
Checkedserver + browser TypeScript
Portableself-contained offline report
One named definition, several adapters
The hierarchy is in the definition.
This named view declares initial expansion and loaded-descendant selection alongside both toolbars, optional metadata, and presentation choices. Valid JSON edits update the local preview; invalid bindings keep the last valid definition active.
inbox-thread-review · resolved definition
Valid definition. Local preview is active.
Inspect the active normalized query, fields, and capability decisions
The paging fix is running API code. Query, projection, validation, and reconciliation are imported production modules. Browser grids/cards/timelines and CLI/TUI screens here are lightweight HTML demo adapters—not a claim that the application or native terminal rewrite is complete.