place.birds.sighting

birds.place

Schema Diff

+12 -3

From

CID
bafyreib4m3zlmev...
Indexed At
2026-07-27 17:07 UTC
View this version

To

CID
bafyreifdudzznkx...
Indexed At
2026-07-27 20:03 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

3 breaking changes, 0 non-breaking changes.

Breaking Changes (3)
  • ConstraintAdded ConstraintAdded { vertex_id: "place.birds.sighting#media.alt", sort: "maxGraphemes", value: "400" }
  • ConstraintAdded ConstraintAdded { vertex_id: "place.birds.sighting:body.count", sort: "maximum", value: "100000" }
  • ConstraintAdded ConstraintAdded { vertex_id: "place.birds.sighting#location.name", sort: "maxGraphemes", value: "160" }

Migration Guidance

Constraint Changes

  • ConstraintAdded ConstraintAdded { vertex_id: "place.birds.sighting:body.count", sort: "maximum", value: "100000" }
  • ConstraintAdded ConstraintAdded { vertex_id: "place.birds.sighting#location.name", sort: "maxGraphemes", value: "160" }
  • ConstraintAdded ConstraintAdded { vertex_id: "place.birds.sighting#media.alt", sort: "maxGraphemes", value: "400" }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "location": {
5 5
      "properties": {
6 6
        "latitude": {
7 7
          "description": "Decimal degrees, as a string to avoid float drift. Deliberately coarse: clients should write no more than 3 decimal places (~110m). These records are public and permanent, and a bird sighting does not need a precise fix.",
8 8
          "maxLength": 32,
9 9
          "type": "string"
10 10
        },
11 11
        "longitude": {
12 12
          "description": "Decimal degrees, as a string. Same precision limit as latitude.",
13 13
          "maxLength": 32,
14 14
          "type": "string"
15 15
        },
16 16
        "name": {
17 -
          "description": "Free-text place name.",
17 +
          "description": "Free-text place name, as the observer chose it (e.g. \"Montrose Point Bird Sanctuary, Chicago\"). Independent of the coordinates and not verified against them.",
18 +
          "maxGraphemes": 160,
18 19
          "maxLength": 640,
19 20
          "type": "string"
20 21
        }
21 22
      },
22 23
      "required": [
23 24
        "latitude",
24 25
        "longitude"
25 26
      ],
26 27
      "type": "object"
27 28
    },
28 29
    "main": {
29 30
      "description": "A bird sighting logged by the observer, stored in their own repository. Honor system: `species` is what the observer believes they saw, not a verified determination.",
30 31
      "key": "tid",
31 32
      "record": {
32 33
        "properties": {
33 34
          "count": {
34 -
            "description": "How many individuals.",
35 +
            "description": "How many individuals the observer counted. Absent means one, or means they did not count.",
36 +
            "maximum": 100000,
35 37
            "minimum": 1,
36 38
            "type": "integer"
37 39
          },
38 40
          "createdAt": {
41 +
            "description": "Client-declared timestamp for when this record was written.",
39 42
            "format": "datetime",
40 43
            "type": "string"
41 44
          },
42 45
          "location": {
46 +
            "description": "Roughly where the bird was. Optional, and deliberately coarse — see #location.",
43 47
            "ref": "#location",
44 48
            "type": "ref"
45 49
          },
46 50
          "media": {
51 +
            "description": "Evidence, in whatever form it was captured: a photo, a video, or a recording of the call. Ordered as the observer added it.",
47 52
            "items": {
48 53
              "ref": "#media",
49 54
              "type": "ref"
50 55
            },
51 56
            "maxLength": 4,
52 57
            "type": "array"
53 58
          },
54 59
          "notes": {
60 +
            "description": "Anything else the observer wants to say about the sighting: behaviour, plumage, who they were with.",
55 61
            "maxGraphemes": 600,
56 62
            "maxLength": 3000,
57 63
            "type": "string"
58 64
          },
59 65
          "observedAt": {
60 -
            "description": "When the bird was seen. Distinct from createdAt so a sighting can be logged later.",
66 +
            "description": "Client-declared timestamp for when the bird was seen. Distinct from createdAt so a sighting can be written up later. Not verified by anything.",
61 67
            "format": "datetime",
62 68
            "type": "string"
63 69
          },
64 70
          "species": {
65 71
            "description": "Common name as the observer said it. Free text on purpose — always present, even when no code was resolved.",
66 72
            "maxGraphemes": 160,
67 73
            "maxLength": 640,
68 74
            "type": "string"
69 75
          },
70 76
          "speciesCode": {
71 77
            "description": "The observer's asserted identification as a stable eBird/Clements taxon code (e.g. `norcar`). Present when they picked from the list; absent when they just typed something. May be a `spuh` or `slash` code when the identification is honestly partial.",
72 78
            "maxLength": 32,
73 79
            "type": "string"
74 80
          }
75 81
        },
76 82
        "required": [
77 83
          "species",
78 84
          "observedAt",
79 85
          "createdAt"
80 86
        ],
81 87
        "type": "object"
82 88
      },
83 89
      "type": "record"
84 90
    },
85 91
    "media": {
86 92
      "properties": {
87 93
        "alt": {
94 +
          "description": "Alt text describing the media for people who cannot see or hear it.",
95 +
          "maxGraphemes": 400,
88 96
          "maxLength": 2000,
89 97
          "type": "string"
90 98
        },
91 99
        "blob": {
92 100
          "accept": [
93 101
            "image/*",
94 102
            "audio/*",
95 103
            "video/*"
96 104
          ],
105 +
          "description": "The captured file. Audio is first-class here: a bird's call is often better evidence than a photograph of a silhouette.",
97 106
          "maxSize": 100000000,
98 107
          "type": "blob"
99 108
        }
100 109
      },
101 110
      "required": [
102 111
        "blob"
103 112
      ],
104 113
      "type": "object"
105 114
    }
106 115
  },
107 116
  "id": "place.birds.sighting",
108 117
  "lexicon": 1
109 118
}

Compare Other Versions

Lexicon Garden

@