Skip to content

Breaking config change in v2026.4.21: dreaming.storage schema migration breaks CLI on upgrade #70407

Description

@bxy3045134656

Bug Description

After upgrading from v2026.4.15 to v2026.4.21 via npm, the CLI (openclaw status, openclaw doctor, etc.) fails completely with a config validation error:

Config invalid
File: $OPENCLAW_HOME/.openclaw/openclaw.json
Problem:
  - plugins.entries.memory-core.config.dreaming.storage: invalid config: must be object

Root Cause

The dreaming.storage config field changed its schema from a string (e.g. "both") to an object (e.g. { "mode": "both", "separateReports": false }) in v2026.4.21, but there is no automatic migration for existing configs.

This means:

  1. After npm update -g openclaw, the CLI becomes unusable
  2. Users have no hint about what changed or how to fix it
  3. openclaw doctor --fix does not help (also blocked by config validation)

Steps to Reproduce

  1. Have a working OpenClaw v2026.4.15 with dreaming.storage set to "both" (string)
  2. Run npm update -g openclaw to v2026.4.21
  3. Run openclaw status
  4. See config validation error, CLI exits with code 1

Expected Behavior

  • Old string values should be auto-migrated to the new object format, OR
  • The error message should include a hint about the schema change and how to fix it, OR
  • openclaw doctor --fix should auto-migrate this field

Workaround

Manually edit openclaw.json:

// OLD (string - breaks in v2026.4.21):
"storage": "both"

// NEW (object - works in v2026.4.21):
"storage": {
  "mode": "both",
  "separateReports": false
}

Environment

  • OS: Windows 11 26200 x64
  • Node.js: v24.14.0
  • OpenClaw: v2026.4.21
  • Installation: global npm
  • Channel: QQ Bot

Suggested Fix

  1. Add a config migration step that converts string dreaming.storage values to the new object format
  2. Add a friendly error hint: "dreaming.storage changed from string to object in v2026.4.21. Run openclaw doctor --fix to auto-migrate."

Thanks for the great work on OpenClaw!

Metadata

Metadata

Assignees

No one assigned

    Labels

    staleMarked as stale due to inactivity

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions