at.adsb.receiver.sighting

adsb.at

Schema Diff

+48 -92

From

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

To

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

Compatibility Analysis

Breaking Changes Detected

40 breaking changes, 27 non-breaking changes.

Breaking Changes (40)
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.aircraft" }
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.callsign" }
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.category" }
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.finalAltitudeFt" }
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.finalGroundSpeedKts" }
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.finalHeadingDeg" }
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.finalVerticalRateFpm" }
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.firstSeen" }
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.initialAltitudeFt" }
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.initialGroundSpeedKts" }
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.initialHeadingDeg" }
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.initialVerticalRateFpm" }
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.lastSeen" }
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.maxRangeNm" }
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.messageCount" }
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.positionCount" }
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.qnhHpa" }
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.squawk" }
  • RemovedVertex RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.track" }
  • RemovedEdge RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.aircraft", kind: "prop", name: Some("aircraft") }
  • RemovedEdge RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.callsign", kind: "prop", name: Some("callsign") }
  • RemovedEdge RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.category", kind: "prop", name: Some("category") }
  • RemovedEdge RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.finalAltitudeFt", kind: "prop", name: Some("finalAltitudeFt") }
  • RemovedEdge RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.finalGroundSpeedKts", kind: "prop", name: Some("finalGroundSpeedKts") }
  • RemovedEdge RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.finalHeadingDeg", kind: "prop", name: Some("finalHeadingDeg") }
  • RemovedEdge RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.finalVerticalRateFpm", kind: "prop", name: Some("finalVerticalRateFpm") }
  • RemovedEdge RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.firstSeen", kind: "prop", name: Some("firstSeen") }
  • RemovedEdge RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.initialAltitudeFt", kind: "prop", name: Some("initialAltitudeFt") }
  • RemovedEdge RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.initialGroundSpeedKts", kind: "prop", name: Some("initialGroundSpeedKts") }
  • RemovedEdge RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.initialHeadingDeg", kind: "prop", name: Some("initialHeadingDeg") }
  • RemovedEdge RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.initialVerticalRateFpm", kind: "prop", name: Some("initialVerticalRateFpm") }
  • RemovedEdge RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.lastSeen", kind: "prop", name: Some("lastSeen") }
  • RemovedEdge RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.maxRangeNm", kind: "prop", name: Some("maxRangeNm") }
  • RemovedEdge RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.messageCount", kind: "prop", name: Some("messageCount") }
  • RemovedEdge RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.positionCount", kind: "prop", name: Some("positionCount") }
  • RemovedEdge RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.qnhHpa", kind: "prop", name: Some("qnhHpa") }
  • RemovedEdge RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.squawk", kind: "prop", name: Some("squawk") }
  • RemovedEdge RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.track", kind: "prop", name: Some("track") }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.receiver.sighting#manifestEntry.icaoHex", sort: "minLength", value: "6" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.receiver.sighting#manifestEntry.icaoHex", sort: "maxLength", value: "6" }
Non-Breaking Changes (27)
  • AddedVertex AddedVertex { vertex_id: "at.adsb.receiver.sighting#manifestEntry" }
  • AddedVertex AddedVertex { vertex_id: "at.adsb.receiver.sighting#manifestEntry.icaoHex" }
  • AddedVertex AddedVertex { vertex_id: "at.adsb.receiver.sighting:body.manifest" }
  • AddedVertex AddedVertex { vertex_id: "at.adsb.receiver.sighting:body.manifest:items" }
  • AddedVertex AddedVertex { vertex_id: "at.adsb.receiver.sighting:body.rawCapture" }
  • AddedVertex AddedVertex { vertex_id: "at.adsb.receiver.sighting:body.telemetry" }
  • AddedVertex AddedVertex { vertex_id: "at.adsb.receiver.sighting:body.windowEnd" }
  • AddedVertex AddedVertex { vertex_id: "at.adsb.receiver.sighting:body.windowStart" }
  • AddedEdge AddedEdge { src: "at.adsb.receiver.sighting#manifestEntry", tgt: "at.adsb.receiver.sighting#manifestEntry.icaoHex", kind: "prop", name: Some("icaoHex") }
  • AddedEdge AddedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.manifest", kind: "prop", name: Some("manifest") }
  • AddedEdge AddedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.rawCapture", kind: "prop", name: Some("rawCapture") }
  • AddedEdge AddedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.telemetry", kind: "prop", name: Some("telemetry") }
  • AddedEdge AddedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.windowEnd", kind: "prop", name: Some("windowEnd") }
  • AddedEdge AddedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.windowStart", kind: "prop", name: Some("windowStart") }
  • AddedEdge AddedEdge { src: "at.adsb.receiver.sighting:body.manifest", tgt: "at.adsb.receiver.sighting:body.manifest:items", kind: "items", name: None }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.receiver.sighting:body.category", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.receiver.sighting:body.initialHeadingDeg", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.receiver.sighting:body.initialGroundSpeedKts", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.receiver.sighting:body.finalGroundSpeedKts", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.receiver.sighting:body.finalHeadingDeg", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.receiver.sighting:body.callsign", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.receiver.sighting:body.positionCount", sort: "minimum" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.receiver.sighting:body.maxRangeNm", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.receiver.sighting:body.qnhHpa", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.receiver.sighting:body.squawk", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.receiver.sighting:body.squawk", sort: "minLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.receiver.sighting:body.messageCount", sort: "minimum" }

