[{"data":1,"prerenderedAt":451},["ShallowReactive",2],{"format-page-\u002Fformat\u002Fmodules":3},{"id":4,"title":5,"body":6,"description":16,"extension":444,"meta":445,"navigation":446,"path":447,"seo":448,"stem":449,"__hash__":450},"format\u002Fformat\u002Fmodules.md","Optional modules and importer contract",{"type":7,"value":8,"toc":425},"minimark",[9,13,17,20,25,30,37,40,124,128,133,135,187,191,201,205,209,214,216,279,283,286,290,293,313,317,320,347,351,357,374,378,381,406,410],[10,11,5],"h1",{"id":12},"optional-modules-and-importer-contract",[14,15,16],"p",{},"Draft v0.1",[14,18,19],{},"This page covers the optional modules and the importer contract. The point is to make the export format flexible without making it vague.",[21,22,24],"h2",{"id":23},"optional-chat-module","Optional chat module",[26,27,29],"h3",{"id":28},"conversation","Conversation",[14,31,32,33,36],{},"A ",[34,35,29],"code",{}," is a container for messages. It can represent channel chat, threads, direct messages, or proxy logs.",[14,38,39],{},"Common fields:",[41,42,43,49,54,59,64,69,74,79,84,89,94,99,104,109,114,119],"ul",{},[44,45,46],"li",{},[34,47,48],{},"id",[44,50,51],{},[34,52,53],{},"system_id",[44,55,56],{},[34,57,58],{},"kind",[44,60,61],{},[34,62,63],{},"title",[44,65,66],{},[34,67,68],{},"category",[44,70,71],{},[34,72,73],{},"description",[44,75,76],{},[34,77,78],{},"emoji",[44,80,81],{},[34,82,83],{},"participant_member_ids",[44,85,86],{},[34,87,88],{},"creator_member_id",[44,90,91],{},[34,92,93],{},"archived",[44,95,96],{},[34,97,98],{},"muted",[44,100,101],{},[34,102,103],{},"direct_message",[44,105,106],{},[34,107,108],{},"created_at",[44,110,111],{},[34,112,113],{},"sort_order",[44,115,116],{},[34,117,118],{},"source_refs",[44,120,121],{},[34,122,123],{},"extensions",[26,125,127],{"id":126},"chatmessage","ChatMessage",[14,129,32,130,132],{},[34,131,127],{}," is a single message in a conversation.",[14,134,39],{},[41,136,137,141,146,151,155,160,164,169,174,179,183],{},[44,138,139],{},[34,140,48],{},[44,142,143],{},[34,144,145],{},"conversation_id",[44,147,148],{},[34,149,150],{},"author_member_id",[44,152,153],{},[34,154,58],{},[44,156,157],{},[34,158,159],{},"body",[44,161,162],{},[34,163,108],{},[44,165,166],{},[34,167,168],{},"edited_at",[44,170,171],{},[34,172,173],{},"reply_to_message_id",[44,175,176],{},[34,177,178],{},"attachment_asset_ids",[44,180,181],{},[34,182,118],{},[44,184,185],{},[34,186,123],{},[26,188,190],{"id":189},"attachment-and-reaction","Attachment and Reaction",[14,192,193,196,197,200],{},[34,194,195],{},"Attachment"," records carry richer metadata for uploaded media. ",[34,198,199],{},"Reaction"," records store emoji or app-specific reactions left on a message.",[21,202,204],{"id":203},"optional-boards-module","Optional boards module",[26,206,208],{"id":207},"boardpost","BoardPost",[14,210,32,211,213],{},[34,212,208],{}," is a post addressed to a member board or to the system-wide timeline.",[14,215,39],{},[41,217,218,222,226,231,235,239,243,248,253,257,262,266,271,275],{},[44,219,220],{},[34,221,48],{},[44,223,224],{},[34,225,53],{},[44,227,228],{},[34,229,230],{},"target_member_id",[44,232,233],{},[34,234,150],{},[44,236,237],{},[34,238,63],{},[44,240,241],{},[34,242,159],{},[44,244,245],{},[34,246,247],{},"audience",[44,249,250],{},[34,251,252],{},"pinned",[44,254,255],{},[34,256,108],{},[44,258,259],{},[34,260,261],{},"written_at",[44,263,264],{},[34,265,168],{},[44,267,268],{},[34,269,270],{},"deleted_at",[44,272,273],{},[34,274,118],{},[44,276,277],{},[34,278,123],{},[21,280,282],{"id":281},"relationships-module","Relationships module",[14,284,285],{},"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.",[21,287,289],{"id":288},"other-modules","Other modules",[14,291,292],{},"The remaining optional modules are sketched at card level in v0.1 and can be expanded later:",[41,294,295,298,301,304,307,310],{},[44,296,297],{},"polls",[44,299,300],{},"reminders",[44,302,303],{},"habits",[44,305,306],{},"proxy",[44,308,309],{},"sharing",[44,311,312],{},"safety",[21,314,316],{"id":315},"importer-contract","Importer contract",[14,318,319],{},"Importers should do the following:",[321,322,323,332,335,338,344],"ol",{},[44,324,325,326,328,329,331],{},"Preserve ",[34,327,118],{}," and ",[34,330,123],{}," from the source app.",[44,333,334],{},"Reject data that clearly violates the schema, but keep the rest.",[44,336,337],{},"Emit warnings for partial loss, degraded fidelity, or archive-only data.",[44,339,340,341,343],{},"Keep app-specific values namespaced under ",[34,342,123],{},".",[44,345,346],{},"Prefer stable mapping over forced normalization when compatibility is uncertain.",[21,348,350],{"id":349},"importresult","ImportResult",[14,352,353,354,356],{},"An ",[34,355,350],{}," can include:",[41,358,359,362,365,368,371],{},[44,360,361],{},"imported record counts",[44,363,364],{},"warnings",[44,366,367],{},"skipped records",[44,369,370],{},"modules processed",[44,372,373],{},"a summary of which source fields were dropped or transformed",[21,375,377],{"id":376},"validator-plans","Validator plans",[14,379,380],{},"A validator should check:",[41,382,383,386,389,392,395,398],{},[44,384,385],{},"required fields",[44,387,388],{},"UUID formatting",[44,390,391],{},"ISO-8601 timestamps",[44,393,394],{},"allowed enum values",[44,396,397],{},"array shapes",[44,399,400,401,328,404],{},"cross-record references such as ",[34,402,403],{},"member_id",[34,405,53],{},[21,407,409],{"id":408},"related-pages","Related pages",[41,411,412,419],{},[44,413,414],{},[415,416,418],"a",{"href":417},"\u002Fformat\u002Frecords","Records",[44,420,421],{},[415,422,424],{"href":423},"\u002Fformat\u002Ffronting","Fronting",{"title":426,"searchDepth":427,"depth":427,"links":428},"",2,[429,435,438,439,440,441,442,443],{"id":23,"depth":427,"text":24,"children":430},[431,433,434],{"id":28,"depth":432,"text":29},3,{"id":126,"depth":432,"text":127},{"id":189,"depth":432,"text":190},{"id":203,"depth":427,"text":204,"children":436},[437],{"id":207,"depth":432,"text":208},{"id":281,"depth":427,"text":282},{"id":288,"depth":427,"text":289},{"id":315,"depth":427,"text":316},{"id":349,"depth":427,"text":350},{"id":376,"depth":427,"text":377},{"id":408,"depth":427,"text":409},"md",{},true,"\u002Fformat\u002Fmodules",{"title":5,"description":16},"format\u002Fmodules","a4GcdYroy7te7qHR7dDJP2tDJOYO8AbWMGNxQbjdrX4",1792272242712]