OverviewFilesCommitsIssuesDocsReleasesPeers

favela-web / lexicons / net.favela.local.post.json

38 lines · json ref:
{
  "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."
          }
        }
      }
    }
  }
}