tech.transparencia.news.article

transparencia.pds.transparencia.tech

Schema Diff

+47 -5

From

CID
bafyreigj2feexux...
Indexed At
2026-04-04 16:34 UTC
View this version

To

CID
bafyreicegbswema...
Indexed At
2026-05-19 00:55 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

2 breaking changes, 16 non-breaking changes.

Breaking Changes (2)
  • ConstraintTightened ConstraintTightened { vertex_id: "tech.transparencia.news.article:body.description", sort: "maxGraphemes", old_value: "2000", new_value: "1500" }
  • ConstraintTightened ConstraintTightened { vertex_id: "tech.transparencia.news.article:body.description", sort: "maxLength", old_value: "10000", new_value: "5000" }
Non-Breaking Changes (16)
  • AddedVertex AddedVertex { vertex_id: "tech.transparencia.news.article:body.content" }
  • AddedVertex AddedVertex { vertex_id: "tech.transparencia.news.article:body.mediaCaption" }
  • AddedVertex AddedVertex { vertex_id: "tech.transparencia.news.article:body.originalSource" }
  • AddedVertex AddedVertex { vertex_id: "tech.transparencia.news.article:body.originalSource.name" }
  • AddedVertex AddedVertex { vertex_id: "tech.transparencia.news.article:body.originalSource.url" }
  • AddedVertex AddedVertex { vertex_id: "tech.transparencia.news.article:body.tags" }
  • AddedVertex AddedVertex { vertex_id: "tech.transparencia.news.article:body.tags:items" }
  • AddedVertex AddedVertex { vertex_id: "tech.transparencia.news.article:body.updatedAt" }
  • AddedEdge AddedEdge { src: "tech.transparencia.news.article:body", tgt: "tech.transparencia.news.article:body.content", kind: "prop", name: Some("content") }
  • AddedEdge AddedEdge { src: "tech.transparencia.news.article:body", tgt: "tech.transparencia.news.article:body.mediaCaption", kind: "prop", name: Some("mediaCaption") }
  • AddedEdge AddedEdge { src: "tech.transparencia.news.article:body", tgt: "tech.transparencia.news.article:body.originalSource", kind: "prop", name: Some("originalSource") }
  • AddedEdge AddedEdge { src: "tech.transparencia.news.article:body", tgt: "tech.transparencia.news.article:body.tags", kind: "prop", name: Some("tags") }
  • AddedEdge AddedEdge { src: "tech.transparencia.news.article:body", tgt: "tech.transparencia.news.article:body.updatedAt", kind: "prop", name: Some("updatedAt") }
  • AddedEdge AddedEdge { src: "tech.transparencia.news.article:body.originalSource", tgt: "tech.transparencia.news.article:body.originalSource.name", kind: "prop", name: Some("name") }
  • AddedEdge AddedEdge { src: "tech.transparencia.news.article:body.originalSource", tgt: "tech.transparencia.news.article:body.originalSource.url", kind: "prop", name: Some("url") }
  • AddedEdge AddedEdge { src: "tech.transparencia.news.article:body.tags", tgt: "tech.transparencia.news.article:body.tags:items", kind: "items", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "tech.transparencia.news.article:body.content" }
  • AddedVertex { vertex_id: "tech.transparencia.news.article:body.mediaCaption" }
  • AddedVertex { vertex_id: "tech.transparencia.news.article:body.originalSource" }
  • AddedVertex { vertex_id: "tech.transparencia.news.article:body.originalSource.name" }
  • AddedVertex { vertex_id: "tech.transparencia.news.article:body.originalSource.url" }
  • AddedVertex { vertex_id: "tech.transparencia.news.article:body.tags" }
  • AddedVertex { vertex_id: "tech.transparencia.news.article:body.tags:items" }
  • AddedVertex { vertex_id: "tech.transparencia.news.article:body.updatedAt" }

Constraint Changes

  • ConstraintTightened ConstraintTightened { vertex_id: "tech.transparencia.news.article:body.description", sort: "maxLength", old_value: "10000", new_value: "5000" }
  • ConstraintTightened ConstraintTightened { vertex_id: "tech.transparencia.news.article:body.description", sort: "maxGraphemes", old_value: "2000", new_value: "1500" }

