{
"lexicon": 1,
"id": "net.favela.local.post",
"description": "A favela-native, LOCAL-ONLY post. Structurally a subset of app.bsky.feed.post so the same client/renderer handles both. Written into the author's atproto repo and signed by their hyper-proto-peer, but NOT federated to bsky: bsky's AppView only indexes app.bsky.* lexicons, so this collection is invisible there while favela folds it into the local community timeline. NOTE: local-only means unindexed-by-bsky, not unreplicated — if the DID is fronted+crawled the record bytes still reach bsky's relay. It is 'community, not secret' until encryption lands (DESIGN.md §10.2). Version from day one (§10.8): additive fields only; never repurpose a field.",
"defs": {
"main": {
"type": "record",
"key": "tid",
"record": {
"type": "object",
"required": ["text", "createdAt"],
"properties": {
"text": {
"type": "string",
"maxLength": 3000,
"maxGraphemes": 300,
"description": "The primary post content. Mirrors app.bsky.feed.post.text (300-grapheme limit)."
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "Client-declared timestamp. Display/order only; not an authoritative clock (DESIGN §10.5)."
},
"facets": {
"type": "array",
"description": "Reserved: annotations of text (mentions, links, hashtags). Same shape as app.bsky.richtext.facet — added when rich text lands.",
"items": { "type": "unknown" }
},
"reply": {
"type": "unknown",
"description": "Reserved: reply reference (root/parent). Same shape as app.bsky.feed.post#replyRef — added when local threading lands."
}
}
}
}
}
}