@disclosureos/schema 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2723 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://os.disclosure.org/schema/schema/1.0.0/enriched-observation.json",
4
+ "x-schema-version": "1.0.0",
5
+ "description": "A complete DisclosureOS observation: the records core enriched with observable assessments and origin classification. The portable contract across TypeScript, JSON Schema, and other languages.",
6
+ "$ref": "#/$defs/Observation",
7
+ "$defs": {
8
+ "FuzzyDate": {
9
+ "type": "object",
10
+ "properties": {
11
+ "value": {
12
+ "type": "string",
13
+ "description": "Machine-comparable anchor (ISO-like, as precise as known, e.g. `1947`, `1947-07`)."
14
+ },
15
+ "granularity": {
16
+ "type": "string",
17
+ "enum": [
18
+ "exact",
19
+ "month",
20
+ "quarter",
21
+ "year",
22
+ "decade",
23
+ "century",
24
+ "unknown"
25
+ ],
26
+ "description": "Precision of a date value, from calendar-day (`exact`) to `century`."
27
+ },
28
+ "certainty": {
29
+ "type": "string",
30
+ "enum": [
31
+ "exact",
32
+ "approximate",
33
+ "estimated",
34
+ "unknown"
35
+ ],
36
+ "description": "Confidence in a date or time value — the single certainty scale for all temporal values."
37
+ },
38
+ "quarter": {
39
+ "description": "Calendar quarter (1–4) when granularity is `quarter`.",
40
+ "anyOf": [
41
+ {
42
+ "type": "number",
43
+ "const": 1
44
+ },
45
+ {
46
+ "type": "number",
47
+ "const": 2
48
+ },
49
+ {
50
+ "type": "number",
51
+ "const": 3
52
+ },
53
+ {
54
+ "type": "number",
55
+ "const": 4
56
+ }
57
+ ]
58
+ },
59
+ "display": {
60
+ "description": "Human display override, e.g. \"Summer 1947\".",
61
+ "type": "string"
62
+ },
63
+ "notes": {
64
+ "description": "Free-text caveats about how this date was determined.",
65
+ "type": "string"
66
+ }
67
+ },
68
+ "required": [
69
+ "value",
70
+ "granularity",
71
+ "certainty"
72
+ ],
73
+ "additionalProperties": false
74
+ },
75
+ "DateRange": {
76
+ "type": "object",
77
+ "properties": {
78
+ "start": {
79
+ "description": "A date whose precision is coarser than a calendar day (e.g. \"summer 1947\").",
80
+ "$ref": "#/$defs/FuzzyDate"
81
+ },
82
+ "end": {
83
+ "description": "A date whose precision is coarser than a calendar day (e.g. \"summer 1947\").",
84
+ "$ref": "#/$defs/FuzzyDate"
85
+ },
86
+ "type": {
87
+ "type": "string",
88
+ "enum": [
89
+ "span",
90
+ "uncertainty",
91
+ "active_period",
92
+ "investigation_period",
93
+ "observation_window"
94
+ ],
95
+ "description": "What a DateRange represents (a true span vs. an uncertainty window, etc.)."
96
+ },
97
+ "display": {
98
+ "description": "Human display override, e.g. \"July–August 1952\".",
99
+ "type": "string"
100
+ },
101
+ "inclusive": {
102
+ "description": "Whether the end date is included in the range. Defaults to true.",
103
+ "type": "boolean"
104
+ }
105
+ },
106
+ "required": [
107
+ "start",
108
+ "end",
109
+ "type"
110
+ ],
111
+ "additionalProperties": false
112
+ },
113
+ "RelativeDate": {
114
+ "type": "object",
115
+ "properties": {
116
+ "referenceEvent": {
117
+ "type": "string",
118
+ "description": "The event this date is anchored to (e.g. \"the crash\")."
119
+ },
120
+ "referenceDate": {
121
+ "description": "A date whose precision is coarser than a calendar day (e.g. \"summer 1947\").",
122
+ "$ref": "#/$defs/FuzzyDate"
123
+ },
124
+ "relation": {
125
+ "type": "string",
126
+ "enum": [
127
+ "before",
128
+ "after",
129
+ "during",
130
+ "around"
131
+ ],
132
+ "description": "How this date relates to the reference event."
133
+ },
134
+ "offset": {
135
+ "description": "Distance from the reference event (e.g. value 3, unit \"days\").",
136
+ "type": "object",
137
+ "properties": {
138
+ "value": {
139
+ "type": "number"
140
+ },
141
+ "unit": {
142
+ "type": "string",
143
+ "enum": [
144
+ "minutes",
145
+ "hours",
146
+ "days",
147
+ "weeks",
148
+ "months",
149
+ "years"
150
+ ]
151
+ },
152
+ "approximate": {
153
+ "type": "boolean"
154
+ }
155
+ },
156
+ "required": [
157
+ "value",
158
+ "unit"
159
+ ],
160
+ "additionalProperties": false
161
+ },
162
+ "display": {
163
+ "description": "Human display override, e.g. \"three days after the crash\".",
164
+ "type": "string"
165
+ }
166
+ },
167
+ "required": [
168
+ "referenceEvent",
169
+ "relation"
170
+ ],
171
+ "additionalProperties": false
172
+ },
173
+ "TemporalData": {
174
+ "type": "object",
175
+ "properties": {
176
+ "date": {
177
+ "type": "string",
178
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
179
+ "description": "Canonical, machine-sortable date anchor in ISO YYYY-MM-DD form. ALWAYS present, even when the true date is fuzzy or a range — set it to the best single representative. Express nuance via dateGranularity, dateRange, or relativeDate."
180
+ },
181
+ "dateCertainty": {
182
+ "type": "string",
183
+ "enum": [
184
+ "exact",
185
+ "approximate",
186
+ "estimated",
187
+ "unknown"
188
+ ],
189
+ "description": "Confidence in a date or time value — the single certainty scale for all temporal values."
190
+ },
191
+ "dateGranularity": {
192
+ "description": "Precision of `date`. Defaults to day-level when omitted (e.g. \"July 1947\" → date \"1947-07-01\", dateGranularity \"month\").",
193
+ "type": "string",
194
+ "enum": [
195
+ "exact",
196
+ "month",
197
+ "quarter",
198
+ "year",
199
+ "decade",
200
+ "century",
201
+ "unknown"
202
+ ]
203
+ },
204
+ "time": {
205
+ "description": "Local clock time of the observation (HH:MM or HH:MM:SS, 24-hour).",
206
+ "type": "string"
207
+ },
208
+ "timezone": {
209
+ "description": "IANA timezone of the local time (e.g. \"America/Los_Angeles\").",
210
+ "type": "string"
211
+ },
212
+ "utcTime": {
213
+ "description": "Observation time converted to UTC, when known.",
214
+ "type": "string"
215
+ },
216
+ "timeCertainty": {
217
+ "type": "string",
218
+ "enum": [
219
+ "exact",
220
+ "approximate",
221
+ "estimated",
222
+ "unknown"
223
+ ],
224
+ "description": "Confidence in a date or time value — the single certainty scale for all temporal values."
225
+ },
226
+ "durationSeconds": {
227
+ "description": "How long the observation lasted, in seconds.",
228
+ "type": "number"
229
+ },
230
+ "durationDescription": {
231
+ "description": "Duration as reported when not precisely known (e.g. \"several minutes\").",
232
+ "type": "string"
233
+ },
234
+ "timeOfDay": {
235
+ "type": "string",
236
+ "enum": [
237
+ "astronomical_dawn",
238
+ "nautical_dawn",
239
+ "civil_dawn",
240
+ "sunrise",
241
+ "morning",
242
+ "noon",
243
+ "afternoon",
244
+ "sunset",
245
+ "civil_dusk",
246
+ "nautical_dusk",
247
+ "astronomical_dusk",
248
+ "night",
249
+ "unknown"
250
+ ],
251
+ "description": "Twilight-aware time-of-day bucket for an observation."
252
+ },
253
+ "isDaylightSaving": {
254
+ "description": "Whether daylight saving time was in effect at the local time.",
255
+ "type": "boolean"
256
+ },
257
+ "moonPhase": {
258
+ "description": "Moon phase at the time of observation (0 = new moon, 0.5 = full, 1 = new).",
259
+ "type": "number"
260
+ },
261
+ "moonIllumination": {
262
+ "description": "Fraction of the moon illuminated at the time of observation (0–1).",
263
+ "type": "number"
264
+ },
265
+ "dateRange": {
266
+ "description": "For events spanning a period or with a genuine uncertainty window. `date` should still anchor within/at the range.",
267
+ "$ref": "#/$defs/DateRange"
268
+ },
269
+ "relativeDate": {
270
+ "description": "For dates known only relative to another event (e.g. \"3 days after the crash\").",
271
+ "$ref": "#/$defs/RelativeDate"
272
+ }
273
+ },
274
+ "required": [
275
+ "date",
276
+ "dateCertainty"
277
+ ],
278
+ "additionalProperties": false
279
+ },
280
+ "ProximitySite": {
281
+ "type": "object",
282
+ "properties": {
283
+ "siteType": {
284
+ "type": "string",
285
+ "enum": [
286
+ "military_air_base",
287
+ "military_naval_base",
288
+ "military_army_base",
289
+ "military_missile_site",
290
+ "military_radar_station",
291
+ "military_research_facility",
292
+ "military_training_area",
293
+ "military_other",
294
+ "nuclear_power_plant",
295
+ "nuclear_weapons_storage",
296
+ "nuclear_research_facility",
297
+ "nuclear_waste_storage",
298
+ "nuclear_other",
299
+ "civilian_airport",
300
+ "private_airfield",
301
+ "heliport",
302
+ "seaport",
303
+ "offshore_platform",
304
+ "naval_vessel",
305
+ "government_facility",
306
+ "embassy",
307
+ "intelligence_facility",
308
+ "power_plant",
309
+ "dam",
310
+ "telecommunications",
311
+ "water_treatment",
312
+ "research_facility",
313
+ "test_range",
314
+ "space_station",
315
+ "archaeological_site",
316
+ "volcano",
317
+ "command_center",
318
+ "residential",
319
+ "commercial",
320
+ "industrial",
321
+ "agricultural",
322
+ "wilderness",
323
+ "ocean",
324
+ "lake",
325
+ "mountain",
326
+ "desert",
327
+ "forest",
328
+ "urban",
329
+ "suburban",
330
+ "rural",
331
+ "other",
332
+ "unknown"
333
+ ],
334
+ "description": "Category of site at or near the observation location (military, nuclear, civilian, natural, etc.)."
335
+ },
336
+ "siteName": {
337
+ "description": "Name of the nearby site (e.g. \"Naval Air Station Oceana\").",
338
+ "type": "string"
339
+ },
340
+ "distanceKm": {
341
+ "type": "number",
342
+ "description": "Distance from the observation location, in kilometers."
343
+ },
344
+ "bearing": {
345
+ "description": "Compass bearing from the observation location to the site, in degrees (0–360).",
346
+ "type": "number"
347
+ }
348
+ },
349
+ "required": [
350
+ "siteType",
351
+ "distanceKm"
352
+ ],
353
+ "additionalProperties": false
354
+ },
355
+ "LocationData": {
356
+ "type": "object",
357
+ "properties": {
358
+ "id": {
359
+ "type": "string",
360
+ "minLength": 1,
361
+ "description": "Stable unique identifier for this location."
362
+ },
363
+ "name": {
364
+ "type": "string",
365
+ "minLength": 1,
366
+ "description": "Human-readable place name (e.g. \"Off the coast of San Diego\")."
367
+ },
368
+ "country": {
369
+ "type": "string",
370
+ "minLength": 1,
371
+ "description": "Country where the observation occurred."
372
+ },
373
+ "countryCode": {
374
+ "description": "ISO 3166-1 alpha-2 country code (e.g. \"US\").",
375
+ "type": "string"
376
+ },
377
+ "region": {
378
+ "description": "State, province, or administrative region.",
379
+ "type": "string"
380
+ },
381
+ "city": {
382
+ "description": "Nearest city or town.",
383
+ "type": "string"
384
+ },
385
+ "address": {
386
+ "description": "Street address, when the location is that precise.",
387
+ "type": "string"
388
+ },
389
+ "longitude": {
390
+ "type": "number",
391
+ "minimum": -180,
392
+ "maximum": 180,
393
+ "description": "Longitude in decimal degrees (WGS 84)."
394
+ },
395
+ "latitude": {
396
+ "type": "number",
397
+ "minimum": -90,
398
+ "maximum": 90,
399
+ "description": "Latitude in decimal degrees (WGS 84)."
400
+ },
401
+ "coordinatePrecision": {
402
+ "type": "string",
403
+ "enum": [
404
+ "exact",
405
+ "address",
406
+ "locality",
407
+ "region",
408
+ "approximate",
409
+ "unknown"
410
+ ],
411
+ "description": "How precisely a coordinate is known."
412
+ },
413
+ "coordinatePrecisionMeters": {
414
+ "description": "Numeric uncertainty radius of the coordinates, in meters.",
415
+ "type": "number"
416
+ },
417
+ "coordinatesApproximate": {
418
+ "description": "Whether the coordinates are an approximation rather than a measured fix.",
419
+ "type": "boolean"
420
+ },
421
+ "elevationMeters": {
422
+ "description": "Ground elevation at the location, in meters above sea level.",
423
+ "type": "number"
424
+ },
425
+ "elevationSource": {
426
+ "description": "How the elevation value was obtained.",
427
+ "type": "string",
428
+ "enum": [
429
+ "gps",
430
+ "map",
431
+ "estimated",
432
+ "unknown"
433
+ ]
434
+ },
435
+ "siteType": {
436
+ "type": "string",
437
+ "enum": [
438
+ "military_air_base",
439
+ "military_naval_base",
440
+ "military_army_base",
441
+ "military_missile_site",
442
+ "military_radar_station",
443
+ "military_research_facility",
444
+ "military_training_area",
445
+ "military_other",
446
+ "nuclear_power_plant",
447
+ "nuclear_weapons_storage",
448
+ "nuclear_research_facility",
449
+ "nuclear_waste_storage",
450
+ "nuclear_other",
451
+ "civilian_airport",
452
+ "private_airfield",
453
+ "heliport",
454
+ "seaport",
455
+ "offshore_platform",
456
+ "naval_vessel",
457
+ "government_facility",
458
+ "embassy",
459
+ "intelligence_facility",
460
+ "power_plant",
461
+ "dam",
462
+ "telecommunications",
463
+ "water_treatment",
464
+ "research_facility",
465
+ "test_range",
466
+ "space_station",
467
+ "archaeological_site",
468
+ "volcano",
469
+ "command_center",
470
+ "residential",
471
+ "commercial",
472
+ "industrial",
473
+ "agricultural",
474
+ "wilderness",
475
+ "ocean",
476
+ "lake",
477
+ "mountain",
478
+ "desert",
479
+ "forest",
480
+ "urban",
481
+ "suburban",
482
+ "rural",
483
+ "other",
484
+ "unknown"
485
+ ],
486
+ "description": "Category of site at or near the observation location (military, nuclear, civilian, natural, etc.)."
487
+ },
488
+ "secondarySiteTypes": {
489
+ "description": "Additional site categories that also apply to the location.",
490
+ "type": "array",
491
+ "items": {
492
+ "type": "string",
493
+ "enum": [
494
+ "military_air_base",
495
+ "military_naval_base",
496
+ "military_army_base",
497
+ "military_missile_site",
498
+ "military_radar_station",
499
+ "military_research_facility",
500
+ "military_training_area",
501
+ "military_other",
502
+ "nuclear_power_plant",
503
+ "nuclear_weapons_storage",
504
+ "nuclear_research_facility",
505
+ "nuclear_waste_storage",
506
+ "nuclear_other",
507
+ "civilian_airport",
508
+ "private_airfield",
509
+ "heliport",
510
+ "seaport",
511
+ "offshore_platform",
512
+ "naval_vessel",
513
+ "government_facility",
514
+ "embassy",
515
+ "intelligence_facility",
516
+ "power_plant",
517
+ "dam",
518
+ "telecommunications",
519
+ "water_treatment",
520
+ "research_facility",
521
+ "test_range",
522
+ "space_station",
523
+ "archaeological_site",
524
+ "volcano",
525
+ "command_center",
526
+ "residential",
527
+ "commercial",
528
+ "industrial",
529
+ "agricultural",
530
+ "wilderness",
531
+ "ocean",
532
+ "lake",
533
+ "mountain",
534
+ "desert",
535
+ "forest",
536
+ "urban",
537
+ "suburban",
538
+ "rural",
539
+ "other",
540
+ "unknown"
541
+ ],
542
+ "description": "Category of site at or near the observation location (military, nuclear, civilian, natural, etc.)."
543
+ }
544
+ },
545
+ "terrain": {
546
+ "type": "string",
547
+ "enum": [
548
+ "ocean",
549
+ "coastal",
550
+ "lake",
551
+ "river",
552
+ "wetland",
553
+ "plains",
554
+ "hills",
555
+ "mountains",
556
+ "desert",
557
+ "forest",
558
+ "jungle",
559
+ "tundra",
560
+ "arctic",
561
+ "urban",
562
+ "suburban",
563
+ "rural",
564
+ "underground",
565
+ "underwater",
566
+ "airborne",
567
+ "space",
568
+ "unknown"
569
+ ],
570
+ "description": "Physical terrain at the observation location."
571
+ },
572
+ "airspaceClass": {
573
+ "type": "string",
574
+ "enum": [
575
+ "A",
576
+ "B",
577
+ "C",
578
+ "D",
579
+ "E",
580
+ "G",
581
+ "restricted",
582
+ "prohibited",
583
+ "warning",
584
+ "moa",
585
+ "alert",
586
+ "cfa",
587
+ "national_security",
588
+ "tfr",
589
+ "international",
590
+ "unknown"
591
+ ],
592
+ "description": "Airspace classification over the location (ICAO classes plus special-use airspace)."
593
+ },
594
+ "locationSensitivity": {
595
+ "type": "string",
596
+ "enum": [
597
+ "critical",
598
+ "high",
599
+ "moderate",
600
+ "standard",
601
+ "none"
602
+ ],
603
+ "description": "How sensitive the location is (e.g. proximity to critical infrastructure)."
604
+ },
605
+ "proximitySites": {
606
+ "description": "Named sites of interest near the observation, with distance and bearing.",
607
+ "type": "array",
608
+ "items": {
609
+ "description": "A site of interest near the observation and its distance/bearing.",
610
+ "$ref": "#/$defs/ProximitySite"
611
+ }
612
+ },
613
+ "nearestMilitaryKm": {
614
+ "description": "Distance to the nearest military installation, in kilometers.",
615
+ "type": "number"
616
+ },
617
+ "nearestNuclearKm": {
618
+ "description": "Distance to the nearest nuclear facility, in kilometers.",
619
+ "type": "number"
620
+ },
621
+ "nearestAirportKm": {
622
+ "description": "Distance to the nearest airport, in kilometers.",
623
+ "type": "number"
624
+ },
625
+ "waterDepthMeters": {
626
+ "description": "Water depth at the location for maritime observations, in meters.",
627
+ "type": "number"
628
+ },
629
+ "vesselName": {
630
+ "description": "Name of the vessel the observer was aboard, if any.",
631
+ "type": "string"
632
+ },
633
+ "vesselType": {
634
+ "description": "Type of vessel (e.g. \"aircraft carrier\", \"fishing trawler\").",
635
+ "type": "string"
636
+ },
637
+ "aircraftType": {
638
+ "description": "Type of aircraft the observer was aboard, if any.",
639
+ "type": "string"
640
+ },
641
+ "aircraftCallsign": {
642
+ "description": "Callsign of the observer’s aircraft.",
643
+ "type": "string"
644
+ },
645
+ "flightNumber": {
646
+ "description": "Commercial flight number, for airline observations.",
647
+ "type": "string"
648
+ },
649
+ "observerAltitudeMeters": {
650
+ "description": "Altitude of an airborne observer at the time of observation, in meters.",
651
+ "type": "number"
652
+ }
653
+ },
654
+ "required": [
655
+ "id",
656
+ "name",
657
+ "country",
658
+ "longitude",
659
+ "latitude",
660
+ "siteType"
661
+ ],
662
+ "additionalProperties": false
663
+ },
664
+ "ObjectCharacteristics": {
665
+ "type": "object",
666
+ "properties": {
667
+ "shape": {
668
+ "type": "string",
669
+ "enum": [
670
+ "sphere",
671
+ "orb",
672
+ "disc",
673
+ "saucer",
674
+ "oval",
675
+ "egg",
676
+ "cylinder",
677
+ "cigar",
678
+ "tic_tac",
679
+ "triangle",
680
+ "delta",
681
+ "boomerang",
682
+ "chevron",
683
+ "diamond",
684
+ "rectangle",
685
+ "square",
686
+ "cube",
687
+ "cross",
688
+ "star",
689
+ "amorphous",
690
+ "changing",
691
+ "light_only",
692
+ "other",
693
+ "unknown"
694
+ ],
695
+ "description": "Reported shape of the observed object."
696
+ },
697
+ "size": {
698
+ "description": "Apparent size as reported (e.g. \"size of a commercial airliner\").",
699
+ "type": "string"
700
+ },
701
+ "sizeMeters": {
702
+ "description": "Estimated size of the object, in meters.",
703
+ "type": "number"
704
+ },
705
+ "color": {
706
+ "description": "Primary color of the object as reported.",
707
+ "type": "string"
708
+ },
709
+ "secondaryColors": {
710
+ "description": "Additional colors observed on the object.",
711
+ "type": "array",
712
+ "items": {
713
+ "type": "string"
714
+ }
715
+ },
716
+ "luminosity": {
717
+ "description": "Light emission as reported (e.g. \"glowing white\", \"self-luminous\", \"no lights\").",
718
+ "type": "string"
719
+ },
720
+ "sound": {
721
+ "description": "Whether and what sound the object produced (e.g. \"silent\", \"humming\").",
722
+ "type": "string"
723
+ },
724
+ "soundDescription": {
725
+ "description": "Fuller free-text description of any sound.",
726
+ "type": "string"
727
+ },
728
+ "surfaceDetails": {
729
+ "description": "Visible surface features (e.g. \"metallic, seamless, no rivets or seams\").",
730
+ "type": "string"
731
+ },
732
+ "numberObserved": {
733
+ "description": "How many objects were observed.",
734
+ "type": "number"
735
+ },
736
+ "formation": {
737
+ "description": "Geometric arrangement when multiple objects were observed (e.g. \"triangular formation\").",
738
+ "type": "string"
739
+ },
740
+ "structuralFeatures": {
741
+ "description": "Distinct structural elements reported (e.g. \"dome\", \"portholes\", \"appendages\").",
742
+ "type": "array",
743
+ "items": {
744
+ "type": "string"
745
+ }
746
+ }
747
+ },
748
+ "additionalProperties": false
749
+ },
750
+ "SourceReference": {
751
+ "type": "object",
752
+ "properties": {
753
+ "sourceId": {
754
+ "type": "string",
755
+ "description": "Stable unique identifier for this source."
756
+ },
757
+ "type": {
758
+ "type": "string",
759
+ "enum": [
760
+ "foia",
761
+ "official_report",
762
+ "official_statement",
763
+ "congressional_testimony",
764
+ "congressional_report",
765
+ "military_document",
766
+ "intelligence_document",
767
+ "whistleblower",
768
+ "firsthand_witness",
769
+ "secondhand_account",
770
+ "news_article",
771
+ "documentary",
772
+ "interview",
773
+ "book",
774
+ "academic_paper",
775
+ "investigation_report",
776
+ "database_entry",
777
+ "social_media",
778
+ "website",
779
+ "other"
780
+ ],
781
+ "description": "Kind of source backing an observation (document, testimony, media, etc.)."
782
+ },
783
+ "title": {
784
+ "type": "string",
785
+ "description": "Title of the source document, article, or material."
786
+ },
787
+ "author": {
788
+ "description": "Author of the source material.",
789
+ "type": "string"
790
+ },
791
+ "organization": {
792
+ "description": "Organization that produced or published the source.",
793
+ "type": "string"
794
+ },
795
+ "date": {
796
+ "description": "Publication or creation date of the source (ISO date).",
797
+ "type": "string"
798
+ },
799
+ "url": {
800
+ "description": "Link to the source material.",
801
+ "type": "string"
802
+ },
803
+ "archiveUrl": {
804
+ "description": "Archived copy of the source (e.g. Wayback Machine), in case the original disappears.",
805
+ "type": "string"
806
+ },
807
+ "reference": {
808
+ "description": "Citation locator within the source (e.g. page number, document section).",
809
+ "type": "string"
810
+ },
811
+ "credibility": {
812
+ "type": "string",
813
+ "enum": [
814
+ "official",
815
+ "verified",
816
+ "credible",
817
+ "unverified",
818
+ "questionable",
819
+ "disputed",
820
+ "unknown"
821
+ ],
822
+ "description": "Trust tier of a source — an orthogonal axis to confidence and temporal certainty."
823
+ },
824
+ "isPrimarySource": {
825
+ "description": "Whether this is a primary source (original document/recording) rather than secondary reporting.",
826
+ "type": "boolean"
827
+ },
828
+ "classificationLevel": {
829
+ "description": "Government classification of the source, if it was ever classified.",
830
+ "type": "string"
831
+ },
832
+ "notes": {
833
+ "description": "Free-text context about the source.",
834
+ "type": "string"
835
+ }
836
+ },
837
+ "required": [
838
+ "sourceId",
839
+ "type",
840
+ "title",
841
+ "credibility"
842
+ ],
843
+ "additionalProperties": false
844
+ },
845
+ "SourceData": {
846
+ "type": "object",
847
+ "properties": {
848
+ "primarySource": {
849
+ "description": "A citation/source backing an observation, with its credibility tier.",
850
+ "$ref": "#/$defs/SourceReference"
851
+ },
852
+ "sources": {
853
+ "type": "array",
854
+ "items": {
855
+ "description": "A citation/source backing an observation, with its credibility tier.",
856
+ "$ref": "#/$defs/SourceReference"
857
+ }
858
+ },
859
+ "originalClassification": {
860
+ "description": "Original government classification of the source material (e.g. \"SECRET\").",
861
+ "type": "string"
862
+ },
863
+ "declassificationDate": {
864
+ "description": "When the source material was declassified (ISO date).",
865
+ "type": "string"
866
+ },
867
+ "foiaRequestId": {
868
+ "description": "FOIA request number that produced the source material.",
869
+ "type": "string"
870
+ },
871
+ "archiveLocation": {
872
+ "description": "Physical or digital archive where the source material resides.",
873
+ "type": "string"
874
+ }
875
+ },
876
+ "additionalProperties": false
877
+ },
878
+ "Investigation": {
879
+ "type": "object",
880
+ "properties": {
881
+ "investigatingBody": {
882
+ "description": "Primary organization that investigated (e.g. \"AARO\", \"Project Blue Book\").",
883
+ "type": "string"
884
+ },
885
+ "investigatingBodies": {
886
+ "description": "All organizations that investigated, when more than one.",
887
+ "type": "array",
888
+ "items": {
889
+ "type": "string"
890
+ }
891
+ },
892
+ "caseNumber": {
893
+ "description": "Case or file number assigned by the investigating body.",
894
+ "type": "string"
895
+ },
896
+ "investigationDate": {
897
+ "description": "When the investigation was conducted (ISO date).",
898
+ "type": "string"
899
+ },
900
+ "conclusion": {
901
+ "description": "Official conclusion reached (e.g. \"unidentified\", \"weather balloon\").",
902
+ "type": "string"
903
+ },
904
+ "confidence": {
905
+ "type": "string",
906
+ "enum": [
907
+ "very_high",
908
+ "high",
909
+ "moderate",
910
+ "low",
911
+ "very_low",
912
+ "unassessed"
913
+ ],
914
+ "description": "Qualitative confidence magnitude."
915
+ },
916
+ "methodologies": {
917
+ "description": "Methods used (e.g. \"witness interviews\", \"radar data analysis\").",
918
+ "type": "array",
919
+ "items": {
920
+ "type": "string"
921
+ }
922
+ },
923
+ "findings": {
924
+ "description": "Summary of what the investigation found.",
925
+ "type": "string"
926
+ },
927
+ "recommendations": {
928
+ "description": "Recommendations issued by the investigation.",
929
+ "type": "string"
930
+ }
931
+ },
932
+ "additionalProperties": false
933
+ },
934
+ "Movement": {
935
+ "type": "object",
936
+ "properties": {
937
+ "speed": {
938
+ "description": "Speed as reported (e.g. \"faster than any known aircraft\").",
939
+ "type": "string"
940
+ },
941
+ "speedKmh": {
942
+ "description": "Estimated speed, in kilometers per hour.",
943
+ "type": "number"
944
+ },
945
+ "altitude": {
946
+ "description": "Altitude as reported (e.g. \"treetop level\", \"very high\").",
947
+ "type": "string"
948
+ },
949
+ "altitudeMeters": {
950
+ "description": "Estimated altitude of the object, in meters.",
951
+ "type": "number"
952
+ },
953
+ "heading": {
954
+ "description": "Direction of travel, in compass degrees (0–360).",
955
+ "type": "number"
956
+ },
957
+ "flightPath": {
958
+ "description": "Narrative of the object’s path through the encounter (e.g. \"descended from 80,000 ft to sea level\").",
959
+ "type": "string"
960
+ },
961
+ "maneuvers": {
962
+ "description": "Distinctive maneuvers exhibited, from the typed vocabulary.",
963
+ "type": "array",
964
+ "items": {
965
+ "type": "string",
966
+ "enum": [
967
+ "hover",
968
+ "instant_acceleration",
969
+ "instant_stop",
970
+ "right_angle_turn",
971
+ "zigzag",
972
+ "pendulum",
973
+ "split",
974
+ "merge",
975
+ "disappear",
976
+ "appear",
977
+ "transmedium_entry",
978
+ "transmedium_exit",
979
+ "vertical_ascent",
980
+ "vertical_descent",
981
+ "rotation",
982
+ "wobble",
983
+ "other"
984
+ ],
985
+ "description": "A distinctive movement/maneuver exhibited by the object."
986
+ }
987
+ },
988
+ "maneuverDescriptions": {
989
+ "description": "Free-text descriptions elaborating on the typed maneuvers.",
990
+ "type": "array",
991
+ "items": {
992
+ "type": "string"
993
+ }
994
+ },
995
+ "radarData": {
996
+ "description": "Whether the movement was tracked on radar.",
997
+ "type": "boolean"
998
+ },
999
+ "infraredSignature": {
1000
+ "description": "Whether the object showed an infrared signature.",
1001
+ "type": "boolean"
1002
+ },
1003
+ "trajectory": {
1004
+ "description": "Overall trajectory summary (e.g. \"erratic\", \"straight and level\").",
1005
+ "type": "string"
1006
+ }
1007
+ },
1008
+ "additionalProperties": false
1009
+ },
1010
+ "Witnesses": {
1011
+ "type": "object",
1012
+ "properties": {
1013
+ "count": {
1014
+ "description": "Total number of witnesses.",
1015
+ "type": "number"
1016
+ },
1017
+ "categories": {
1018
+ "description": "Kinds of witnesses present (e.g. \"military pilots\", \"radar operators\", \"civilians\").",
1019
+ "type": "array",
1020
+ "items": {
1021
+ "type": "string"
1022
+ }
1023
+ },
1024
+ "militaryWitnesses": {
1025
+ "description": "Whether any witnesses were military personnel.",
1026
+ "type": "boolean"
1027
+ },
1028
+ "aviationWitnesses": {
1029
+ "description": "Whether any witnesses were pilots or aviation professionals.",
1030
+ "type": "boolean"
1031
+ },
1032
+ "multipleIndependent": {
1033
+ "description": "Whether independent witnesses observed from separate vantage points.",
1034
+ "type": "boolean"
1035
+ },
1036
+ "professionalObservers": {
1037
+ "description": "Whether any witnesses were trained observers (pilots, astronomers, military).",
1038
+ "type": "boolean"
1039
+ },
1040
+ "descriptions": {
1041
+ "description": "Brief summaries of individual witness accounts.",
1042
+ "type": "array",
1043
+ "items": {
1044
+ "type": "string"
1045
+ }
1046
+ }
1047
+ },
1048
+ "additionalProperties": false
1049
+ },
1050
+ "SensorReading": {
1051
+ "type": "object",
1052
+ "properties": {
1053
+ "id": {
1054
+ "type": "string",
1055
+ "minLength": 1,
1056
+ "description": "Stable id, addressable by a claim `evidenceRef` (\"sensor:<id>\")."
1057
+ },
1058
+ "sensorType": {
1059
+ "type": "string",
1060
+ "enum": [
1061
+ "military_radar",
1062
+ "civilian_radar",
1063
+ "airborne_radar",
1064
+ "shipborne_radar",
1065
+ "ground_radar",
1066
+ "flir",
1067
+ "eo_sensor",
1068
+ "satellite",
1069
+ "sonar",
1070
+ "electromagnetic_sensor",
1071
+ "radiation_sensor",
1072
+ "civilian_camera",
1073
+ "security_camera",
1074
+ "dashcam",
1075
+ "phone_camera",
1076
+ "other"
1077
+ ],
1078
+ "description": "Class of sensor that produced a reading."
1079
+ },
1080
+ "detectionMethod": {
1081
+ "type": "string",
1082
+ "enum": [
1083
+ "radar_primary",
1084
+ "radar_secondary",
1085
+ "radar_doppler",
1086
+ "radar_phased_array",
1087
+ "infrared_flir",
1088
+ "infrared_other",
1089
+ "electro_optical",
1090
+ "visual_camera",
1091
+ "satellite_imagery",
1092
+ "sonar_active",
1093
+ "sonar_passive",
1094
+ "electromagnetic",
1095
+ "radiation_detector",
1096
+ "magnetometer",
1097
+ "gravimeter",
1098
+ "acoustic",
1099
+ "seismic",
1100
+ "lidar",
1101
+ "spectroscopic",
1102
+ "radio_frequency",
1103
+ "multiple",
1104
+ "other",
1105
+ "unknown"
1106
+ ],
1107
+ "description": "How a sensor detected the object."
1108
+ },
1109
+ "platform": {
1110
+ "description": "Platform carrying the sensor (e.g. \"USS Princeton\", \"F/A-18F\").",
1111
+ "type": "string"
1112
+ },
1113
+ "operator": {
1114
+ "description": "Person or unit operating the sensor.",
1115
+ "type": "string"
1116
+ },
1117
+ "timestamp": {
1118
+ "description": "When the reading was recorded (ISO timestamp).",
1119
+ "type": "string"
1120
+ },
1121
+ "duration": {
1122
+ "description": "How long the sensor held contact, in seconds.",
1123
+ "type": "number"
1124
+ },
1125
+ "rawDataAvailable": {
1126
+ "description": "Whether the raw sensor data still exists and is obtainable.",
1127
+ "type": "boolean"
1128
+ },
1129
+ "calibrated": {
1130
+ "description": "Whether the sensor was calibrated at the time of the reading.",
1131
+ "type": "boolean"
1132
+ },
1133
+ "readings": {
1134
+ "description": "Sensor-specific measured values, keyed by measurement name.",
1135
+ "type": "object",
1136
+ "propertyNames": {
1137
+ "type": "string"
1138
+ },
1139
+ "additionalProperties": {}
1140
+ },
1141
+ "notes": {
1142
+ "description": "Free-text context about the reading.",
1143
+ "type": "string"
1144
+ }
1145
+ },
1146
+ "required": [
1147
+ "id",
1148
+ "sensorType",
1149
+ "detectionMethod"
1150
+ ],
1151
+ "additionalProperties": false
1152
+ },
1153
+ "SensorEvidenceData": {
1154
+ "type": "object",
1155
+ "properties": {
1156
+ "sensors": {
1157
+ "type": "array",
1158
+ "items": {
1159
+ "description": "A single sensor reading and its provenance.",
1160
+ "$ref": "#/$defs/SensorReading"
1161
+ }
1162
+ },
1163
+ "multiSensorCorrelation": {
1164
+ "description": "Whether independent sensors corroborated the same object.",
1165
+ "type": "boolean"
1166
+ },
1167
+ "dataRetentionStatus": {
1168
+ "description": "Current status of the underlying sensor data.",
1169
+ "type": "string",
1170
+ "enum": [
1171
+ "available",
1172
+ "archived",
1173
+ "destroyed",
1174
+ "classified",
1175
+ "unknown"
1176
+ ]
1177
+ },
1178
+ "anomalies": {
1179
+ "description": "Anomalies in the sensor data itself (e.g. \"jamming indications\", \"signal dropout\").",
1180
+ "type": "array",
1181
+ "items": {
1182
+ "type": "string"
1183
+ }
1184
+ }
1185
+ },
1186
+ "required": [
1187
+ "sensors"
1188
+ ],
1189
+ "additionalProperties": false
1190
+ },
1191
+ "ResponseImpact": {
1192
+ "type": "object",
1193
+ "properties": {
1194
+ "officialResponse": {
1195
+ "description": "How officials responded (statements, denials, acknowledgments).",
1196
+ "type": "string"
1197
+ },
1198
+ "mediaAttention": {
1199
+ "description": "Whether the observation received media coverage.",
1200
+ "type": "boolean"
1201
+ },
1202
+ "publicImpact": {
1203
+ "description": "Effect on public awareness or discourse.",
1204
+ "type": "string"
1205
+ },
1206
+ "policyImpact": {
1207
+ "description": "Policy consequences (e.g. hearings, legislation, reporting-process changes).",
1208
+ "type": "string"
1209
+ },
1210
+ "militaryResponse": {
1211
+ "description": "Military actions taken (e.g. intercept scrambled, alert status changed).",
1212
+ "type": "string"
1213
+ },
1214
+ "coverUpAlleged": {
1215
+ "description": "Whether suppression or concealment of the event has been alleged.",
1216
+ "type": "boolean"
1217
+ }
1218
+ },
1219
+ "additionalProperties": false
1220
+ },
1221
+ "Environment": {
1222
+ "type": "object",
1223
+ "properties": {
1224
+ "weather": {
1225
+ "description": "General weather conditions (e.g. \"clear\", \"overcast\").",
1226
+ "type": "string"
1227
+ },
1228
+ "visibility": {
1229
+ "description": "Visibility conditions (e.g. \"unlimited\", \"10 miles\", \"hazy\").",
1230
+ "type": "string"
1231
+ },
1232
+ "cloudCover": {
1233
+ "description": "Cloud cover description (e.g. \"scattered at 5,000 ft\").",
1234
+ "type": "string"
1235
+ },
1236
+ "windSpeed": {
1237
+ "description": "Wind conditions as reported.",
1238
+ "type": "string"
1239
+ },
1240
+ "temperature": {
1241
+ "description": "Air temperature, in degrees Celsius.",
1242
+ "type": "number"
1243
+ },
1244
+ "humidity": {
1245
+ "description": "Relative humidity, as a percentage (0–100).",
1246
+ "type": "number"
1247
+ },
1248
+ "celestialConditions": {
1249
+ "description": "Sky conditions relevant to identification (e.g. visible planets, meteor showers, satellites).",
1250
+ "type": "string"
1251
+ },
1252
+ "moonPhase": {
1253
+ "description": "Moon phase description at the time of observation.",
1254
+ "type": "string"
1255
+ },
1256
+ "precipitation": {
1257
+ "description": "Precipitation at the time of observation, if any.",
1258
+ "type": "string"
1259
+ }
1260
+ },
1261
+ "additionalProperties": false
1262
+ },
1263
+ "RelationEdge": {
1264
+ "type": "object",
1265
+ "properties": {
1266
+ "kind": {
1267
+ "type": "string",
1268
+ "enum": [
1269
+ "corroborates",
1270
+ "contradicts",
1271
+ "duplicate_of",
1272
+ "same_object",
1273
+ "supersedes",
1274
+ "superseded_by",
1275
+ "re_analysis_of",
1276
+ "part_of"
1277
+ ],
1278
+ "description": "How one observation relates to another (typed edge vocabulary)."
1279
+ },
1280
+ "targetId": {
1281
+ "type": "string",
1282
+ "minLength": 1,
1283
+ "description": "The `Observation.id` this edge points at."
1284
+ },
1285
+ "note": {
1286
+ "description": "Free-text context for why the link exists.",
1287
+ "type": "string"
1288
+ }
1289
+ },
1290
+ "required": [
1291
+ "kind",
1292
+ "targetId"
1293
+ ],
1294
+ "additionalProperties": false
1295
+ },
1296
+ "Relations": {
1297
+ "type": "object",
1298
+ "properties": {
1299
+ "edges": {
1300
+ "description": "Typed edges to other observations — the standardized way to link records.",
1301
+ "type": "array",
1302
+ "items": {
1303
+ "description": "A typed link from this observation to another.",
1304
+ "$ref": "#/$defs/RelationEdge"
1305
+ }
1306
+ },
1307
+ "flap": {
1308
+ "description": "Named grouping into a flap (a localized cluster of sightings).",
1309
+ "type": "string"
1310
+ },
1311
+ "wave": {
1312
+ "description": "Named grouping into a wave (a broad temporal surge of sightings).",
1313
+ "type": "string"
1314
+ },
1315
+ "cluster": {
1316
+ "description": "Named grouping into an ad-hoc cluster.",
1317
+ "type": "string"
1318
+ },
1319
+ "relatedObservationIds": {
1320
+ "description": "Deprecated — use typed `edges` with `kind: \"corroborates\" | \"same_object\" | …`.",
1321
+ "type": "array",
1322
+ "items": {
1323
+ "type": "string"
1324
+ }
1325
+ },
1326
+ "precedingEvents": {
1327
+ "description": "Deprecated — use typed `edges` with `kind: \"supersedes\" | \"re_analysis_of\" | …`.",
1328
+ "type": "array",
1329
+ "items": {
1330
+ "type": "string"
1331
+ }
1332
+ },
1333
+ "followingEvents": {
1334
+ "description": "Deprecated — use typed `edges`.",
1335
+ "type": "array",
1336
+ "items": {
1337
+ "type": "string"
1338
+ }
1339
+ }
1340
+ },
1341
+ "additionalProperties": false
1342
+ },
1343
+ "Aviation": {
1344
+ "type": "object",
1345
+ "properties": {
1346
+ "aircraftType": {
1347
+ "description": "Type of aircraft involved (e.g. \"F/A-18F Super Hornet\").",
1348
+ "type": "string"
1349
+ },
1350
+ "aircraftDesignation": {
1351
+ "description": "Military designation or tail number of the aircraft.",
1352
+ "type": "string"
1353
+ },
1354
+ "squadron": {
1355
+ "description": "Squadron or unit the aircraft belonged to.",
1356
+ "type": "string"
1357
+ },
1358
+ "flightMission": {
1359
+ "description": "Mission being flown at the time (e.g. \"training exercise\", \"combat air patrol\").",
1360
+ "type": "string"
1361
+ },
1362
+ "altitude": {
1363
+ "description": "Aircraft altitude during the encounter, in meters.",
1364
+ "type": "number"
1365
+ },
1366
+ "speed": {
1367
+ "description": "Aircraft speed during the encounter, in kilometers per hour.",
1368
+ "type": "number"
1369
+ },
1370
+ "heading": {
1371
+ "description": "Aircraft heading during the encounter, in compass degrees (0–360).",
1372
+ "type": "number"
1373
+ },
1374
+ "radarContact": {
1375
+ "description": "Whether the aircraft’s radar held contact with the object.",
1376
+ "type": "boolean"
1377
+ },
1378
+ "weaponsSystemEngaged": {
1379
+ "description": "Whether a weapons system locked onto or tracked the object.",
1380
+ "type": "boolean"
1381
+ },
1382
+ "interceptAttempted": {
1383
+ "description": "Whether an intercept of the object was attempted.",
1384
+ "type": "boolean"
1385
+ }
1386
+ },
1387
+ "additionalProperties": false
1388
+ },
1389
+ "MediaAttachment": {
1390
+ "type": "object",
1391
+ "properties": {
1392
+ "id": {
1393
+ "type": "string",
1394
+ "minLength": 1,
1395
+ "description": "Stable id, addressable by a claim `evidenceRef` (\"media:<id>\")."
1396
+ },
1397
+ "type": {
1398
+ "type": "string",
1399
+ "enum": [
1400
+ "image",
1401
+ "video",
1402
+ "document",
1403
+ "audio"
1404
+ ],
1405
+ "description": "Kind of media attachment."
1406
+ },
1407
+ "url": {
1408
+ "type": "string",
1409
+ "description": "Where the media file is hosted."
1410
+ },
1411
+ "thumbnailUrl": {
1412
+ "description": "Preview/thumbnail image for the media.",
1413
+ "type": "string"
1414
+ },
1415
+ "caption": {
1416
+ "description": "Human-readable caption describing what the media shows.",
1417
+ "type": "string"
1418
+ },
1419
+ "credit": {
1420
+ "description": "Attribution for who captured or owns the media.",
1421
+ "type": "string"
1422
+ },
1423
+ "mimeType": {
1424
+ "description": "MIME type of the file (e.g. \"video/mp4\").",
1425
+ "type": "string"
1426
+ },
1427
+ "fileSize": {
1428
+ "description": "File size, in bytes.",
1429
+ "type": "number"
1430
+ },
1431
+ "duration": {
1432
+ "description": "Playback duration for video/audio, in seconds.",
1433
+ "type": "number"
1434
+ },
1435
+ "width": {
1436
+ "description": "Pixel width for images and video.",
1437
+ "type": "number"
1438
+ },
1439
+ "height": {
1440
+ "description": "Pixel height for images and video.",
1441
+ "type": "number"
1442
+ }
1443
+ },
1444
+ "required": [
1445
+ "id",
1446
+ "type",
1447
+ "url"
1448
+ ],
1449
+ "additionalProperties": false
1450
+ },
1451
+ "CustodyEntry": {
1452
+ "type": "object",
1453
+ "properties": {
1454
+ "entryId": {
1455
+ "type": "string",
1456
+ "description": "Stable unique identifier for this custody entry."
1457
+ },
1458
+ "date": {
1459
+ "type": "string",
1460
+ "description": "When the custody event occurred (ISO date)."
1461
+ },
1462
+ "action": {
1463
+ "type": "string",
1464
+ "enum": [
1465
+ "creation",
1466
+ "collection",
1467
+ "transfer",
1468
+ "storage",
1469
+ "analysis",
1470
+ "release",
1471
+ "classification",
1472
+ "destruction",
1473
+ "loss",
1474
+ "recovery",
1475
+ "other"
1476
+ ],
1477
+ "description": "An action recorded in a chain-of-custody entry."
1478
+ },
1479
+ "from": {
1480
+ "description": "Party that held the evidence before this event.",
1481
+ "type": "string"
1482
+ },
1483
+ "to": {
1484
+ "description": "Party that held the evidence after this event.",
1485
+ "type": "string"
1486
+ },
1487
+ "location": {
1488
+ "description": "Where the custody event took place.",
1489
+ "type": "string"
1490
+ },
1491
+ "reference": {
1492
+ "description": "Document or record substantiating the event (e.g. transfer receipt, log entry).",
1493
+ "type": "string"
1494
+ },
1495
+ "notes": {
1496
+ "description": "Free-text context about the event.",
1497
+ "type": "string"
1498
+ }
1499
+ },
1500
+ "required": [
1501
+ "entryId",
1502
+ "date",
1503
+ "action"
1504
+ ],
1505
+ "additionalProperties": false
1506
+ },
1507
+ "ChainOfCustodyRecord": {
1508
+ "type": "object",
1509
+ "properties": {
1510
+ "evidenceId": {
1511
+ "type": "string",
1512
+ "description": "Identifier of the evidence item this custody history belongs to."
1513
+ },
1514
+ "status": {
1515
+ "type": "string",
1516
+ "enum": [
1517
+ "verified",
1518
+ "partial",
1519
+ "unverified",
1520
+ "government_held",
1521
+ "private_held",
1522
+ "lost",
1523
+ "destroyed",
1524
+ "classified",
1525
+ "unknown"
1526
+ ],
1527
+ "description": "Custody status of an evidence item."
1528
+ },
1529
+ "entries": {
1530
+ "type": "array",
1531
+ "items": {
1532
+ "description": "A single custody event for an evidence item.",
1533
+ "$ref": "#/$defs/CustodyEntry"
1534
+ }
1535
+ }
1536
+ },
1537
+ "required": [
1538
+ "evidenceId",
1539
+ "status",
1540
+ "entries"
1541
+ ],
1542
+ "additionalProperties": false
1543
+ },
1544
+ "FileHash": {
1545
+ "type": "object",
1546
+ "properties": {
1547
+ "algorithm": {
1548
+ "type": "string",
1549
+ "enum": [
1550
+ "sha256",
1551
+ "sha512",
1552
+ "sha1",
1553
+ "md5"
1554
+ ],
1555
+ "description": "Cryptographic hash algorithm used to fingerprint a file."
1556
+ },
1557
+ "value": {
1558
+ "type": "string",
1559
+ "description": "Hex-encoded hash digest of the file contents."
1560
+ }
1561
+ },
1562
+ "required": [
1563
+ "algorithm",
1564
+ "value"
1565
+ ],
1566
+ "additionalProperties": false
1567
+ },
1568
+ "CaptureMetadata": {
1569
+ "type": "object",
1570
+ "properties": {
1571
+ "device": {
1572
+ "description": "Capture device as recorded in metadata (e.g. \"iPhone 14 Pro\").",
1573
+ "type": "string"
1574
+ },
1575
+ "manufacturer": {
1576
+ "description": "Device manufacturer from metadata.",
1577
+ "type": "string"
1578
+ },
1579
+ "model": {
1580
+ "description": "Device model from metadata.",
1581
+ "type": "string"
1582
+ },
1583
+ "software": {
1584
+ "description": "Software that produced or processed the file.",
1585
+ "type": "string"
1586
+ },
1587
+ "originalFilename": {
1588
+ "description": "Filename as originally captured, before any renaming.",
1589
+ "type": "string"
1590
+ },
1591
+ "originalCreationDate": {
1592
+ "description": "Creation timestamp embedded in the file metadata.",
1593
+ "type": "string"
1594
+ },
1595
+ "gpsCoordinates": {
1596
+ "description": "GPS position embedded in the file metadata.",
1597
+ "type": "object",
1598
+ "properties": {
1599
+ "latitude": {
1600
+ "type": "number"
1601
+ },
1602
+ "longitude": {
1603
+ "type": "number"
1604
+ },
1605
+ "altitude": {
1606
+ "type": "number"
1607
+ }
1608
+ },
1609
+ "required": [
1610
+ "latitude",
1611
+ "longitude"
1612
+ ],
1613
+ "additionalProperties": false
1614
+ },
1615
+ "metadataPreserved": {
1616
+ "description": "Whether the original metadata survives intact.",
1617
+ "type": "boolean"
1618
+ },
1619
+ "metadataStripped": {
1620
+ "description": "Whether metadata was removed at some point.",
1621
+ "type": "boolean"
1622
+ },
1623
+ "strippedReason": {
1624
+ "description": "Why metadata was stripped (e.g. \"platform re-encoding\", \"privacy redaction\").",
1625
+ "type": "string"
1626
+ }
1627
+ },
1628
+ "additionalProperties": false
1629
+ },
1630
+ "ThirdPartyVerification": {
1631
+ "type": "object",
1632
+ "properties": {
1633
+ "verifier": {
1634
+ "type": "string",
1635
+ "description": "Name of the person who performed the verification."
1636
+ },
1637
+ "organization": {
1638
+ "description": "Organization the verifier represents.",
1639
+ "type": "string"
1640
+ },
1641
+ "credentials": {
1642
+ "description": "Verifier’s relevant qualifications (e.g. \"certified forensic video analyst\").",
1643
+ "type": "string"
1644
+ },
1645
+ "date": {
1646
+ "type": "string",
1647
+ "description": "When the verification was performed (ISO date)."
1648
+ },
1649
+ "method": {
1650
+ "type": "string",
1651
+ "enum": [
1652
+ "metadata_analysis",
1653
+ "forensic_analysis",
1654
+ "hash_verification",
1655
+ "chain_of_custody",
1656
+ "source_confirmation",
1657
+ "expert_review",
1658
+ "ai_analysis",
1659
+ "other"
1660
+ ],
1661
+ "description": "Method used to verify media authenticity."
1662
+ },
1663
+ "methodDescription": {
1664
+ "description": "Fuller description of how the verification was performed.",
1665
+ "type": "string"
1666
+ },
1667
+ "result": {
1668
+ "type": "string",
1669
+ "enum": [
1670
+ "authentic",
1671
+ "likely_authentic",
1672
+ "inconclusive",
1673
+ "likely_manipulated",
1674
+ "manipulated",
1675
+ "ai_generated",
1676
+ "deepfake",
1677
+ "composite",
1678
+ "unknown"
1679
+ ],
1680
+ "description": "Outcome of an authenticity verification."
1681
+ },
1682
+ "confidence": {
1683
+ "description": "Verifier’s confidence in their own result.",
1684
+ "type": "string",
1685
+ "enum": [
1686
+ "high",
1687
+ "medium",
1688
+ "low"
1689
+ ]
1690
+ },
1691
+ "findings": {
1692
+ "description": "Summary of what the verification found.",
1693
+ "type": "string"
1694
+ },
1695
+ "reportUrl": {
1696
+ "description": "Link to the full verification report.",
1697
+ "type": "string"
1698
+ }
1699
+ },
1700
+ "required": [
1701
+ "verifier",
1702
+ "date",
1703
+ "method",
1704
+ "result"
1705
+ ],
1706
+ "additionalProperties": false
1707
+ },
1708
+ "DigitalProvenance": {
1709
+ "type": "object",
1710
+ "properties": {
1711
+ "hash": {
1712
+ "description": "A content hash of a file.",
1713
+ "$ref": "#/$defs/FileHash"
1714
+ },
1715
+ "additionalHashes": {
1716
+ "type": "array",
1717
+ "items": {
1718
+ "description": "A content hash of a file.",
1719
+ "$ref": "#/$defs/FileHash"
1720
+ }
1721
+ },
1722
+ "captureMetadata": {
1723
+ "description": "Capture/EXIF-style metadata extracted from a media file.",
1724
+ "$ref": "#/$defs/CaptureMetadata"
1725
+ },
1726
+ "verifications": {
1727
+ "type": "array",
1728
+ "items": {
1729
+ "description": "An independent authenticity assessment of media or a document.",
1730
+ "$ref": "#/$defs/ThirdPartyVerification"
1731
+ }
1732
+ },
1733
+ "provenanceChain": {
1734
+ "description": "Ordered hops the file took from capture to here (e.g. \"witness phone → NYT → public release\").",
1735
+ "type": "array",
1736
+ "items": {
1737
+ "type": "string"
1738
+ }
1739
+ },
1740
+ "manipulationDetected": {
1741
+ "description": "Whether any analysis found evidence of manipulation.",
1742
+ "type": "boolean"
1743
+ },
1744
+ "manipulationDescription": {
1745
+ "description": "What manipulation was found, if any.",
1746
+ "type": "string"
1747
+ },
1748
+ "authenticityAssessment": {
1749
+ "type": "string",
1750
+ "enum": [
1751
+ "authentic",
1752
+ "likely_authentic",
1753
+ "inconclusive",
1754
+ "likely_manipulated",
1755
+ "manipulated",
1756
+ "ai_generated",
1757
+ "deepfake",
1758
+ "composite",
1759
+ "unknown"
1760
+ ],
1761
+ "description": "Outcome of an authenticity verification."
1762
+ },
1763
+ "authenticityConfidence": {
1764
+ "description": "Overall confidence in the authenticity assessment.",
1765
+ "type": "string",
1766
+ "enum": [
1767
+ "high",
1768
+ "medium",
1769
+ "low",
1770
+ "unassessed"
1771
+ ]
1772
+ },
1773
+ "lastUpdated": {
1774
+ "description": "When this provenance record was last updated (ISO timestamp).",
1775
+ "type": "string"
1776
+ },
1777
+ "notes": {
1778
+ "description": "Free-text context about the provenance trail.",
1779
+ "type": "string"
1780
+ }
1781
+ },
1782
+ "additionalProperties": false
1783
+ },
1784
+ "Provenance": {
1785
+ "type": "object",
1786
+ "properties": {
1787
+ "custodyStatus": {
1788
+ "type": "string",
1789
+ "enum": [
1790
+ "verified",
1791
+ "partial",
1792
+ "unverified",
1793
+ "government_held",
1794
+ "private_held",
1795
+ "lost",
1796
+ "destroyed",
1797
+ "classified",
1798
+ "unknown"
1799
+ ],
1800
+ "description": "Custody status of an evidence item."
1801
+ },
1802
+ "custody": {
1803
+ "description": "The full custody history for a piece of evidence.",
1804
+ "$ref": "#/$defs/ChainOfCustodyRecord"
1805
+ },
1806
+ "digital": {
1807
+ "description": "Digital authenticity trail for media: hashes, capture metadata, and verifications.",
1808
+ "$ref": "#/$defs/DigitalProvenance"
1809
+ }
1810
+ },
1811
+ "additionalProperties": false
1812
+ },
1813
+ "ExternalIdentifier": {
1814
+ "type": "object",
1815
+ "properties": {
1816
+ "system": {
1817
+ "type": "string",
1818
+ "enum": [
1819
+ "nuforc",
1820
+ "mufon",
1821
+ "geipan",
1822
+ "cufos",
1823
+ "nicap",
1824
+ "bluebook",
1825
+ "nara",
1826
+ "foia",
1827
+ "aaro",
1828
+ "congress",
1829
+ "doi",
1830
+ "arxiv",
1831
+ "orcid",
1832
+ "pubmed",
1833
+ "isbn",
1834
+ "issn",
1835
+ "youtube",
1836
+ "vimeo",
1837
+ "internet_archive",
1838
+ "wayback",
1839
+ "url",
1840
+ "uri",
1841
+ "custom"
1842
+ ],
1843
+ "description": "External identifier namespace (reporting centers, archives, academic registries, media hosts)."
1844
+ },
1845
+ "systemName": {
1846
+ "description": "Display name of the system, required when `system` is \"custom\".",
1847
+ "type": "string"
1848
+ },
1849
+ "value": {
1850
+ "type": "string",
1851
+ "description": "The identifier value within the external system (e.g. a case number)."
1852
+ },
1853
+ "url": {
1854
+ "description": "Direct link to the record in the external system.",
1855
+ "type": "string"
1856
+ },
1857
+ "verified": {
1858
+ "description": "Whether the identifier has been confirmed to point at this observation.",
1859
+ "type": "boolean"
1860
+ },
1861
+ "verifiedDate": {
1862
+ "description": "When the identifier was last verified (ISO date).",
1863
+ "type": "string"
1864
+ },
1865
+ "accessible": {
1866
+ "description": "Whether the external record is currently reachable.",
1867
+ "type": "boolean"
1868
+ },
1869
+ "accessCheckedDate": {
1870
+ "description": "When accessibility was last checked (ISO date).",
1871
+ "type": "string"
1872
+ },
1873
+ "notes": {
1874
+ "description": "Free-text context about the cross-reference.",
1875
+ "type": "string"
1876
+ }
1877
+ },
1878
+ "required": [
1879
+ "system",
1880
+ "value"
1881
+ ],
1882
+ "additionalProperties": false
1883
+ },
1884
+ "CrossReferences": {
1885
+ "type": "object",
1886
+ "properties": {
1887
+ "primary": {
1888
+ "description": "A reference to this observation in an external system or archive.",
1889
+ "$ref": "#/$defs/ExternalIdentifier"
1890
+ },
1891
+ "identifiers": {
1892
+ "type": "array",
1893
+ "items": {
1894
+ "description": "A reference to this observation in an external system or archive.",
1895
+ "$ref": "#/$defs/ExternalIdentifier"
1896
+ }
1897
+ }
1898
+ },
1899
+ "required": [
1900
+ "identifiers"
1901
+ ],
1902
+ "additionalProperties": false
1903
+ },
1904
+ "WitnessCredibility": {
1905
+ "type": "object",
1906
+ "properties": {
1907
+ "rating": {
1908
+ "type": "string",
1909
+ "enum": [
1910
+ "very_high",
1911
+ "high",
1912
+ "moderate",
1913
+ "low",
1914
+ "very_low",
1915
+ "unassessed"
1916
+ ],
1917
+ "description": "Qualitative confidence magnitude."
1918
+ },
1919
+ "factors": {
1920
+ "type": "array",
1921
+ "items": {
1922
+ "type": "string",
1923
+ "enum": [
1924
+ "professional_training",
1925
+ "official_capacity",
1926
+ "sworn_statement",
1927
+ "contemporaneous_record",
1928
+ "corroborating_witnesses",
1929
+ "corroborating_evidence",
1930
+ "consistent_account",
1931
+ "no_apparent_motive",
1932
+ "reputation_risk",
1933
+ "security_clearance"
1934
+ ],
1935
+ "description": "A factor strengthening witness credibility."
1936
+ }
1937
+ },
1938
+ "detractors": {
1939
+ "type": "array",
1940
+ "items": {
1941
+ "type": "string",
1942
+ "enum": [
1943
+ "anonymous",
1944
+ "inconsistent_account",
1945
+ "delayed_report",
1946
+ "known_fabricator",
1947
+ "financial_motive",
1948
+ "single_witness",
1949
+ "impaired_state",
1950
+ "recovered_memory"
1951
+ ],
1952
+ "description": "A factor weakening witness credibility."
1953
+ }
1954
+ },
1955
+ "isProfessionalObserver": {
1956
+ "description": "Whether the witness is a trained observer (pilot, astronomer, military).",
1957
+ "type": "boolean"
1958
+ },
1959
+ "hasAviationExperience": {
1960
+ "description": "Whether the witness has aviation experience.",
1961
+ "type": "boolean"
1962
+ },
1963
+ "hasMilitaryExperience": {
1964
+ "description": "Whether the witness has military experience.",
1965
+ "type": "boolean"
1966
+ },
1967
+ "hasScientificBackground": {
1968
+ "description": "Whether the witness has a scientific background.",
1969
+ "type": "boolean"
1970
+ },
1971
+ "hasPriorUAPKnowledge": {
1972
+ "description": "Whether the witness had prior knowledge of or interest in UAP before the observation.",
1973
+ "type": "boolean"
1974
+ },
1975
+ "wasSkepticPrior": {
1976
+ "description": "Whether the witness was a skeptic before the observation.",
1977
+ "type": "boolean"
1978
+ },
1979
+ "underOathTestimony": {
1980
+ "description": "Whether the testimony was given under oath.",
1981
+ "type": "boolean"
1982
+ },
1983
+ "polygraphAdministered": {
1984
+ "description": "Whether a polygraph was administered.",
1985
+ "type": "boolean"
1986
+ },
1987
+ "polygraphPassed": {
1988
+ "description": "Whether the witness passed the polygraph.",
1989
+ "type": "boolean"
1990
+ },
1991
+ "consistentTestimony": {
1992
+ "description": "Whether the account has remained consistent across retellings.",
1993
+ "type": "boolean"
1994
+ },
1995
+ "willingToBeIdentified": {
1996
+ "description": "Whether the witness is willing to be publicly identified.",
1997
+ "type": "boolean"
1998
+ },
1999
+ "notes": {
2000
+ "description": "Free-text context about the credibility assessment.",
2001
+ "type": "string"
2002
+ }
2003
+ },
2004
+ "additionalProperties": false
2005
+ },
2006
+ "Witness": {
2007
+ "type": "object",
2008
+ "properties": {
2009
+ "witnessId": {
2010
+ "type": "string",
2011
+ "description": "Stable unique identifier for this witness."
2012
+ },
2013
+ "category": {
2014
+ "type": "string",
2015
+ "enum": [
2016
+ "military_pilot",
2017
+ "military_aircrew",
2018
+ "military_ground",
2019
+ "military_naval",
2020
+ "military_radar_operator",
2021
+ "military_other",
2022
+ "commercial_pilot",
2023
+ "commercial_aircrew",
2024
+ "private_pilot",
2025
+ "air_traffic_controller",
2026
+ "aviation_other",
2027
+ "government_official",
2028
+ "elected_official",
2029
+ "intelligence_officer",
2030
+ "law_enforcement",
2031
+ "scientist",
2032
+ "astronomer",
2033
+ "meteorologist",
2034
+ "engineer",
2035
+ "medical_professional",
2036
+ "maritime",
2037
+ "civilian",
2038
+ "civilian_group",
2039
+ "anonymous",
2040
+ "unknown"
2041
+ ],
2042
+ "description": "Professional/role category of a witness."
2043
+ },
2044
+ "anonymous": {
2045
+ "type": "boolean",
2046
+ "description": "Whether the witness’s identity is withheld."
2047
+ },
2048
+ "publicName": {
2049
+ "description": "Witness’s name as publicly known, when not anonymous.",
2050
+ "type": "string"
2051
+ },
2052
+ "pseudonym": {
2053
+ "description": "Pseudonym used when the witness is anonymous.",
2054
+ "type": "string"
2055
+ },
2056
+ "role": {
2057
+ "description": "Witness’s role at the time (e.g. \"F/A-18F pilot\", \"radar operator\").",
2058
+ "type": "string"
2059
+ },
2060
+ "organization": {
2061
+ "description": "Organization the witness belonged to at the time.",
2062
+ "type": "string"
2063
+ },
2064
+ "experienceYears": {
2065
+ "description": "Years of relevant professional experience.",
2066
+ "type": "number"
2067
+ },
2068
+ "securityClearance": {
2069
+ "type": "string",
2070
+ "enum": [
2071
+ "none",
2072
+ "confidential",
2073
+ "secret",
2074
+ "top_secret",
2075
+ "sci",
2076
+ "unknown"
2077
+ ],
2078
+ "description": "Security clearance level held by a witness."
2079
+ },
2080
+ "credibility": {
2081
+ "description": "Structured assessment of a witness's credibility (rating, factors, detractors).",
2082
+ "$ref": "#/$defs/WitnessCredibility"
2083
+ },
2084
+ "statementSummary": {
2085
+ "description": "Brief summary of what the witness reported.",
2086
+ "type": "string"
2087
+ },
2088
+ "interviewAvailable": {
2089
+ "description": "Whether a recorded interview with the witness exists.",
2090
+ "type": "boolean"
2091
+ },
2092
+ "writtenReportAvailable": {
2093
+ "description": "Whether a written report from the witness exists.",
2094
+ "type": "boolean"
2095
+ }
2096
+ },
2097
+ "required": [
2098
+ "witnessId",
2099
+ "category",
2100
+ "anonymous"
2101
+ ],
2102
+ "additionalProperties": false
2103
+ },
2104
+ "TestimonyDate": {
2105
+ "type": "object",
2106
+ "properties": {
2107
+ "date": {
2108
+ "type": "string",
2109
+ "description": "When the testimony was given (ISO date)."
2110
+ },
2111
+ "certainty": {
2112
+ "type": "string",
2113
+ "enum": [
2114
+ "exact",
2115
+ "approximate",
2116
+ "estimated",
2117
+ "unknown"
2118
+ ],
2119
+ "description": "Confidence in a date or time value — the single certainty scale for all temporal values."
2120
+ }
2121
+ },
2122
+ "required": [
2123
+ "date",
2124
+ "certainty"
2125
+ ],
2126
+ "additionalProperties": false
2127
+ },
2128
+ "TestimonyStatement": {
2129
+ "type": "object",
2130
+ "properties": {
2131
+ "statementId": {
2132
+ "type": "string",
2133
+ "description": "Stable id, addressable by a claim `evidenceRef` (\"testimony:<statementId>\")."
2134
+ },
2135
+ "witness": {
2136
+ "description": "A person who reported or corroborated an observation.",
2137
+ "$ref": "#/$defs/Witness"
2138
+ },
2139
+ "context": {
2140
+ "type": "string",
2141
+ "enum": [
2142
+ "sworn_affidavit",
2143
+ "congressional_testimony",
2144
+ "deposition",
2145
+ "official_interview",
2146
+ "written_statement",
2147
+ "recorded_interview",
2148
+ "informal_account",
2149
+ "anonymous_tip",
2150
+ "whistleblower_disclosure"
2151
+ ],
2152
+ "description": "The setting in which testimony was given."
2153
+ },
2154
+ "date": {
2155
+ "description": "When testimony was given, with its certainty.",
2156
+ "$ref": "#/$defs/TestimonyDate"
2157
+ },
2158
+ "content": {
2159
+ "description": "Full text of the statement, when available.",
2160
+ "type": "string"
2161
+ },
2162
+ "summary": {
2163
+ "description": "Brief summary of what the statement asserts.",
2164
+ "type": "string"
2165
+ },
2166
+ "sourceDocument": {
2167
+ "description": "A citation/source backing an observation, with its credibility tier.",
2168
+ "$ref": "#/$defs/SourceReference"
2169
+ },
2170
+ "chainOfCustody": {
2171
+ "type": "string",
2172
+ "enum": [
2173
+ "verified",
2174
+ "partial",
2175
+ "unverified",
2176
+ "government_held",
2177
+ "private_held",
2178
+ "lost",
2179
+ "destroyed",
2180
+ "classified",
2181
+ "unknown"
2182
+ ],
2183
+ "description": "Custody status of an evidence item."
2184
+ },
2185
+ "additionalEvidenceIds": {
2186
+ "description": "Ids of other evidence items the statement references or supports.",
2187
+ "type": "array",
2188
+ "items": {
2189
+ "type": "string"
2190
+ }
2191
+ }
2192
+ },
2193
+ "required": [
2194
+ "statementId",
2195
+ "witness",
2196
+ "context",
2197
+ "date"
2198
+ ],
2199
+ "additionalProperties": false
2200
+ },
2201
+ "PhysicalEvidenceItem": {
2202
+ "type": "object",
2203
+ "properties": {
2204
+ "id": {
2205
+ "type": "string",
2206
+ "description": "Stable id, addressable by a claim `evidenceRef` (\"physical:<id>\")."
2207
+ },
2208
+ "type": {
2209
+ "type": "string",
2210
+ "enum": [
2211
+ "material_sample",
2212
+ "ground_trace",
2213
+ "radiation_reading",
2214
+ "electromagnetic_recording",
2215
+ "photographic",
2216
+ "video",
2217
+ "audio_recording",
2218
+ "biological_sample",
2219
+ "implant",
2220
+ "debris",
2221
+ "soil_sample",
2222
+ "water_sample",
2223
+ "vegetation_sample",
2224
+ "impression",
2225
+ "burn_mark",
2226
+ "other"
2227
+ ],
2228
+ "description": "Kind of physical evidence collected."
2229
+ },
2230
+ "quality": {
2231
+ "type": "string",
2232
+ "enum": [
2233
+ "laboratory_grade",
2234
+ "field_collected",
2235
+ "uncontrolled",
2236
+ "degraded",
2237
+ "contaminated",
2238
+ "unknown"
2239
+ ],
2240
+ "description": "Collection/handling quality of a physical evidence item."
2241
+ },
2242
+ "description": {
2243
+ "description": "What the evidence item is and what makes it notable.",
2244
+ "type": "string"
2245
+ },
2246
+ "collectionDate": {
2247
+ "description": "When the evidence was collected (ISO date).",
2248
+ "type": "string"
2249
+ },
2250
+ "collectionMethod": {
2251
+ "description": "How the evidence was collected (e.g. \"sterile swab\", \"soil core sample\").",
2252
+ "type": "string"
2253
+ },
2254
+ "collectorName": {
2255
+ "description": "Person who collected the evidence.",
2256
+ "type": "string"
2257
+ },
2258
+ "collectorOrganization": {
2259
+ "description": "Organization the collector represents.",
2260
+ "type": "string"
2261
+ },
2262
+ "storageLocation": {
2263
+ "description": "Where the evidence is currently stored.",
2264
+ "type": "string"
2265
+ },
2266
+ "chainOfCustody": {
2267
+ "type": "string",
2268
+ "enum": [
2269
+ "verified",
2270
+ "partial",
2271
+ "unverified",
2272
+ "government_held",
2273
+ "private_held",
2274
+ "lost",
2275
+ "destroyed",
2276
+ "classified",
2277
+ "unknown"
2278
+ ],
2279
+ "description": "Custody status of an evidence item."
2280
+ },
2281
+ "analysisPerformed": {
2282
+ "description": "Analyses run on the evidence (e.g. \"isotopic analysis\", \"spectroscopy\").",
2283
+ "type": "array",
2284
+ "items": {
2285
+ "type": "string"
2286
+ }
2287
+ },
2288
+ "analysisResults": {
2289
+ "description": "Summary of what the analyses found.",
2290
+ "type": "string"
2291
+ },
2292
+ "photographed": {
2293
+ "description": "Whether the evidence was photographed in situ or in the lab.",
2294
+ "type": "boolean"
2295
+ },
2296
+ "labReport": {
2297
+ "description": "Whether a formal laboratory report exists.",
2298
+ "type": "boolean"
2299
+ },
2300
+ "notes": {
2301
+ "description": "Free-text context about the evidence item.",
2302
+ "type": "string"
2303
+ }
2304
+ },
2305
+ "required": [
2306
+ "id",
2307
+ "type",
2308
+ "quality"
2309
+ ],
2310
+ "additionalProperties": false
2311
+ },
2312
+ "DocumentMetadata": {
2313
+ "type": "object",
2314
+ "properties": {
2315
+ "documentType": {
2316
+ "type": "string",
2317
+ "enum": [
2318
+ "foia_release",
2319
+ "official_report",
2320
+ "congressional_record",
2321
+ "military_memo",
2322
+ "intelligence_assessment",
2323
+ "inspector_general",
2324
+ "presidential_directive",
2325
+ "executive_order",
2326
+ "declassified_cable",
2327
+ "investigation_file",
2328
+ "other"
2329
+ ],
2330
+ "description": "Kind of government/official document."
2331
+ },
2332
+ "classificationLevel": {
2333
+ "description": "Current classification of the document (e.g. \"UNCLASSIFIED\", \"SECRET//NOFORN\").",
2334
+ "type": "string"
2335
+ },
2336
+ "originatingAgency": {
2337
+ "description": "Agency that produced the document.",
2338
+ "type": "string"
2339
+ },
2340
+ "controlNumbers": {
2341
+ "description": "Agency control or tracking numbers stamped on the document.",
2342
+ "type": "array",
2343
+ "items": {
2344
+ "type": "string"
2345
+ }
2346
+ },
2347
+ "foiaRequestNumber": {
2348
+ "description": "FOIA request number that produced the document.",
2349
+ "type": "string"
2350
+ },
2351
+ "declassificationDate": {
2352
+ "description": "When the document was declassified (ISO date).",
2353
+ "type": "string"
2354
+ },
2355
+ "originalClassification": {
2356
+ "description": "Classification the document carried when created.",
2357
+ "type": "string"
2358
+ },
2359
+ "pageCount": {
2360
+ "description": "Number of pages in the document.",
2361
+ "type": "number"
2362
+ },
2363
+ "redactionLevel": {
2364
+ "description": "How much of the document is redacted.",
2365
+ "type": "string",
2366
+ "enum": [
2367
+ "none",
2368
+ "partial",
2369
+ "heavy",
2370
+ "unknown"
2371
+ ]
2372
+ }
2373
+ },
2374
+ "required": [
2375
+ "documentType"
2376
+ ],
2377
+ "additionalProperties": false
2378
+ },
2379
+ "Observation": {
2380
+ "type": "object",
2381
+ "properties": {
2382
+ "id": {
2383
+ "type": "string",
2384
+ "minLength": 1,
2385
+ "description": "Stable unique identifier for this observation."
2386
+ },
2387
+ "temporal": {
2388
+ "description": "When an observation occurred — a sortable anchor date plus optional fuzzy/range/relative nuance.",
2389
+ "$ref": "#/$defs/TemporalData"
2390
+ },
2391
+ "location": {
2392
+ "description": "Where an observation occurred — identity, coordinates, site classification, and proximity context.",
2393
+ "$ref": "#/$defs/LocationData"
2394
+ },
2395
+ "status": {
2396
+ "type": "string",
2397
+ "enum": [
2398
+ "draft",
2399
+ "review",
2400
+ "published",
2401
+ "archived",
2402
+ "retracted"
2403
+ ],
2404
+ "description": "Lifecycle/publication state of an observation record."
2405
+ },
2406
+ "createdAt": {
2407
+ "type": "string",
2408
+ "description": "ISO timestamp when the record was created."
2409
+ },
2410
+ "updatedAt": {
2411
+ "type": "string",
2412
+ "description": "ISO timestamp when the record was last updated."
2413
+ },
2414
+ "summary": {
2415
+ "description": "One-or-two sentence summary of the observation.",
2416
+ "type": "string"
2417
+ },
2418
+ "description": {
2419
+ "description": "Full narrative account of the observation.",
2420
+ "type": "string"
2421
+ },
2422
+ "objectCharacteristics": {
2423
+ "description": "Physical description of the observed object(s).",
2424
+ "$ref": "#/$defs/ObjectCharacteristics"
2425
+ },
2426
+ "eventType": {
2427
+ "description": "Local event-type tag (e.g. \"multi-sensor military encounter\"). The word \"classification\" is reserved for the origin taxonomy in @disclosureos/origins; this is just a free-text descriptor.",
2428
+ "type": "string"
2429
+ },
2430
+ "sourceData": {
2431
+ "description": "Where the observation data came from. Forensic custody/authenticity now lives in the optional `Observation.provenance` slot (@disclosureos/records/extensions/provenance).",
2432
+ "$ref": "#/$defs/SourceData"
2433
+ },
2434
+ "investigation": {
2435
+ "description": "Official/independent investigation of the observation.",
2436
+ "$ref": "#/$defs/Investigation"
2437
+ },
2438
+ "movement": {
2439
+ "description": "How the object moved — kinematics and notable maneuvers.",
2440
+ "$ref": "#/$defs/Movement"
2441
+ },
2442
+ "witnesses": {
2443
+ "description": "Aggregate summary of who witnessed the observation.",
2444
+ "$ref": "#/$defs/Witnesses"
2445
+ },
2446
+ "sensorEvidence": {
2447
+ "description": "Instrument-recorded evidence for an observation (radar, FLIR, EO, etc.).",
2448
+ "$ref": "#/$defs/SensorEvidenceData"
2449
+ },
2450
+ "responseImpact": {
2451
+ "description": "Official, media, and public response to the observation.",
2452
+ "$ref": "#/$defs/ResponseImpact"
2453
+ },
2454
+ "environment": {
2455
+ "description": "Environmental and weather conditions at the time of observation.",
2456
+ "$ref": "#/$defs/Environment"
2457
+ },
2458
+ "relations": {
2459
+ "description": "Typed links to related observations, plus flap/wave/cluster groupings.",
2460
+ "$ref": "#/$defs/Relations"
2461
+ },
2462
+ "aviation": {
2463
+ "description": "Aviation context when the observation involved aircraft.",
2464
+ "$ref": "#/$defs/Aviation"
2465
+ },
2466
+ "media": {
2467
+ "type": "array",
2468
+ "items": {
2469
+ "description": "A media file associated with an observation (image, video, document, or audio).",
2470
+ "$ref": "#/$defs/MediaAttachment"
2471
+ }
2472
+ },
2473
+ "featuredMedia": {
2474
+ "description": "A media file associated with an observation (image, video, document, or audio).",
2475
+ "$ref": "#/$defs/MediaAttachment"
2476
+ },
2477
+ "provenance": {
2478
+ "description": "Forensic provenance for an observation: custody status/chain and digital authenticity.",
2479
+ "$ref": "#/$defs/Provenance"
2480
+ },
2481
+ "identifiers": {
2482
+ "description": "External identifiers cross-referencing this observation, with an optional primary.",
2483
+ "$ref": "#/$defs/CrossReferences"
2484
+ },
2485
+ "testimony": {
2486
+ "type": "array",
2487
+ "items": {
2488
+ "description": "A single witness statement, its context, and supporting documentation.",
2489
+ "$ref": "#/$defs/TestimonyStatement"
2490
+ }
2491
+ },
2492
+ "physicalEvidence": {
2493
+ "type": "array",
2494
+ "items": {
2495
+ "description": "A physical artifact associated with an observation and its handling record.",
2496
+ "$ref": "#/$defs/PhysicalEvidenceItem"
2497
+ }
2498
+ },
2499
+ "documents": {
2500
+ "type": "array",
2501
+ "items": {
2502
+ "description": "Provenance metadata for a source document (classification, agency, redaction).",
2503
+ "$ref": "#/$defs/DocumentMetadata"
2504
+ }
2505
+ },
2506
+ "dataSourceId": {
2507
+ "description": "Identifier of the dataset or pipeline this record came from.",
2508
+ "type": "string"
2509
+ },
2510
+ "schemaVersion": {
2511
+ "description": "Version of the records schema this record was authored against.",
2512
+ "type": "string"
2513
+ },
2514
+ "extensions": {
2515
+ "description": "Third-party extension bag for slots not owned by a first-party package.",
2516
+ "type": "object",
2517
+ "propertyNames": {
2518
+ "type": "string"
2519
+ },
2520
+ "additionalProperties": {}
2521
+ },
2522
+ "internalNotes": {
2523
+ "description": "Private working notes for maintainers — not part of the public record.",
2524
+ "type": "string"
2525
+ },
2526
+ "observableAssessments": {
2527
+ "description": "Per-observable claim lists (Technology + Biologics) for an observation.",
2528
+ "$ref": "#/$defs/ObservableAssessmentMap"
2529
+ },
2530
+ "origin": {
2531
+ "type": "array",
2532
+ "items": {
2533
+ "description": "An attributed origin-hypothesis classification for an observation.",
2534
+ "$ref": "#/$defs/OriginClaim"
2535
+ },
2536
+ "description": "Competing origin claims for an observation (one per evaluator/verdict)."
2537
+ }
2538
+ },
2539
+ "required": [
2540
+ "id",
2541
+ "temporal",
2542
+ "location",
2543
+ "status",
2544
+ "createdAt",
2545
+ "updatedAt"
2546
+ ],
2547
+ "additionalProperties": false
2548
+ },
2549
+ "ObservableClaim": {
2550
+ "type": "object",
2551
+ "properties": {
2552
+ "evaluatedAt": {
2553
+ "description": "When this judgement was made (ISO 8601 datetime).",
2554
+ "type": "string",
2555
+ "format": "date-time",
2556
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
2557
+ },
2558
+ "evaluatedBy": {
2559
+ "description": "Who made this judgement — a person, agency, or agent identifier.",
2560
+ "type": "string"
2561
+ },
2562
+ "rationale": {
2563
+ "description": "Why this judgement was reached — the evaluator's stated reasoning.",
2564
+ "type": "string"
2565
+ },
2566
+ "evidenceRefs": {
2567
+ "description": "Refs to in-record evidence justifying this claim, e.g. \"media:<id>\", \"sensor:<id>\".",
2568
+ "type": "array",
2569
+ "items": {
2570
+ "type": "string",
2571
+ "minLength": 1
2572
+ }
2573
+ },
2574
+ "level": {
2575
+ "type": "string",
2576
+ "enum": [
2577
+ "not_indicated",
2578
+ "reported",
2579
+ "documented",
2580
+ "measured",
2581
+ "confirmed"
2582
+ ],
2583
+ "description": "Evidentiary tier of an observable assessment — how strongly the signal is established."
2584
+ },
2585
+ "confidence": {
2586
+ "description": "Confidence in the assessment, in [0,1]. 0 = none, 1 = absolute.",
2587
+ "type": "number",
2588
+ "minimum": 0,
2589
+ "maximum": 1
2590
+ }
2591
+ },
2592
+ "required": [
2593
+ "level"
2594
+ ],
2595
+ "additionalProperties": false
2596
+ },
2597
+ "ObservableAssessmentMap": {
2598
+ "type": "object",
2599
+ "properties": {
2600
+ "technology": {
2601
+ "type": "object",
2602
+ "propertyNames": {
2603
+ "type": "string",
2604
+ "enum": [
2605
+ "antigravity_lift",
2606
+ "instantaneous_acceleration",
2607
+ "hypersonic_no_signatures",
2608
+ "low_observability",
2609
+ "transmedium_travel",
2610
+ "biological_effects"
2611
+ ],
2612
+ "description": "Identifier of a Technology observable (the six AATIP-derived characteristics)."
2613
+ },
2614
+ "additionalProperties": {
2615
+ "type": "array",
2616
+ "items": {
2617
+ "description": "An attributed observable claim, keyed by its map position (no observableId).",
2618
+ "$ref": "#/$defs/ObservableClaim"
2619
+ }
2620
+ }
2621
+ },
2622
+ "biologics": {
2623
+ "type": "object",
2624
+ "propertyNames": {
2625
+ "type": "string",
2626
+ "enum": [
2627
+ "molecular_complexity",
2628
+ "isotopic_provenance",
2629
+ "non_standard_biochemistry",
2630
+ "non_phylogenetic_genetics",
2631
+ "anomalous_morphology",
2632
+ "anomalous_bio_interaction"
2633
+ ],
2634
+ "description": "Identifier of a Biologics observable."
2635
+ },
2636
+ "additionalProperties": {
2637
+ "type": "array",
2638
+ "items": {
2639
+ "description": "An attributed observable claim, keyed by its map position (no observableId).",
2640
+ "$ref": "#/$defs/ObservableClaim"
2641
+ }
2642
+ }
2643
+ }
2644
+ },
2645
+ "additionalProperties": false
2646
+ },
2647
+ "HypothesisWeight": {
2648
+ "type": "object",
2649
+ "properties": {
2650
+ "nodeId": {
2651
+ "type": "string",
2652
+ "minLength": 1,
2653
+ "description": "OCS node id (e.g., \"1.1.3\")."
2654
+ },
2655
+ "confidence": {
2656
+ "type": "number",
2657
+ "minimum": 0,
2658
+ "maximum": 1,
2659
+ "description": "Normalized confidence in [0,1]."
2660
+ },
2661
+ "label": {
2662
+ "type": "string"
2663
+ }
2664
+ },
2665
+ "required": [
2666
+ "nodeId",
2667
+ "confidence"
2668
+ ],
2669
+ "additionalProperties": false
2670
+ },
2671
+ "OriginClaim": {
2672
+ "type": "object",
2673
+ "properties": {
2674
+ "evaluatedAt": {
2675
+ "description": "When this judgement was made (ISO 8601 datetime).",
2676
+ "type": "string",
2677
+ "format": "date-time",
2678
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
2679
+ },
2680
+ "evaluatedBy": {
2681
+ "description": "Who made this judgement — a person, agency, or agent identifier.",
2682
+ "type": "string"
2683
+ },
2684
+ "rationale": {
2685
+ "description": "Why this judgement was reached — the evaluator's stated reasoning.",
2686
+ "type": "string"
2687
+ },
2688
+ "evidenceRefs": {
2689
+ "description": "Refs to in-record evidence justifying this claim, e.g. \"media:<id>\", \"sensor:<id>\".",
2690
+ "type": "array",
2691
+ "items": {
2692
+ "type": "string",
2693
+ "minLength": 1
2694
+ }
2695
+ },
2696
+ "primaryHypothesis": {
2697
+ "type": "string",
2698
+ "minLength": 1,
2699
+ "description": "OCS node id of the primary hypothesis."
2700
+ },
2701
+ "confidence": {
2702
+ "type": "number",
2703
+ "minimum": 0,
2704
+ "maximum": 1,
2705
+ "description": "Confidence in the primary hypothesis, in [0,1]."
2706
+ },
2707
+ "alternativeHypotheses": {
2708
+ "description": "Other OCS hypotheses this same evaluator weighs as possible, each with its own confidence — the intra-claim uncertainty axis.",
2709
+ "type": "array",
2710
+ "items": {
2711
+ "description": "A weighted origin hypothesis (OCS node + confidence).",
2712
+ "$ref": "#/$defs/HypothesisWeight"
2713
+ }
2714
+ }
2715
+ },
2716
+ "required": [
2717
+ "primaryHypothesis",
2718
+ "confidence"
2719
+ ],
2720
+ "additionalProperties": false
2721
+ }
2722
+ }
2723
+ }