com.airplaneian.contrail.temp.flight
Schema Diff
+11 -6
Compatibility Analysis
Backward Compatible
Backward compatible. 2 non-breaking changes.
Non-Breaking Changes (2)
- AddedVertex AddedVertex { vertex_id: "com.airplaneian.contrail.temp.flight:body.route" }
- AddedEdge AddedEdge { src: "com.airplaneian.contrail.temp.flight:body", tgt: "com.airplaneian.contrail.temp.flight:body.route", kind: "prop", name: Some("route") }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "com.airplaneian.contrail.temp.flight:body.route" }
Additional Notes
- Non-breaking: AddedEdge { src: "com.airplaneian.contrail.temp.flight:body", tgt: "com.airplaneian.contrail.temp.flight:body.route", kind: "prop", name: Some("route") }
1
1
{
2
2
"id": "com.airplaneian.contrail.temp.flight",
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
"createdAt"
11
11
],
12
12
"properties": {
13
13
"date": {
14
14
"type": "string",
15
15
"maxLength": 10,
16
16
"description": "Calendar date of departure at the origin, as 'YYYY-MM-DD'. Part of the identity key with 'operator' and 'flightNumber'. Must agree with any departure timestamp."
17
17
},
18
18
"seat": {
19
19
"type": "string",
20
20
"maxLength": 16,
21
21
"description": "Seat occupied, as a string, for example '14C'."
22
22
},
23
23
"cabin": {
24
24
"type": "string",
25
25
"maxLength": 64,
26
-
"description": "Cabin or class of service. Open string, lower camel case; readers must tolerate values outside the known list.",
26
+
"description": "Cabin or class of service. An open string in lower camel case; the known values are not exhaustive.",
27
27
"knownValues": [
28
28
"economy",
29
29
"premiumEconomy",
30
30
"business",
31
31
"first"
32
32
]
33
33
},
34
34
"notes": {
35
35
"type": "string",
36
36
"maxLength": 10000,
37
-
"description": "Free-text note. Public and permanent once published; do not put booking references or other credentials here.",
37
+
"description": "Free-text note. Public as soon as the record is written, and copies may persist after the record is deleted. Do not put booking references or other credentials here.",
38
38
"maxGraphemes": 1000
39
39
},
40
+
"route": {
41
+
"type": "string",
42
+
"maxLength": 1000,
43
+
"description": "The route as filed, written as the flight plan expressed it, for example 'SSTIK2 SSTIK Q90 AVOSE'. Free text, not normalised and not reliable for matching. This is the planned route, not the flown track: a track belongs in a surveillance archive, which 'icao24' and a departure time are enough to query."
44
+
},
40
45
"icao24": {
41
46
"type": "string",
42
47
"maxLength": 8,
43
48
"description": "The airframe's 24-bit ICAO address, six lowercase hexadecimal characters. With an actual departure time this is the identity key for flights with no flight number."
44
49
},
45
50
"origin": {
46
51
"ref": "com.airplaneian.contrail.temp.defs#place",
47
52
"type": "ref",
48
53
"description": "Where the flight departed. May equal 'destination'; local flights are ordinary."
49
54
},
50
55
"source": {
51
56
"type": "string",
52
57
"maxLength": 64,
53
58
"description": "Short identifier for the tool or dataset that wrote this record, for example 'flighty', 'manual', or 'adsb'."
54
59
},
55
60
"status": {
56
61
"type": "string",
57
62
"maxLength": 32,
58
63
"description": "How the flight concluded. Absent means unknown, so write 'normal' explicitly when the flight operated as planned.",
59
64
"knownValues": [
60
65
"normal",
61
66
"cancelled",
62
67
"diverted"
63
68
]
64
69
},
65
70
"callsign": {
66
71
"type": "string",
67
72
"maxLength": 16,
68
-
"description": "The flight identification the aircraft transmitted, uppercase, verbatim. Never decompose it: populate 'operator' and 'flightNumber' as well only when the split is unambiguous."
73
+
"description": "The flight identification the aircraft broadcast, uppercase and exactly as transmitted. Holds the whole callsign, never a fragment of one. May be an operator designator followed by a flight number, a registration, or a string with no internal structure."
69
74
},
70
75
"operator": {
71
76
"type": "string",
72
77
"maxLength": 8,
73
78
"description": "ICAO designator of the agency that operated the flight, three letters, uppercase. Not airlines only: 'UAL', 'FDX', 'RCH'. Use 'operatorName' where no designator exists."
74
79
},
75
80
"sourceId": {
76
81
"type": "string",
77
82
"maxLength": 512,
78
83
"description": "That tool's own identifier for this flight. Kept in the record body rather than the record key, so a record can be corrected without becoming a new one. Meaningful only with 'source'."
79
84
},
80
85
"createdAt": {
81
86
"type": "string",
82
87
"format": "datetime",
83
88
"description": "When this record was written, not when the flight happened. Explicit UTC offset, no fractional seconds."
84
89
},
85
90
"destination": {
86
91
"ref": "com.airplaneian.contrail.temp.defs#place",
87
92
"type": "ref",
88
93
"description": "Where the flight arrived, or was intended to arrive if it was cancelled. If it diverted, this stays the intended destination and 'diversionAirport' holds where it landed."
89
94
},
90
95
"aircraftType": {
91
96
"type": "string",
92
97
"maxLength": 128,
93
-
"description": "Free-text aircraft type as the source expressed it, for example 'Boeing 737-800'. Not reliable for matching. Do not derive it from 'icaoTypeDesignator' or the reverse."
98
+
"description": "Free-text aircraft type as the source expressed it, for example 'Boeing 737-800'. Not normalised and not reliable for matching. Several distinct ICAO designators can share one marketing name."
94
99
},
95
100
"flightNumber": {
96
101
"type": "string",
97
102
"maxLength": 16,
98
103
"description": "The operating agency's flight number, as a string. Digits only, without the operator prefix."
99
104
},
100
105
"operatorName": {
101
106
"type": "string",
102
107
"maxLength": 128,
103
108
"description": "Free-text name of the operating agency, for operators with no ICAO designator. Not reliable for matching. This is who flew the aircraft, which is often not who owns it."
104
109
},
105
110
"registration": {
106
111
"type": "string",
107
112
"maxLength": 16,
108
113
"description": "Registration or tail number, uppercase with no hyphens or spaces, so that 'G-VBOW' and 'GVBOW' are one aircraft. Military and state identifiers go here too."
109
114
},
110
115
"relationship": {
111
116
"type": "string",
112
117
"maxLength": 64,
113
-
"description": "The author's connection to this flight. Absent means no claim is being made, unlike every other field where absent means unknown. Open string: readers must tolerate values outside the known list.",
118
+
"description": "The author's connection to this flight. Absent means no claim is being made, unlike every other field where absent means unknown. An open string: the known values are not exhaustive.",
114
119
"knownValues": [
115
120
"passenger",
116
121
"pic",
117
122
"sic",
118
123
"student",
119
124
"instructor",
120
125
"crew",
121
126
"observer"
122
127
]
123
128
},
124
129
"actualLanding": {
125
130
"type": "string",
126
131
"format": "datetime",
127
132
"description": "Actual 'on' time, wheels on. Explicit UTC offset, no fractional seconds."
128
133
},
129
134
"actualTakeoff": {
130
135
"type": "string",
131
136
"format": "datetime",
132
137
"description": "Actual 'off' time, wheels off. Explicit UTC offset, no fractional seconds."
133
138
},
134
139
"registeredOwner": {
135
140
"type": "string",
136
141
"maxLength": 128,
137
142
"description": "Free-text name of the party the airframe is registered to. Often a trust or holding company, and frequently not the operator."
138
143
},
139
144
"diversionAirport": {
140
145
"ref": "com.airplaneian.contrail.temp.defs#place",
141
146
"type": "ref",
142
147
"description": "Where the flight actually landed, when that was not 'destination'. Present only when 'status' is 'diverted'."
143
148
},
144
149
"marketingAirline": {
145
150
"type": "string",
146
151
"maxLength": 8,
147
152
"description": "ICAO designator of the airline that sold the flight, when it differs from 'operator'. Codeshares only."
148
153
},
149
154
"scheduledLanding": {
150
155
"type": "string",
151
156
"format": "datetime",
152
157
"description": "Scheduled 'on' time, wheels on. Explicit UTC offset, no fractional seconds."
153
158
},
154
159
"scheduledTakeoff": {
155
160
"type": "string",
156
161
"format": "datetime",
157
162
"description": "Scheduled 'off' time, wheels off. Explicit UTC offset, no fractional seconds."
158
163
},
159
164
"actualGateArrival": {
160
165
"type": "string",
161
166
"format": "datetime",
162
167
"description": "Actual 'in' time, reaching the gate or parking position. Explicit UTC offset, no fractional seconds."
163
168
},
164
169
"icaoTypeDesignator": {
165
170
"type": "string",
166
171
"maxLength": 8,
167
-
"description": "ICAO aircraft type designator, for example 'B77W'. Write it only when the source supplies a designator."
172
+
"description": "ICAO aircraft type designator, for example 'B77W'."
168
173
},
169
174
"actualGateDeparture": {
170
175
"type": "string",
171
176
"format": "datetime",
172
177
"description": "Actual 'out' time, leaving the gate or parking position. Explicit UTC offset, no fractional seconds."
173
178
},
174
179
"scheduledGateArrival": {
175
180
"type": "string",
176
181
"format": "datetime",
177
182
"description": "Scheduled 'in' time, reaching the gate or parking position. Explicit UTC offset, no fractional seconds."
178
183
},
179
184
"marketingFlightNumber": {
180
185
"type": "string",
181
186
"maxLength": 16,
182
187
"description": "Flight number under which the flight was sold, when it differs from 'flightNumber'."
183
188
},
184
189
"scheduledGateDeparture": {
185
190
"type": "string",
186
191
"format": "datetime",
187
192
"description": "Scheduled 'out' time, leaving the gate or parking position. Explicit UTC offset, no fractional seconds."
188
193
}
189
194
}
190
195
},
191
196
"description": "An assertion that a particular flight existed, rather than a personal log entry about the author. Only 'createdAt' is required. Every other field is optional, and absent means unknown or not applicable rather than empty or zero. The exception is 'relationship', where absent means no claim is being made. Records of the same flight written by different people are expected, so write the identifying fields consistently. Any kind of flying is in scope, and origin may equal destination."
192
197
}
193
198
},
194
199
"$type": "com.atproto.lexicon.schema",
195
200
"lexicon": 1
196
201
}