at.adsb.flight.record

adsb.at

Schema Diff

+64 -65

From

CID
bafyreig5rjdodd4...
Indexed At
2026-05-24 04:21 UTC
View this version

To

CID
bafyreig57stwfac...
Indexed At
2026-05-25 20:10 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

29 breaking changes, 32 non-breaking changes.

Breaking Changes (29)
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.flight.record#airport" }
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.flight.record#airport.iata" }
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.flight.record#airport.icao" }
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.flight.record#airport.location" }
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.flight.record#airport.name" }
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.flight.record:body.contributors" }
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.flight.record:body.contributors:items" }
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.flight.record:body.destination" }
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.flight.record:body.origin" }
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.flight.record:body.summary" }
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.flight.record:body.track" }
  • RemovedEdge RemovedEdge { src: "at.adsb.flight.record#airport", tgt: "at.adsb.flight.record#airport.iata", kind: "prop", name: Some("iata") }
  • RemovedEdge RemovedEdge { src: "at.adsb.flight.record#airport", tgt: "at.adsb.flight.record#airport.icao", kind: "prop", name: Some("icao") }
  • RemovedEdge RemovedEdge { src: "at.adsb.flight.record#airport", tgt: "at.adsb.flight.record#airport.location", kind: "prop", name: Some("location") }
  • RemovedEdge RemovedEdge { src: "at.adsb.flight.record#airport", tgt: "at.adsb.flight.record#airport.name", kind: "prop", name: Some("name") }
  • RemovedEdge RemovedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.contributors", kind: "prop", name: Some("contributors") }
  • RemovedEdge RemovedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.destination", kind: "prop", name: Some("destination") }
  • RemovedEdge RemovedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.origin", kind: "prop", name: Some("origin") }
  • RemovedEdge RemovedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.summary", kind: "prop", name: Some("summary") }
  • RemovedEdge RemovedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.track", kind: "prop", name: Some("track") }
  • RemovedEdge RemovedEdge { src: "at.adsb.flight.record:body.contributors", tgt: "at.adsb.flight.record:body.contributors:items", kind: "items", name: None }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.flight.record:body.finalHeadingDeg", sort: "maxLength", value: "10" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.flight.record:body.maxRangeNm", sort: "maxLength", value: "20" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.flight.record:body.messageCount", sort: "minimum", value: "0" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.flight.record:body.initialGroundSpeedKts", sort: "maxLength", value: "10" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.flight.record:body.initialHeadingDeg", sort: "maxLength", value: "10" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.flight.record:body.finalGroundSpeedKts", sort: "maxLength", value: "10" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.flight.record:body.squawk", sort: "minLength", value: "4" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.flight.record:body.squawk", sort: "maxLength", value: "4" }
