MCP infrastructure on rmcp 3.1.2 (MCP 2026-07-28) — plus a host-crash fix that affects every earlier 0.8.x.
All six crates are on crates.io at 0.8.8. cargo semver-checks vs 0.8.7: no semver update required, so ^0.8 consumers pick this up automatically.
Fixed — host-process heap corruption on Linux/WebKitGTK
Several of Victauri's main-thread round trips in flight at once corrupt the process heap, and glibc aborts the host app (malloc(): unaligned tcache chunk detected / corrupted double-linked list). The round trip is now serialized, with the timeout deadline covering the wait for the lock so it cannot stack callers when the UI wedges.
This is a long-standing bug, not new in 0.8.8 — it is present in 0.8.7 and every earlier 0.8.x, so upgrading is recommended for anyone developing on Linux. It costs effectively nothing to fix: the closures already execute one at a time on the single main thread.
It was found while investigating an intermittent CI failure, and the investigation overturned the assumed cause at every step — measured, not assumed:
| Hypothesis | Measured |
|---|---|
| Caused by webview reloads | No — reload-hammering alone 0/4; introspection with no reload 4/4 |
| Caused by request volume | No — one unthrottled loop, same total calls 0/4; three concurrent loops 5/8 |
| Caused by the HTTP/tokio layer | No — a tool touching no webview at the same concurrency 0/5 |
| Caused by the rmcp 3.1.2 upgrade | No — the pre-rmcp tree died at the same rate (6/8) |
| Fixed by locking the dispatch alone | No — still 4/8 |
| Fixed by serializing the whole round trip | Yes — 0/28 |
Verified with 8 consecutive green Linux E2E runs in CI against a ~44% pre-fix failure rate, plus 0 crashes in 28 local runs on Ubuntu 24.04 / WebKitGTK 2.52.
Also fixed: victauri-test IPC checkpoints could miss a call logged in the same millisecond as the checkpoint (found by a pre-release adversarial audit), and could previously return nothing at all once a busy app exceeded the IPC log's sliding-window cap.
Changed — MCP infrastructure upgraded to rmcp 3.1.2
The embedded MCP server jumps two SDK major versions (1.5.0 → 3.1.2) and speaks the sessionless MCP 2026-07-28 revision natively, while remaining fully backward compatible with every legacy protocol version (2025-06-18, 2025-03-26, 2024-11-05). New-protocol clients are always served statelessly per SEP-2567, so the stale-session 422 class is now removed at the protocol level. tools/list and resources/list carry SEP-2549 cache hints (ttlMs, cacheScope: private).
Live-verified inside a real 380-command app before release: protocol probes 8/8, all 35 tools 82/82, and a 156-reload soak with 1,404 concurrent probes and zero errors.
Testing improvements
- A regression test that actually reproduces the crash. The two existing host-crash tests each call
eval_jsin their hot loop — a full JS round trip that paced them to ~100 ops/sec and never built up enough concurrent round trips to trip the corruption. That is precisely why this survived several releases. - CI now captures the demo app's stderr and prints it when the E2E job fails. Previously a dead host surfaced only as "connection refused", with the glibc abort message discarded — the direct reason this went undiagnosed.
Commits
- fix(release): close 0.8.8 audit readiness gaps (d510813)
- fix(plugin): serialize main-thread round trips — fixes host heap corruption on Linux/WebKitGTK (#68) (4be2369)
- fix(victauri-test): IPC checkpoint cannot miss a same-millisecond call (#66) (fc71b07)
- release: 0.8.8 - MCP infrastructure on rmcp 3.1.2 (MCP 2026-07-28), live-verified (#65) (c9ee229)
- fix(victauri-test): timestamp-based IPC checkpoints survive the log window cap (#64) (15dcdb1)
- chore(deps): update tauri stack in lockfile 2.10.3 -> 2.11.5 (#63) (0eb1eee)
- feat(mcp): upgrade MCP infrastructure to rmcp 3.1.2 (MCP 2026-07-28) (#62) (5fa1445)
- fix(mcp): accept stringified-object args on invoke_command (#61) (9f9bd83)
Full changelog: v0.8.7...v0.8.8