Skip to content

Test-suite gaps: persistence/delete/folder-routing bugs ship undetected (meta) #291

Description

@iduartgomez

Why a batch of user-facing bugs (#286, #287) got past CI

Testing (Ivvor, 2026-06-01) surfaced sent→Drafts, deleted-returns, and one-sided-threads bugs against fresh nodes. None were caught by the suite. This issue documents why and what to change. Not a feature bug — a coverage/process bug.

Root causes

1. Offline suite has no persistence layer — can't catch round-trip bugs

example-data,no-sync keeps messages in an in-memory inbox.messages borrow (ui/src/app.rs). On page.reload() the WASM app restarts, memory wipes, and load_example_messages reseeds from scratch — there is no localStorage/IndexedDB/contract round-trip. Logout even explicitly .clear()s the cache to force a reseed.

Consequence: every offline page.reload() test asserts identity-list survival only (#36). A sent/deleted/draft message cannot be meaningfully re-asserted after reload offline. Sent→Drafts and deleted-returns are contract-state round-trip bugs and live exactly where offline is blind.

2. Iso (real-node) suite reloads but never re-asserts folder state

live-node.spec.ts is the only suite with real contracts. It reloads in two places — create identity → reload persists (asserts identity row) and multi-round + read + archive (asserts round one stays visible, the #113 read-state regression). Neither checks the Sent folder still holds a sent message, Drafts is empty after reload, or a deleted message stays deleted.

3. QA matrix marked uncovered behaviors as auto (false-greens)

4. Known data-model weakness documented, not tracked

live-node.spec.ts documents that a sent message is 'stashed only to the Sent folder — never folded back into the sender's own inbox Vec' and each side's inbox holds 'exactly ONE half of the conversation' — the root of one-sided-threads (#287), filed as an inline known-limitation annotation rather than a tracked issue.

What changed already (this sweep)

  • QA matrix (docs/qa/manual-test-inventory.md): added §"Persistence is iso-only" + the rule that across-reload auto requires a real iso reload test; split sent/delete rows into honest in-session vs across-reload; removed implicit/transitive false-greens.
  • New iso test sent message stays in Sent (not Drafts) across reload (#286) — sends, reloads, asserts Sent survives + Drafts empty.

Remaining work

Tests (iso — the only place these reproduce)

Offline

Process

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions