Skip to main content

Module conversation

Module conversation 

Source
Expand description

Shared conversation archive types (used by mur-core, mur-commander).

JSONL row format version 1. See docs/superpowers/specs/2026-04-19-mur-conversations-design.md §4.1.

§Schema versioning

Every Message carries v: u32 (current: CONVERSATION_SCHEMA_VERSION). This is intentional — schema evolution for a durable archive must be explicit.

§When to bump

Bump CONVERSATION_SCHEMA_VERSION ONLY when:

  1. A required field is renamed or removed, OR
  2. A field’s semantic meaning changes (e.g., ts interpretation shifts from Utc to local), OR
  3. Content gains a variant that older deserializers cannot safely ignore.

Adding a new optional field with #[serde(default)] does NOT require a bump.

§How to bump

  1. Add a schema migrator in mur-core/src/conversations/migrate_schema.rs that takes any JSON row and rewrites to the new schema.
  2. Wire it into the store’s append/read paths so older lines in the same file still deserialize (via serde untagged or custom visitor).
  3. Keep the previous version’s deserializer functional for at least one minor release.
  4. Bump CONVERSATION_SCHEMA_VERSION.

§Backward reads

mur-core::conversations::store::read_day must always migrate legacy rows before constructing a Message so older on-disk JSONL still works.

Structs§

Message
One line in ~/.mur/conversations/raw/<date>/*.jsonl.

Enums§

Content
Message body. ToolRef and ImageRef are content-addressed pointers (spec §4.3 pointer substitution) to blobs stored under ~/.mur/conversations/blob/<sha256>.
Role
Source

Constants§

CONVERSATION_SCHEMA_VERSION
Current conversations JSONL schema version. Bump only per the rules in this module’s top-level doc comment.