Migration Guidance

Removed Elements

  • RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.aircraft" }
  • RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.callsign" }
  • RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.category" }
  • RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.finalAltitudeFt" }
  • RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.finalGroundSpeedKts" }
  • RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.finalHeadingDeg" }
  • RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.finalVerticalRateFpm" }
  • RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.firstSeen" }
  • RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.initialAltitudeFt" }
  • RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.initialGroundSpeedKts" }
  • RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.initialHeadingDeg" }
  • RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.initialVerticalRateFpm" }
  • RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.lastSeen" }
  • RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.maxRangeNm" }
  • RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.messageCount" }
  • RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.positionCount" }
  • RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.qnhHpa" }
  • RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.squawk" }
  • RemovedVertex { vertex_id: "at.adsb.receiver.sighting:body.track" }

Added Elements

  • AddedVertex { vertex_id: "at.adsb.receiver.sighting#manifestEntry" }
  • AddedVertex { vertex_id: "at.adsb.receiver.sighting#manifestEntry.icaoHex" }
  • AddedVertex { vertex_id: "at.adsb.receiver.sighting:body.manifest" }
  • AddedVertex { vertex_id: "at.adsb.receiver.sighting:body.manifest:items" }
  • AddedVertex { vertex_id: "at.adsb.receiver.sighting:body.rawCapture" }
  • AddedVertex { vertex_id: "at.adsb.receiver.sighting:body.telemetry" }
  • AddedVertex { vertex_id: "at.adsb.receiver.sighting:body.windowEnd" }
  • AddedVertex { vertex_id: "at.adsb.receiver.sighting:body.windowStart" }

Constraint Changes

  • ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.receiver.sighting#manifestEntry.icaoHex", sort: "maxLength", value: "6" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.adsb.receiver.sighting#manifestEntry.icaoHex", sort: "minLength", value: "6" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.receiver.sighting:body.squawk", sort: "minLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.receiver.sighting:body.squawk", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.receiver.sighting:body.positionCount", sort: "minimum" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.receiver.sighting:body.qnhHpa", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.receiver.sighting:body.callsign", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.receiver.sighting:body.category", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.receiver.sighting:body.maxRangeNm", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.receiver.sighting:body.messageCount", sort: "minimum" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.receiver.sighting:body.initialGroundSpeedKts", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.receiver.sighting:body.finalHeadingDeg", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.receiver.sighting:body.initialHeadingDeg", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "at.adsb.receiver.sighting:body.finalGroundSpeedKts", sort: "maxLength" }

