Optional modules and importer contract
Draft v0.1
This page covers the optional modules and the importer contract. The point is to make the export format flexible without making it vague.
Optional chat module
Conversation
A Conversation is a container for messages. It can represent channel chat, threads, direct messages, or proxy logs.
Common fields:
idsystem_idkindtitlecategorydescriptionemojiparticipant_member_idscreator_member_idarchivedmuteddirect_messagecreated_atsort_ordersource_refsextensions
ChatMessage
A ChatMessage is a single message in a conversation.
Common fields:
idconversation_idauthor_member_idkindbodycreated_atedited_atreply_to_message_idattachment_asset_idssource_refsextensions
Attachment and Reaction
Attachment records carry richer metadata for uploaded media. Reaction records store emoji or app-specific reactions left on a message.
Optional boards module
BoardPost
A BoardPost is a post addressed to a member board or to the system-wide timeline.
Common fields:
idsystem_idtarget_member_idauthor_member_idtitlebodyaudiencepinnedcreated_atwritten_atedited_atdeleted_atsource_refsextensions
Relationships module
The relationships module is provisional in v0.1. It should describe relationship types and member-to-member edges without forcing a final schema too early.
Other modules
The remaining optional modules are sketched at card level in v0.1 and can be expanded later:
- polls
- reminders
- habits
- proxy
- sharing
- safety
Importer contract
Importers should do the following:
- Preserve
source_refsandextensionsfrom the source app. - Reject data that clearly violates the schema, but keep the rest.
- Emit warnings for partial loss, degraded fidelity, or archive-only data.
- Keep app-specific values namespaced under
extensions. - Prefer stable mapping over forced normalization when compatibility is uncertain.
ImportResult
An ImportResult can include:
- imported record counts
- warnings
- skipped records
- modules processed
- a summary of which source fields were dropped or transformed
Validator plans
A validator should check:
- required fields
- UUID formatting
- ISO-8601 timestamps
- allowed enum values
- array shapes
- cross-record references such as
member_idandsystem_id
