Bug type
Regression (worked before, now fails)
Summary
After upgrading to 2026.6.8, the per-channel conversation store migration renames ~/.openclaw/<channel>-conversations.json to <channel>-conversations.json.migrated (marking it "done"), but the new <channel>-conversations.sqlite is left 0 bytes. The stored conversation references are orphaned, so proactive sends that depend on a stored conversation reference break.
Concretely for MS Teams (Bot Framework): a proactive openclaw message send --channel msteams --target <stored user> fails with TypeError: fetch failed. In-thread conversational replies still work (they use an existing chat), so only the proactive path is broken. This worked before the 6.x SQLite state migration.
It appears alongside the already-reported recurring warning:
Left plugin install index in place because shared SQLite state has conflicting plugin install metadata for: brave, codex, msteams, whatsapp
(related: #90213, #92811, #90040, #90418). However, the conversation-store data being dropped / proactive-send breakage is a distinct, higher-impact consequence not captured in those (which are about the warning itself / installs.json).
Steps to reproduce
- On a 2026.5.x install with an established MS Teams conversation (
msteams-conversations.json populated, proactive sends working).
- Upgrade to 2026.6.8.
- Observe:
msteams-conversations.json → renamed to msteams-conversations.json.migrated; msteams-conversations.sqlite exists but is 0 bytes (sqlite3 ... "SELECT count(*) FROM conversations" → no such table: conversations).
openclaw message send --channel msteams --target <stored user> → TypeError: fetch failed.
Expected behavior
Conversation references migrate into the new SQLite store; proactive sends keep working.
Actual behavior
<channel>-conversations.sqlite = 0 bytes; references stranded in .json.migrated.
- Proactive MS Teams send fails (
TypeError: fetch failed).
- Manually restoring
.json (un-renaming .migrated), deleting the empty .sqlite + stale .sqlite.lock, and restarting re-runs the migration, which again renames to .migrated and again leaves the SQLite empty — it re-aborts on the same conflict.
openclaw doctor --fix does not resolve it; the conflicting plugin install metadata warning continues firing on every boot.
- Likely same class (may be separate provider issue): iMessage proactive
openclaw message send --channel imessage --target <num> fails with imsg rpc exited (code 1) / write EPIPE, while iMessage conversational replies work.
Workaround
None found via file-restore or doctor --fix. Proactive notifications re-routed to WhatsApp + email.
OpenClaw version
2026.6.8 (introduced on the 6.x line that added the SQLite state migration)
Operating system
macOS 26.5.1
Install method
npm (global)
Bug type
Regression (worked before, now fails)
Summary
After upgrading to 2026.6.8, the per-channel conversation store migration renames
~/.openclaw/<channel>-conversations.jsonto<channel>-conversations.json.migrated(marking it "done"), but the new<channel>-conversations.sqliteis left 0 bytes. The stored conversation references are orphaned, so proactive sends that depend on a stored conversation reference break.Concretely for MS Teams (Bot Framework): a proactive
openclaw message send --channel msteams --target <stored user>fails withTypeError: fetch failed. In-thread conversational replies still work (they use an existing chat), so only the proactive path is broken. This worked before the 6.x SQLite state migration.It appears alongside the already-reported recurring warning:
Left plugin install index in place because shared SQLite state has conflicting plugin install metadata for: brave, codex, msteams, whatsapp(related: #90213, #92811, #90040, #90418). However, the conversation-store data being dropped / proactive-send breakage is a distinct, higher-impact consequence not captured in those (which are about the warning itself /
installs.json).Steps to reproduce
msteams-conversations.jsonpopulated, proactive sends working).msteams-conversations.json→ renamed tomsteams-conversations.json.migrated;msteams-conversations.sqliteexists but is 0 bytes (sqlite3 ... "SELECT count(*) FROM conversations"→no such table: conversations).openclaw message send --channel msteams --target <stored user>→TypeError: fetch failed.Expected behavior
Conversation references migrate into the new SQLite store; proactive sends keep working.
Actual behavior
<channel>-conversations.sqlite= 0 bytes; references stranded in.json.migrated.TypeError: fetch failed)..json(un-renaming.migrated), deleting the empty.sqlite+ stale.sqlite.lock, and restarting re-runs the migration, which again renames to.migratedand again leaves the SQLite empty — it re-aborts on the same conflict.openclaw doctor --fixdoes not resolve it; theconflicting plugin install metadatawarning continues firing on every boot.openclaw message send --channel imessage --target <num>fails withimsg rpc exited (code 1)/write EPIPE, while iMessage conversational replies work.Workaround
None found via file-restore or
doctor --fix. Proactive notifications re-routed to WhatsApp + email.OpenClaw version
2026.6.8 (introduced on the 6.x line that added the SQLite state migration)
Operating system
macOS 26.5.1
Install method
npm (global)