Additional Notes

  • Breaking: RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.aircraft", kind: "prop", name: Some("aircraft") }
  • Breaking: RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.callsign", kind: "prop", name: Some("callsign") }
  • Breaking: RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.category", kind: "prop", name: Some("category") }
  • Breaking: RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.finalAltitudeFt", kind: "prop", name: Some("finalAltitudeFt") }
  • Breaking: RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.finalGroundSpeedKts", kind: "prop", name: Some("finalGroundSpeedKts") }
  • Breaking: RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.finalHeadingDeg", kind: "prop", name: Some("finalHeadingDeg") }
  • Breaking: RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.finalVerticalRateFpm", kind: "prop", name: Some("finalVerticalRateFpm") }
  • Breaking: RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.firstSeen", kind: "prop", name: Some("firstSeen") }
  • Breaking: RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.initialAltitudeFt", kind: "prop", name: Some("initialAltitudeFt") }
  • Breaking: RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.initialGroundSpeedKts", kind: "prop", name: Some("initialGroundSpeedKts") }
  • Breaking: RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.initialHeadingDeg", kind: "prop", name: Some("initialHeadingDeg") }
  • Breaking: RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.initialVerticalRateFpm", kind: "prop", name: Some("initialVerticalRateFpm") }
  • Breaking: RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.lastSeen", kind: "prop", name: Some("lastSeen") }
  • Breaking: RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.maxRangeNm", kind: "prop", name: Some("maxRangeNm") }
  • Breaking: RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.messageCount", kind: "prop", name: Some("messageCount") }
  • Breaking: RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.positionCount", kind: "prop", name: Some("positionCount") }
  • Breaking: RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.qnhHpa", kind: "prop", name: Some("qnhHpa") }
  • Breaking: RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.squawk", kind: "prop", name: Some("squawk") }
  • Breaking: RemovedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.track", kind: "prop", name: Some("track") }
  • Non-breaking: AddedEdge { src: "at.adsb.receiver.sighting#manifestEntry", tgt: "at.adsb.receiver.sighting#manifestEntry.icaoHex", kind: "prop", name: Some("icaoHex") }
  • Non-breaking: AddedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.manifest", kind: "prop", name: Some("manifest") }
  • Non-breaking: AddedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.rawCapture", kind: "prop", name: Some("rawCapture") }
  • Non-breaking: AddedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.telemetry", kind: "prop", name: Some("telemetry") }
  • Non-breaking: AddedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.windowEnd", kind: "prop", name: Some("windowEnd") }
  • Non-breaking: AddedEdge { src: "at.adsb.receiver.sighting:body", tgt: "at.adsb.receiver.sighting:body.windowStart", kind: "prop", name: Some("windowStart") }
  • Non-breaking: AddedEdge { src: "at.adsb.receiver.sighting:body.manifest", tgt: "at.adsb.receiver.sighting:body.manifest:items", kind: "items", name: None }
1 1
{
2 2
  "id": "at.adsb.receiver.sighting",
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 -
          "aircraft",
11 -
          "firstSeen",
12 -
          "lastSeen",
10 +
          "windowStart",
11 +
          "windowEnd",
12 +
          "manifest",
13 +
          "telemetry",
13 14
          "createdAt"
14 15
        ],