Additional Notes

  • Non-breaking: AddedEdge { src: "tech.transparencia.news.article:body", tgt: "tech.transparencia.news.article:body.content", kind: "prop", name: Some("content") }
  • Non-breaking: AddedEdge { src: "tech.transparencia.news.article:body", tgt: "tech.transparencia.news.article:body.mediaCaption", kind: "prop", name: Some("mediaCaption") }
  • Non-breaking: AddedEdge { src: "tech.transparencia.news.article:body", tgt: "tech.transparencia.news.article:body.originalSource", kind: "prop", name: Some("originalSource") }
  • Non-breaking: AddedEdge { src: "tech.transparencia.news.article:body", tgt: "tech.transparencia.news.article:body.tags", kind: "prop", name: Some("tags") }
  • Non-breaking: AddedEdge { src: "tech.transparencia.news.article:body", tgt: "tech.transparencia.news.article:body.updatedAt", kind: "prop", name: Some("updatedAt") }
  • Non-breaking: AddedEdge { src: "tech.transparencia.news.article:body.originalSource", tgt: "tech.transparencia.news.article:body.originalSource.name", kind: "prop", name: Some("name") }
  • Non-breaking: AddedEdge { src: "tech.transparencia.news.article:body.originalSource", tgt: "tech.transparencia.news.article:body.originalSource.url", kind: "prop", name: Some("url") }
  • Non-breaking: AddedEdge { src: "tech.transparencia.news.article:body.tags", tgt: "tech.transparencia.news.article:body.tags:items", kind: "items", name: None }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "main": {
5 5
      "description": "A news article scraped from an RSS feed or website.",
6 6
      "key": "tid",
7 7
      "record": {
8 8
        "properties": {
9 9
          "author": {
10 10
            "description": "Author byline as published.",
11 11
            "maxGraphemes": 128,
12 12
            "maxLength": 512,
13 13
            "type": "string"
14 14
          },
15 +
          "content": {
16 +
            "description": "Full article body when the feed provides it (RSS <content:encoded>, Atom <content>, JSON Feed `content_html` / `content_text`). Powers Postgres FTS.",
17 +
            "maxGraphemes": 15000,
18 +
            "maxLength": 50000,
19 +
            "type": "string"
20 +
          },
15 21
          "createdAt": {
16 22
            "description": "When this record was created in the AT Protocol network.",
17 23
            "format": "datetime",
18 24
            "type": "string"
19 25
          },
20 26
          "description": {
21 -
            "description": "Article summary or lead paragraph, typically from the RSS feed description field.",
22 -
            "maxGraphemes": 2000,
23 -
            "maxLength": 10000,
27 +
            "description": "Short lead / summary only. Maps to RSS <description>, Atom <summary>, JSON Feed `summary`. No fallback to the full body — that lives in `content`.",
28 +
            "maxGraphemes": 1500,
29 +
            "maxLength": 5000,
24 30
            "type": "string"
25 31
          },
26 32
          "feedCategory": {
27 -
            "description": "Category from the RSS feed (e.g., 'politica', 'deportes', 'economia').",
33 +
            "description": "DEPRECATED — equivalent to tags[0]. Kept for backward compatibility with consumers that read it; new consumers should read `tags`. Will be removed in a future revision.",
28 34
            "maxGraphemes": 64,
29 35
            "maxLength": 256,
30 36
            "type": "string"
31 37
          },
32 38
          "guid": {
33 39
            "description": "Original GUID from the RSS feed, used for deduplication.",
34 40
            "maxLength": 1024,
35 41
            "type": "string"
36 42
          },
37 43
          "imageUrl": {
38 44
            "description": "URL of the article's featured image.",
39 45
            "format": "uri",
40 46
            "type": "string"
41 47
          },
42 48
          "language": {
43 49
            "description": "Language of the article content (BCP-47, e.g., 'es', 'en', 'pt-BR').",
44 50
            "format": "language",
45 51
            "type": "string"
46 52
          },
53 +
          "mediaCaption": {
54 +
            "description": "Caption for imageUrl when the feed provides one (Google News <image:caption>, RSS Media <media:description>).",
55 +
            "maxGraphemes": 200,
56 +
            "maxLength": 500,
57 +
            "type": "string"
58 +
          },
59 +
          "originalSource": {
60 +
            "description": "Set when the feed declares the article was syndicated from another outlet (RSS <source url>, <dc:source>). Distinguishes legitimate republication (e.g., OEM regional papers carrying a Sol de México story) from accidental duplicates.",
61 +
            "properties": {
62 +
              "name": {
63 +
                "maxGraphemes": 100,
64 +
                "maxLength": 256,
65 +
                "type": "string"
66 +
              },
67 +
              "url": {
68 +
                "format": "uri",
69 +
                "type": "string"
70 +
              }
71 +
            },
72 +
            "type": "object"
73 +
          },
47 74
          "publishedAt": {
48 -
            "description": "When the article was published by the source.",
75 +
            "description": "When the article was first published by the source.",
49 76
            "format": "datetime",
50 77
            "type": "string"
51 78
          },
52 79
          "source": {
53 80
            "description": "Strong reference to the tech.transparencia.news.source record for this outlet.",
54 81
            "ref": "com.atproto.repo.strongRef",
55 82
            "type": "ref"
56 83
          },
84 +
          "tags": {
85 +
            "description": "All categories the source attached to the article (RSS <category>, <dc:subject>, Atom <category term>, Google News <news:keywords>, JSON Feed `tags`).",
86 +
            "items": {
87 +
              "maxGraphemes": 64,
88 +
              "maxLength": 200,
89 +
              "type": "string"
90 +
            },
91 +
            "maxLength": 50,
92 +
            "type": "array"
93 +
          },
57 94
          "title": {
58 95
            "description": "Original headline of the article as published by the source.",
59 96
            "maxGraphemes": 512,
60 97
            "maxLength": 2048,
61 98
            "type": "string"
62 99
          },
100 +
          "updatedAt": {
101 +
            "description": "When the source last edited the article (RSS <dcterms:modified>, Atom <updated> when distinct from publish time, JSON Feed `date_modified`).",
102 +
            "format": "datetime",
103 +
            "type": "string"
104 +
          },
63 105
          "url": {
64 106
            "description": "Canonical URL of the article on the source website.",
65 107
            "format": "uri",
66 108
            "type": "string"
67 109
          }
68 110
        },
69 111
        "required": [
70 112
          "title",
71 113
          "url",
72 114
          "source",
73 115
          "publishedAt",
74 116
          "createdAt"
75 117
        ],
76 118
        "type": "object"
77 119
      },
78 120
      "type": "record"
79 121
    }
80 122
  },
81 123
  "description": "A news article from a media outlet, representing the raw published content before any AI enrichment.",
82 124
  "id": "tech.transparencia.news.article",
83 125
  "lexicon": 1
84 126
}

Compare Other Versions

Lexicon Garden

@