Non-Breaking Changes (32)
  • AddedVertex AddedVertex { vertex_id: "at.adsb.flight.record:body.batches" }
  • AddedVertex AddedVertex { vertex_id: "at.adsb.flight.record:body.batches:items" }
  • AddedVertex AddedVertex { vertex_id: "at.adsb.flight.record:body.finalAltitudeFt" }
  • AddedVertex AddedVertex { vertex_id: "at.adsb.flight.record:body.finalGroundSpeedKts" }
  • AddedVertex AddedVertex { vertex_id: "at.adsb.flight.record:body.finalHeadingDeg" }
  • AddedVertex AddedVertex { vertex_id: "at.adsb.flight.record:body.finalVerticalRateFpm" }
  • AddedVertex AddedVertex { vertex_id: "at.adsb.flight.record:body.initialAltitudeFt" }
  • AddedVertex AddedVertex { vertex_id: "at.adsb.flight.record:body.initialGroundSpeedKts" }
  • AddedVertex AddedVertex { vertex_id: "at.adsb.flight.record:body.initialHeadingDeg" }
  • AddedVertex AddedVertex { vertex_id: "at.adsb.flight.record:body.initialVerticalRateFpm" }
  • AddedVertex AddedVertex { vertex_id: "at.adsb.flight.record:body.maxRangeNm" }
  • AddedVertex AddedVertex { vertex_id: "at.adsb.flight.record:body.messageCount" }
  • AddedVertex AddedVertex { vertex_id: "at.adsb.flight.record:body.squawk" }
  • AddedEdge AddedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.batches", kind: "prop", name: Some("batches") }
  • AddedEdge AddedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.finalAltitudeFt", kind: "prop", name: Some("finalAltitudeFt") }
  • AddedEdge AddedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.finalGroundSpeedKts", kind: "prop", name: Some("finalGroundSpeedKts") }
  • AddedEdge AddedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.finalHeadingDeg", kind: "prop", name: Some("finalHeadingDeg") }
  • AddedEdge AddedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.finalVerticalRateFpm", kind: "prop", name: Some("finalVerticalRateFpm") }
  • AddedEdge AddedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.initialAltitudeFt", kind: "prop", name: Some("initialAltitudeFt") }
  • AddedEdge AddedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.initialGroundSpeedKts", kind: "prop", name: Some("initialGroundSpeedKts") }
  • AddedEdge AddedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.initialHeadingDeg", kind: "prop", name: Some("initialHeadingDeg") }
  • AddedEdge AddedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.initialVerticalRateFpm", kind: "prop", name: Some("initialVerticalRateFpm") }
  • AddedEdge AddedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.maxRangeNm", kind: "prop", name: Some("maxRangeNm") }
  • AddedEdge AddedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.messageCount", kind: "prop", name: Some("messageCount") }
  • AddedEdge AddedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.squawk", kind: "prop", name: Some("squawk") }
  • AddedEdge AddedEdge { src: "at.adsb.flight.record:body.batches", tgt: "at.adsb.flight.record:body.batches:items", kind: "items", name: None }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.flight.record#airport.icao", sort: "minLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.flight.record#airport.icao", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.flight.record#airport.iata", sort: "minLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.flight.record#airport.iata", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.flight.record#airport.name", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.flight.record#airport.name", sort: "maxGraphemes" }

Migration Guidance

Removed Elements

  • RemovedVertex { vertex_id: "at.adsb.flight.record#airport" }
  • RemovedVertex { vertex_id: "at.adsb.flight.record#airport.iata" }
  • RemovedVertex { vertex_id: "at.adsb.flight.record#airport.icao" }
  • RemovedVertex { vertex_id: "at.adsb.flight.record#airport.location" }
  • RemovedVertex { vertex_id: "at.adsb.flight.record#airport.name" }
  • RemovedVertex { vertex_id: "at.adsb.flight.record:body.contributors" }
  • RemovedVertex { vertex_id: "at.adsb.flight.record:body.contributors:items" }
  • RemovedVertex { vertex_id: "at.adsb.flight.record:body.destination" }
  • RemovedVertex { vertex_id: "at.adsb.flight.record:body.origin" }
  • RemovedVertex { vertex_id: "at.adsb.flight.record:body.summary" }
  • RemovedVertex { vertex_id: "at.adsb.flight.record:body.track" }

Added Elements

  • AddedVertex { vertex_id: "at.adsb.flight.record:body.batches" }
  • AddedVertex { vertex_id: "at.adsb.flight.record:body.batches:items" }
  • AddedVertex { vertex_id: "at.adsb.flight.record:body.finalAltitudeFt" }
  • AddedVertex { vertex_id: "at.adsb.flight.record:body.finalGroundSpeedKts" }
  • AddedVertex { vertex_id: "at.adsb.flight.record:body.finalHeadingDeg" }
  • AddedVertex { vertex_id: "at.adsb.flight.record:body.finalVerticalRateFpm" }
  • AddedVertex { vertex_id: "at.adsb.flight.record:body.initialAltitudeFt" }
  • AddedVertex { vertex_id: "at.adsb.flight.record:body.initialGroundSpeedKts" }
  • AddedVertex { vertex_id: "at.adsb.flight.record:body.initialHeadingDeg" }
  • AddedVertex { vertex_id: "at.adsb.flight.record:body.initialVerticalRateFpm" }
  • AddedVertex { vertex_id: "at.adsb.flight.record:body.maxRangeNm" }
  • AddedVertex { vertex_id: "at.adsb.flight.record:body.messageCount" }
  • AddedVertex { vertex_id: "at.adsb.flight.record:body.squawk" }

