{
"$type": "com.atproto.lexicon.schema",
"defs": {
"main": {
"description": "A published broad listening (Talk to the City) report for a gathering. Written by a gathering admin after the analysis pipeline has run over the gathering's proposals. The report body is a T3C v0.2 JSON document stored as a blob so large reports (hundreds of claims with verbatim quotes) fit; the record carries the metadata needed to list and render it without downloading the blob.",
"key": "tid",
"record": {
"properties": {
"createdAt": {
"format": "datetime",
"type": "string"
},
"description": {
"description": "Short summary of what corpus the report covers and how it was produced.",
"maxLength": 3000,
"type": "string"
},
"gatheringUri": {
"description": "AT-URI of the org.simocracy.gathering this report analyses.",
"type": "string"
},
"model": {
"description": "Id of the model that served the pipeline's completions (an OpenRouter slug). Comma-separated when several models served one run.",
"maxLength": 128,
"type": "string"
},
"report": {
"accept": [
"application/octet-stream",
"application/json"
],
"description": "The T3C v0.2 report JSON: {\"data\": [\"v0.2\", {...}], \"metadata\": [\"v0.2\", {...}]}. Uploaded as application/octet-stream: the reference PDS cannot stream blobs whose mime type is application/json through com.atproto.sync.getBlob (xrpc-server tries to JSON-serialise the stream and 500s), so readers must parse the bytes themselves.",
"maxSize": 20000000,
"type": "blob"
},
"sourceCollection": {
"description": "NSID of the records that formed the corpus (e.g. org.hypercerts.claim.activity for proposals).",
"maxLength": 128,
"type": "string"
},
"stats": {
"ref": "#stats",
"type": "ref"
},
"title": {
"description": "Report title, shown in the channel header and on broadlistening.org.",
"maxLength": 300,
"type": "string"
}
},
"required": [
"gatheringUri",
"title",
"report",
"createdAt"
],
"type": "object"
},
"type": "record"
},
"stats": {
"description": "Headline counts, copied from the report so channel headers can show them without fetching the blob.",
"properties": {
"claims": {
"type": "integer"
},
"cruxes": {
"type": "integer"
},
"documents": {
"type": "integer"
},
"people": {
"type": "integer"
},
"subtopics": {
"type": "integer"
},
"topics": {
"type": "integer"
}
},
"type": "object"
}
},
"id": "org.simocracy.broadlistening",
"lexicon": 1
}