# Trace v0.4.0 validation — 3 November 2026

## Recorded results

Verified optional dependencies: Mem0 2.2.1, qdrant-client 1.18.0, MCP SDK 1.29.0 and pytest 8.4.1. The optional dependency pins match this environment. The separate Docker server image is Qdrant v1.18.0.

- **113 tests passed**, no skips, in 130.68 seconds on Windows / Python 3.13. This includes the actual Mem0 healthy/injected-fault subprocess cases, SDK MCP workflows, HTTP faults, dashboard route guards, explicit scope review, CI exit codes, and coverage/cleanup separation. See `reports/test-results-v0.4.0.xml`.
- The separate Docker driver passed **six checks** against three actual Qdrant v1.18.0 peers. It exercised a normal Trace lifecycle, a vector-only residual despite a separately cleared SQLite source, saved FAIL → PASS replay, a real peer restart preserving unrelated source/vector/cache data, and zero-point cleanup on every peer. All owned containers and the network were removed. See `reports/distributed-qdrant.json`.
- In the browser, the guided wizard connected to the actual local Mem0 gateway using only an inventory probe, showed the declared coverage, and ran a healthy lifecycle. The explicitly injected gateway skip-delete fault produced FAIL and unresolved cleanup. After restoring deletion and explicitly clearing that run's issued synthetic residuals, the saved regression replayed to PASS with complete cleanup; the dashboard showed the compatible FAIL → PASS comparison.
- At 320px width the observed document width was 305px, with no horizontal document overflow. The staging UI uses the same locally served DM Sans typeface as the public site. Browser error logs were empty in the exercised workflow.

- An additional real Mem0 Extended-profile run observed the complete 120-second window (final sample 120.000501s after acknowledgment), returned PASS, preserved the unrelated control, and completed synthetic cleanup. This is a bounded two-minute observation, not a long-duration soak guarantee.

## Defects found during this work

1. The optional Mem0 tokenizer lazily loaded spaCy/PyTorch during the first ingestion, exceeding the configured request timeout in this environment. The gateway now performs that cold initialization before announcing readiness. Upstream Mem0 code is unchanged; its normal optional-BM25 fallback remains, and non-loopback model downloads remain blocked.
2. The Mem0 test harness left stderr unread. Diagnostics now go to a file so a verbose gateway cannot stall on a full pipe.
3. Docker Desktop can change an ephemeral published host port after a container restart. The distributed test now re-reads the owned container's published port rather than polling the stale address.
4. Result rendering was tightened so an excluded cache never displays as a verified zero count, and a passed verification observation remains separate from an inconclusive final receipt caused by unresolved cleanup.
5. Generated CI commands include the actual local history directory; they do not silently target the launcher's default registry.

Earlier failed validation attempts were used to diagnose these issues; their results are not counted as passing. The first complete rerun passed 112 tests; the final receipt adds an explicit cleanup-gate regression for 113 passing tests.

## What this does not establish

No production accuracy percentage, whole-request hard-real-time SLA, physical erasure, backup deletion, model unlearning, automatic source repair, network-partition tolerance, or customer deployment coverage is established.

Mem0 active memories and Qdrant vectors remain two views of one store. Its audit history and adapter ID mappings remain outside the active-memory deletion contract. The independent SQLite source/cache coverage belongs to the separate distributed Qdrant test fixture, not the Mem0 configuration. Read consistency `all`, strong write ordering and `wait=true` were tested in the stated local three-peer topology; other consistency settings and topologies were not inferred from it.

The v0.3.2 seeded 170-case benchmark and load metrics remain historical receipts, not newly rerun v0.4.0 production measurements. Current scope and observation windows must accompany every result.