Constraint Changes

  • ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.flight.record:body.squawk", sort: "maxLength", value: "4" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.flight.record:body.squawk", sort: "minLength", value: "4" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.flight.record:body.initialHeadingDeg", sort: "maxLength", value: "10" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.flight.record:body.finalGroundSpeedKts", sort: "maxLength", value: "10" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.flight.record:body.finalHeadingDeg", sort: "maxLength", value: "10" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.flight.record:body.initialGroundSpeedKts", sort: "maxLength", value: "10" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.flight.record:body.maxRangeNm", sort: "maxLength", value: "20" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.flight.record:body.messageCount", sort: "minimum", value: "0" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.flight.record#airport.name", sort: "maxGraphemes" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.flight.record#airport.name", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.flight.record#airport.iata", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.flight.record#airport.iata", sort: "minLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.flight.record#airport.icao", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.flight.record#airport.icao", sort: "minLength" }

Additional Notes

  • Breaking: RemovedEdge { src: "at.adsb.flight.record#airport", tgt: "at.adsb.flight.record#airport.iata", kind: "prop", name: Some("iata") }
  • Breaking: RemovedEdge { src: "at.adsb.flight.record#airport", tgt: "at.adsb.flight.record#airport.icao", kind: "prop", name: Some("icao") }
  • Breaking: RemovedEdge { src: "at.adsb.flight.record#airport", tgt: "at.adsb.flight.record#airport.location", kind: "prop", name: Some("location") }
  • Breaking: RemovedEdge { src: "at.adsb.flight.record#airport", tgt: "at.adsb.flight.record#airport.name", kind: "prop", name: Some("name") }
  • Breaking: RemovedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.contributors", kind: "prop", name: Some("contributors") }
  • Breaking: RemovedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.destination", kind: "prop", name: Some("destination") }
  • Breaking: RemovedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.origin", kind: "prop", name: Some("origin") }
  • Breaking: RemovedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.summary", kind: "prop", name: Some("summary") }
  • Breaking: RemovedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.track", kind: "prop", name: Some("track") }
  • Breaking: RemovedEdge { src: "at.adsb.flight.record:body.contributors", tgt: "at.adsb.flight.record:body.contributors:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.batches", kind: "prop", name: Some("batches") }
  • Non-breaking: AddedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.finalAltitudeFt", kind: "prop", name: Some("finalAltitudeFt") }
  • Non-breaking: AddedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.finalGroundSpeedKts", kind: "prop", name: Some("finalGroundSpeedKts") }
  • Non-breaking: AddedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.finalHeadingDeg", kind: "prop", name: Some("finalHeadingDeg") }
  • Non-breaking: AddedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.finalVerticalRateFpm", kind: "prop", name: Some("finalVerticalRateFpm") }
  • Non-breaking: AddedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.initialAltitudeFt", kind: "prop", name: Some("initialAltitudeFt") }
  • Non-breaking: AddedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.initialGroundSpeedKts", kind: "prop", name: Some("initialGroundSpeedKts") }
  • Non-breaking: AddedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.initialHeadingDeg", kind: "prop", name: Some("initialHeadingDeg") }
  • Non-breaking: AddedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.initialVerticalRateFpm", kind: "prop", name: Some("initialVerticalRateFpm") }
  • Non-breaking: AddedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.maxRangeNm", kind: "prop", name: Some("maxRangeNm") }
  • Non-breaking: AddedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.messageCount", kind: "prop", name: Some("messageCount") }
  • Non-breaking: AddedEdge { src: "at.adsb.flight.record:body", tgt: "at.adsb.flight.record:body.squawk", kind: "prop", name: Some("squawk") }
  • Non-breaking: AddedEdge { src: "at.adsb.flight.record:body.batches", tgt: "at.adsb.flight.record:body.batches:items", kind: "items", name: None }