15 16
        "properties": {
16 -
          "track": {
17 +
          "manifest": {
18 +
            "type": "array",
19 +
            "items": {
20 +
              "ref": "#manifestEntry",
21 +
              "type": "ref"
22 +
            },
23 +
            "maxLength": 1000,
24 +
            "minLength": 1,
25 +
            "description": "Lightweight list of all aircraft observed in this window."
26 +
          },
27 +
          "createdAt": {
28 +
            "type": "string",
29 +
            "format": "datetime"
30 +
          },
31 +
          "telemetry": {
17 32
            "type": "blob",
18 33
            "accept": [
19 -
              "application/json",
20 34
              "application/zstd"
21 35
            ],
22 36
            "maxSize": 2000000,
23 -
            "description": "Position track as a JSON array of at.adsb.flight.defs#position objects, optionally compressed. This is the receiver's partial view of the flight."
24 -
          },
25 -
          "qnhHpa": {
26 -
            "type": "string",
27 -
            "maxLength": 10,
28 -
            "description": "Altimeter setting (QNH) in hectopascals."
37 +
            "description": "Zstd-compressed JSON object keyed by ICAO hex, values are arrays of at.adsb.flight.defs#position objects."
29 38
          },
30 -
          "squawk": {
31 -
            "type": "string",
32 -
            "maxLength": 4,
33 -
            "minLength": 4,
34 -
            "description": "Transponder squawk code (e.g. '2636')."
35 -
          },
36 -
          "aircraft": {
37 -
            "ref": "com.atproto.repo.strongRef",
38 -
            "type": "ref",
39 -
            "description": "Strong reference to the at.adsb.aircraft.identity record for this aircraft."
40 -
          },
41 -
          "callsign": {
39 +
          "windowEnd": {
42 40
            "type": "string",
43 -
            "maxLength": 8,
44 -
            "description": "Flight callsign as broadcast (e.g. 'UAL123')."
45 -
          },
46 -
          "category": {
47 -
            "type": "string",
48 -
            "maxLength": 4,
49 -
            "description": "ADS-B emitter category (e.g. 'A3' for large aircraft)."
50 -
          },
51 -
          "lastSeen": {
52 -
            "type": "string",
53 41
            "format": "datetime",
54 -
            "description": "When this receiver last detected the aircraft."
42 +
            "description": "End of the observation window (exclusive)."
55 43
          },
56 -
          "createdAt": {
57 -
            "type": "string",
58 -
            "format": "datetime"
44 +
          "rawCapture": {
45 +
            "type": "blob",
46 +
            "accept": [
47 +
              "application/vnd.at-adsb.raw-capture+zstd"
48 +
            ],
49 +
            "maxSize": 2000000,
50 +
            "description": "Raw demodulated SDR frames captured during this window, in ATRX envelope format. Optional — strengthens provenance but not required."
59 51
          },
60 -
          "firstSeen": {
52 +
          "windowStart": {
61 53
            "type": "string",
62 54
            "format": "datetime",
63 -
            "description": "When this receiver first detected the aircraft."
64 -
          },
65 -
          "maxRangeNm": {
66 -
            "type": "string",
67 -
            "maxLength": 20,
68 -
            "description": "Furthest distance to this aircraft during the sighting, in nautical miles."
69 -
          },
70 -
          "messageCount": {
71 -
            "type": "integer",
72 -
            "minimum": 0,
73 -
            "description": "Total messages received from this aircraft."
74 -
          },
75 -
          "positionCount": {
76 -
            "type": "integer",
77 -
            "minimum": 0,
78 -
            "description": "Number of position reports received."
79 -
          },
80 -
          "finalAltitudeFt": {
81 -
            "type": "integer",
82 -
            "description": "Barometric altitude in feet at last detection."
83 -
          },
84 -
          "finalHeadingDeg": {
85 -
            "type": "string",
86 -
            "maxLength": 10,
87 -
            "description": "Ground track in degrees at last detection."
88 -
          },
89 -
          "initialAltitudeFt": {
90 -
            "type": "integer",
91 -
            "description": "Barometric altitude in feet at first detection."
92 -
          },
93 -
          "initialHeadingDeg": {
94 -
            "type": "string",
95 -
            "maxLength": 10,
96 -
            "description": "Ground track in degrees at first detection."
97 -
          },
98 -
          "finalGroundSpeedKts": {
99 -
            "type": "string",
100 -
            "maxLength": 10,
101 -
            "description": "Ground speed in knots at last detection."
102 -
          },
103 -
          "finalVerticalRateFpm": {
104 -
            "type": "integer",
105 -
            "description": "Vertical rate in feet per minute at last detection. Negative is descending."
106 -
          },
107 -
          "initialGroundSpeedKts": {
108 -
            "type": "string",
109 -
            "maxLength": 10,
110 -
            "description": "Ground speed in knots at first detection."
111 -
          },
112 -
          "initialVerticalRateFpm": {
113 -
            "type": "integer",
114 -
            "description": "Vertical rate in feet per minute at first detection. Negative is descending."
55 +
            "description": "Start of the observation window (inclusive)."
115 56
          }
116 57
        }
117 58
      },
118 -
      "description": "A receiver's sighting of an aircraft transit through its coverage area."
59 +
      "description": "A receiver's batch sighting covering a configurable observation window."
60 +
    },
61 +
    "manifestEntry": {
62 +
      "type": "object",
63 +
      "required": [
64 +
        "icaoHex"
65 +
      ],
66 +
      "properties": {
67 +
        "icaoHex": {
68 +
          "type": "string",
69 +
          "maxLength": 6,
70 +
          "minLength": 6,
71 +
          "description": "ICAO 24-bit hex address (uppercased)."
72 +
        }
73 +
      },
74 +
      "description": "An aircraft observed in this batch window."
119 75
    }
120 76
  },
121 77
  "$type": "com.atproto.lexicon.schema",
122 78
  "lexicon": 1,
123 -
  "description": "A single receiver's sighting of an aircraft. Created when the aircraft leaves the receiver's coverage area. Feeder-authoritative — published immediately without waiting for the full flight to complete."
79 +
  "description": "A batch of aircraft observations from a single receiver covering a configurable time window (default 60 seconds). Contains a manifest of observed aircraft and blobbed telemetry data."
124 80
}

Compare Other Versions

Lexicon Garden

@