at.adsb.broadcast.message
Schema Diff
+31 -34
Compatibility Analysis
Breaking Changes Detected
24 breaking changes, 8 non-breaking changes.
Breaking Changes (24)
- RemovedVertex RemovedVertex { vertex_id: "at.adsb.broadcast.message:body.altitudeFt" }
- RemovedVertex RemovedVertex { vertex_id: "at.adsb.broadcast.message:body.groundSpeedKts" }
- RemovedVertex RemovedVertex { vertex_id: "at.adsb.broadcast.message:body.headingDeg" }
- RemovedVertex RemovedVertex { vertex_id: "at.adsb.broadcast.message:body.lastPosition" }
- RemovedVertex RemovedVertex { vertex_id: "at.adsb.broadcast.message:body.lat" }
- RemovedVertex RemovedVertex { vertex_id: "at.adsb.broadcast.message:body.lon" }
- RemovedVertex RemovedVertex { vertex_id: "at.adsb.broadcast.message:body.verticalRateFpm" }
- RemovedEdge RemovedEdge { src: "at.adsb.broadcast.message:body", tgt: "at.adsb.broadcast.message:body.altitudeFt", kind: "prop", name: Some("altitudeFt") }
- RemovedEdge RemovedEdge { src: "at.adsb.broadcast.message:body", tgt: "at.adsb.broadcast.message:body.groundSpeedKts", kind: "prop", name: Some("groundSpeedKts") }
- RemovedEdge RemovedEdge { src: "at.adsb.broadcast.message:body", tgt: "at.adsb.broadcast.message:body.headingDeg", kind: "prop", name: Some("headingDeg") }
- RemovedEdge RemovedEdge { src: "at.adsb.broadcast.message:body", tgt: "at.adsb.broadcast.message:body.lastPosition", kind: "prop", name: Some("lastPosition") }
- RemovedEdge RemovedEdge { src: "at.adsb.broadcast.message:body", tgt: "at.adsb.broadcast.message:body.lat", kind: "prop", name: Some("lat") }
- RemovedEdge RemovedEdge { src: "at.adsb.broadcast.message:body", tgt: "at.adsb.broadcast.message:body.lon", kind: "prop", name: Some("lon") }
- RemovedEdge RemovedEdge { src: "at.adsb.broadcast.message:body", tgt: "at.adsb.broadcast.message:body.verticalRateFpm", kind: "prop", name: Some("verticalRateFpm") }
- ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.broadcast.message:body.rssi", sort: "maxLength", value: "10" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.broadcast.message:body.seenPos", sort: "maxLength", value: "10" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.broadcast.message:body.squawk", sort: "maxLength", value: "4" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.broadcast.message:body.squawk", sort: "minLength", value: "4" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.broadcast.message:body.messageCount", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.broadcast.message:body.rc", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.broadcast.message:body.seen", sort: "maxLength", value: "10" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.broadcast.message:body.nic", sort: "maximum", value: "11" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.broadcast.message:body.nic", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.broadcast.message:body.callsign", sort: "maxLength", value: "8" }
Non-Breaking Changes (8)
- AddedVertex AddedVertex { vertex_id: "at.adsb.broadcast.message:body.messageCount" }
- AddedVertex AddedVertex { vertex_id: "at.adsb.broadcast.message:body.nic" }
- AddedVertex AddedVertex { vertex_id: "at.adsb.broadcast.message:body.position" }
- AddedVertex AddedVertex { vertex_id: "at.adsb.broadcast.message:body.rc" }
- AddedEdge AddedEdge { src: "at.adsb.broadcast.message:body", tgt: "at.adsb.broadcast.message:body.messageCount", kind: "prop", name: Some("messageCount") }
- AddedEdge AddedEdge { src: "at.adsb.broadcast.message:body", tgt: "at.adsb.broadcast.message:body.nic", kind: "prop", name: Some("nic") }
- AddedEdge AddedEdge { src: "at.adsb.broadcast.message:body", tgt: "at.adsb.broadcast.message:body.position", kind: "prop", name: Some("position") }
- AddedEdge AddedEdge { src: "at.adsb.broadcast.message:body", tgt: "at.adsb.broadcast.message:body.rc", kind: "prop", name: Some("rc") }
Migration Guidance
Removed Elements
RemovedVertex { vertex_id: "at.adsb.broadcast.message:body.altitudeFt" }RemovedVertex { vertex_id: "at.adsb.broadcast.message:body.groundSpeedKts" }RemovedVertex { vertex_id: "at.adsb.broadcast.message:body.headingDeg" }RemovedVertex { vertex_id: "at.adsb.broadcast.message:body.lastPosition" }RemovedVertex { vertex_id: "at.adsb.broadcast.message:body.lat" }RemovedVertex { vertex_id: "at.adsb.broadcast.message:body.lon" }RemovedVertex { vertex_id: "at.adsb.broadcast.message:body.verticalRateFpm" }
Added Elements
AddedVertex { vertex_id: "at.adsb.broadcast.message:body.messageCount" }AddedVertex { vertex_id: "at.adsb.broadcast.message:body.nic" }AddedVertex { vertex_id: "at.adsb.broadcast.message:body.position" }AddedVertex { vertex_id: "at.adsb.broadcast.message:body.rc" }
Constraint Changes
- ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.broadcast.message:body.squawk", sort: "minLength", value: "4" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.broadcast.message:body.squawk", sort: "maxLength", value: "4" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.broadcast.message:body.callsign", sort: "maxLength", value: "8" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.broadcast.message:body.rc", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.broadcast.message:body.seen", sort: "maxLength", value: "10" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.broadcast.message:body.rssi", sort: "maxLength", value: "10" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.broadcast.message:body.nic", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.broadcast.message:body.nic", sort: "maximum", value: "11" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.broadcast.message:body.messageCount", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.broadcast.message:body.seenPos", sort: "maxLength", value: "10" }
Additional Notes
- Breaking: RemovedEdge { src: "at.adsb.broadcast.message:body", tgt: "at.adsb.broadcast.message:body.altitudeFt", kind: "prop", name: Some("altitudeFt") }
- Breaking: RemovedEdge { src: "at.adsb.broadcast.message:body", tgt: "at.adsb.broadcast.message:body.groundSpeedKts", kind: "prop", name: Some("groundSpeedKts") }
- Breaking: RemovedEdge { src: "at.adsb.broadcast.message:body", tgt: "at.adsb.broadcast.message:body.headingDeg", kind: "prop", name: Some("headingDeg") }
- Breaking: RemovedEdge { src: "at.adsb.broadcast.message:body", tgt: "at.adsb.broadcast.message:body.lastPosition", kind: "prop", name: Some("lastPosition") }
- Breaking: RemovedEdge { src: "at.adsb.broadcast.message:body", tgt: "at.adsb.broadcast.message:body.lat", kind: "prop", name: Some("lat") }
- Breaking: RemovedEdge { src: "at.adsb.broadcast.message:body", tgt: "at.adsb.broadcast.message:body.lon", kind: "prop", name: Some("lon") }
- Breaking: RemovedEdge { src: "at.adsb.broadcast.message:body", tgt: "at.adsb.broadcast.message:body.verticalRateFpm", kind: "prop", name: Some("verticalRateFpm") }
- Non-breaking: AddedEdge { src: "at.adsb.broadcast.message:body", tgt: "at.adsb.broadcast.message:body.messageCount", kind: "prop", name: Some("messageCount") }
- Non-breaking: AddedEdge { src: "at.adsb.broadcast.message:body", tgt: "at.adsb.broadcast.message:body.nic", kind: "prop", name: Some("nic") }
- Non-breaking: AddedEdge { src: "at.adsb.broadcast.message:body", tgt: "at.adsb.broadcast.message:body.position", kind: "prop", name: Some("position") }
- Non-breaking: AddedEdge { src: "at.adsb.broadcast.message:body", tgt: "at.adsb.broadcast.message:body.rc", kind: "prop", name: Some("rc") }
1
1
{
2
2
"id": "at.adsb.broadcast.message",
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
"icaoHex",
11
11
"rssi",
12
12
"seen"
13
13
],
14
14
"properties": {
15
-
"lat": {
16
-
"type": "string",
17
-
"description": "Aircraft latitude in decimal degrees. String-encoded float."
15
+
"rc": {
16
+
"type": "integer",
17
+
"minimum": 0,
18
+
"description": "Radius of containment in metres. Derived from NIC."
18
19
},
19
-
"lon": {
20
-
"type": "string",
21
-
"description": "Aircraft longitude in decimal degrees. String-encoded float."
20
+
"nic": {
21
+
"type": "integer",
22
+
"maximum": 11,
23
+
"minimum": 0,
24
+
"description": "Navigation Integrity Category (0-11). Higher is more precise."
22
25
},
23
26
"rssi": {
24
27
"type": "string",
25
-
"description": "Received signal strength indicator in dBFS. String-encoded float."
28
+
"maxLength": 10,
29
+
"description": "Received signal strength indicator in dBFS."
26
30
},
27
31
"seen": {
28
32
"type": "string",
29
-
"description": "Seconds since last ADS-B message from this aircraft. String-encoded float."
33
+
"maxLength": 10,
34
+
"description": "Seconds since last message from this aircraft."
30
35
},
31
36
"squawk": {
32
37
"type": "string",
33
-
"description": "Transponder squawk code (4-digit octal)."
38
+
"maxLength": 4,
39
+
"minLength": 4,
40
+
"description": "Transponder squawk code (e.g. '2636')."
34
41
},
35
42
"icaoHex": {
36
43
"type": "string",
37
44
"maxLength": 6,
38
45
"minLength": 6,
39
-
"description": "ICAO 24-bit hex identifier (uppercased)."
46
+
"description": "ICAO 24-bit hex address (uppercased)."
40
47
},
41
48
"seenPos": {
42
49
"type": "string",
43
-
"description": "Seconds since last position fix from this aircraft. String-encoded float."
50
+
"maxLength": 10,
51
+
"description": "Seconds since last position fix from this aircraft."
44
52
},
45
53
"aircraft": {
46
54
"ref": "com.atproto.repo.strongRef",
47
55
"type": "ref",
48
56
"description": "Strong reference to the at.adsb.aircraft.identity record for this aircraft."
49
57
},
50
58
"callsign": {
51
59
"type": "string",
52
-
"description": "Flight callsign as broadcast."
53
-
},
54
-
"altitudeFt": {
55
-
"type": "string",
56
-
"description": "Barometric altitude in feet, or 'ground' when on surface. String-encoded."
60
+
"maxLength": 8,
61
+
"description": "Flight callsign as broadcast (e.g. 'UAL123')."
57
62
},
58
-
"headingDeg": {
59
-
"type": "string",
60
-
"description": "True heading in degrees. String-encoded float."
61
-
},
62
-
"lastPosition": {
63
-
"ref": "#lastPosition",
63
+
"position": {
64
+
"ref": "at.adsb.flight.defs#position",
64
65
"type": "ref",
65
-
"description": "Most recent known position with integrity data."
66
+
"description": "Most recent position fix for this aircraft."
66
67
},
67
-
"groundSpeedKts": {
68
-
"type": "string",
69
-
"description": "Ground speed in knots. String-encoded float."
70
-
},
71
-
"verticalRateFpm": {
72
-
"type": "string",
73
-
"description": "Vertical rate in feet per minute. String-encoded float."
68
+
"messageCount": {
69
+
"type": "integer",
70
+
"minimum": 0,
71
+
"description": "Total messages received from this aircraft in the current tracking session."
74
72
}
75
-
},
76
-
"description": "Telemetry frame for a single tracked aircraft."
73
+
}
77
74
},
78
-
"description": "Record containing an ADSB event packet."
75
+
"description": "Current state of a tracked aircraft as observed by a single receiver."
79
76
}
80
77
},
81
78
"$type": "com.atproto.lexicon.schema",
82
79
"lexicon": 1,
83
-
"description": "A real-time ADSB packet. Not intended to be written to a PDS due to high volume."
80
+
"description": "A real-time aircraft state update, broadcast via at.adsb.broadcast.subscribeEvents. Ephemeral — not written to a PDS."
84
81
}