1 1
{
2 2
  "id": "at.adsb.flight.record",
3 3
  "defs": {
4 4
    "main": {
5 5
      "key": "tid",
6 6
      "type": "record",
7 7
      "record": {
8 8
        "type": "object",
9 9
        "required": [
10 10
          "aircraft",
11 11
          "firstSeen",
12 12
          "lastSeen",
13 -
          "contributors",
13 +
          "batches",
14 14
          "createdAt"
15 15
        ],
16 16
        "properties": {
17 -
          "track": {
18 -
            "type": "blob",
19 -
            "accept": [
20 -
              "application/json",
21 -
              "application/zstd"
22 -
            ],
23 -
            "maxSize": 2000000,
24 -
            "description": "Full position track as a JSON array of at.adsb.flight.defs#position objects, optionally compressed."
25 -
          },
26 -
          "origin": {
27 -
            "ref": "#airport",
28 -
            "type": "ref",
29 -
            "description": "Departure airport, if known."
17 +
          "squawk": {
18 +
            "type": "string",
19 +
            "maxLength": 4,
20 +
            "minLength": 4,
21 +
            "description": "Transponder squawk code (e.g. '2636')."
30 22
          },
31 -
          "summary": {
32 -
            "ref": "at.adsb.flight.defs#trackSummary",
33 -
            "type": "ref",
34 -
            "description": "Summary of the flight path."
23 +
          "batches": {
24 +
            "type": "array",
25 +
            "items": {
26 +
              "ref": "com.atproto.repo.strongRef",
27 +
              "type": "ref"
28 +
            },
29 +
            "maxLength": 5760,
30 +
            "minLength": 1,
31 +
            "description": "Strong references to all at.adsb.receiver.sighting batch records where this aircraft appeared."
35 32
          },
36 33
          "aircraft": {
37 34
            "ref": "com.atproto.repo.strongRef",
38 35
            "type": "ref",
39 36
            "description": "Strong reference to the at.adsb.aircraft.identity record for this aircraft."
40 37
          },
41 38
          "callsign": {
42 39
            "type": "string",
43 40
            "maxLength": 8,
44 41
            "description": "Flight callsign as broadcast (e.g. 'UAL123')."
45 42
          },
46 43
          "lastSeen": {
47 44
            "type": "string",
48 45
            "format": "datetime",
49 -
            "description": "When the aircraft was last observed by any contributor."
46 +
            "description": "When this receiver last detected the aircraft."
50 47
          },
51 48
          "createdAt": {
52 49
            "type": "string",
53 50
            "format": "datetime"
54 51
          },
55 52
          "firstSeen": {
56 53
            "type": "string",
57 54
            "format": "datetime",
58 -
            "description": "When the aircraft was first observed by any contributor."
55 +
            "description": "When this receiver first detected the aircraft."
59 56
          },
60 -
          "destination": {
61 -
            "ref": "#airport",
62 -
            "type": "ref",
63 -
            "description": "Arrival airport, if known."
57 +
          "maxRangeNm": {
58 +
            "type": "string",
59 +
            "maxLength": 20,
60 +
            "description": "Furthest distance to this aircraft during the sighting, in nautical miles."
64 61
          },
65 -
          "contributors": {
66 -
            "type": "array",
67 -
            "items": {
68 -
              "ref": "at.adsb.flight.defs#contributor",
69 -
              "type": "ref"
70 -
            },
71 -
            "maxLength": 100,
72 -
            "minLength": 1,
73 -
            "description": "Receivers that contributed data to this flight record."
62 +
          "messageCount": {
63 +
            "type": "integer",
64 +
            "minimum": 0,
65 +
            "description": "Total messages received from this aircraft by this receiver."
74 66
          },
75 67
          "positionCount": {
76 68
            "type": "integer",
77 69
            "minimum": 0,
78 -
            "description": "Total position reports across all contributors."
70 +
            "description": "Number of position reports received by this receiver."
71 +
          },
72 +
          "finalAltitudeFt": {
73 +
            "type": "integer",
74 +
            "description": "Barometric altitude in feet at last detection."
75 +
          },
76 +
          "finalHeadingDeg": {
77 +
            "type": "string",
78 +
            "maxLength": 10,
79 +
            "description": "Ground track in degrees at last detection."
80 +
          },
81 +
          "initialAltitudeFt": {
82 +
            "type": "integer",
83 +
            "description": "Barometric altitude in feet at first detection."
84 +
          },
85 +
          "initialHeadingDeg": {
86 +
            "type": "string",
87 +
            "maxLength": 10,
88 +
            "description": "Ground track in degrees at first detection."
89 +
          },
90 +
          "finalGroundSpeedKts": {
91 +
            "type": "string",
92 +
            "maxLength": 10,
93 +
            "description": "Ground speed in knots at last detection."
94 +
          },
95 +
          "finalVerticalRateFpm": {
96 +
            "type": "integer",
97 +
            "description": "Vertical rate in feet per minute at last detection. Negative is descending."
98 +
          },
99 +
          "initialGroundSpeedKts": {
100 +
            "type": "string",
101 +
            "maxLength": 10,
102 +
            "description": "Ground speed in knots at first detection."
103 +
          },
104 +
          "initialVerticalRateFpm": {
105 +
            "type": "integer",
106 +
            "description": "Vertical rate in feet per minute at first detection. Negative is descending."
79 107
          }
80 108
        }
81 109
      },
82 -
      "description": "A completed flight record with receiver attribution."
83 -
    },
84 -
    "airport": {
85 -
      "type": "object",
86 -
      "properties": {
87 -
        "iata": {
88 -
          "type": "string",
89 -
          "maxLength": 3,
90 -
          "minLength": 3,
91 -
          "description": "IATA airport code (e.g. 'BOS', 'LHR')."
92 -
        },
93 -
        "icao": {
94 -
          "type": "string",
95 -
          "maxLength": 4,
96 -
          "minLength": 4,
97 -
          "description": "ICAO airport code (e.g. 'KBOS', 'EGLL')."
98 -
        },
99 -
        "name": {
100 -
          "type": "string",
101 -
          "maxLength": 1280,
102 -
          "description": "Human-readable airport name.",
103 -
          "maxGraphemes": 128
104 -
        },
105 -
        "location": {
106 -
          "ref": "community.lexicon.location.geo",
107 -
          "type": "ref",
108 -
          "description": "Geographic position of the airport."
109 -
        }
110 -
      },
111 -
      "description": "An airport identified by ICAO or IATA code."
110 +
      "description": "A receiver's record of one aircraft's complete observed flight."
112 111
    }
113 112
  },
114 113
  "$type": "com.atproto.lexicon.schema",
115 114
  "lexicon": 1,
116 -
  "description": "A completed flight as synthesised from one or more receiver sightings. Created by an aggregator after the flight is no longer tracked. Links back to the individual receiver sightings that contributed data."
115 +
  "description": "A receiver-authored record of an aircraft's transit through the receiver's coverage area. Created on departure. References all contributing batch sightings and the aircraft identity via strongRef for provenance verification."
117 116
}

Compare Other Versions

Lexicon Garden

@