{
  "conformance": {
    "checked": 3,
    "counts": {
      "SKIPPED": 3
    },
    "missing": [
      "orekit_jpype not importable (ModuleNotFoundError: No module named 'orekit_jpype'); pip install 'satnogs-optical-network[od]'",
      "no JVM (JAVA_HOME unset and no 'java' on PATH)",
      "orekit-data not found (set OREKIT_DATA_PATH to the orekit-data zip or directory, or put orekit-data.zip in the working directory)"
    ],
    "note": "Orekit is the conformance authority (ADR 0014). SKIPPED means it did not run here; it does not mean the file conforms. NOT_RUN means nothing was checked at all, which is not a pass either. This deployment does not carry a JVM, by decision (network #11): the gate runs on bench machines that install the optional [od] extra, not on the deployed service.",
    "status": "SKIPPED",
    "structural_problems": []
  },
  "correlation_metrics": {
    "basis": "correlation",
    "correlation_run_id": 856,
    "note": "counts here move when correlation improves; the five primary metrics do not (see docs/decisions/0002-unk-participants.md)",
    "objects": 185,
    "objects_not_in_advisory": 53,
    "tracks_resolved_beyond_advisory": 71,
    "tracks_with_object": 218,
    "tracks_without_object": 75,
    "unk_designations": 65
  },
  "correlation_run_id": 856,
  "correlation_version": 4,
  "date": "2026-09-20",
  "epoch_collisions": {
    "detail": [
      {
        "epoch": "2026-09-20T18:34:50.294056",
        "excluded_measurements": 2,
        "kind": "contradictory",
        "measurements": [
          "04cd5282-56f9-5802-8180-fdc83e015a4e",
          "1f912d3f-6cc2-533d-ac6e-5c7d61e320ff"
        ],
        "object_norad_id": 4255,
        "positions": [
          "47.122815 57.436960",
          "47.772549 57.627524"
        ],
        "published_observations": 0,
        "scope": "sibling-tracks",
        "sibling_track_ids": [
          74913,
          74914
        ],
        "station_id": 11,
        "track_id": 74913
      },
      {
        "epoch": "2026-09-20T18:43:47.927845",
        "excluded_measurements": 2,
        "kind": "contradictory",
        "measurements": [
          "69004102-f08a-5182-a7f9-48292b0cf64f",
          "b07b5356-22e1-55ab-9b70-1fa2851fc0ff"
        ],
        "object_norad_id": 68615,
        "positions": [
          "54.408134 54.900275",
          "55.108144 54.711500"
        ],
        "published_observations": 0,
        "scope": "sibling-tracks",
        "sibling_track_ids": [
          74937,
          74938
        ],
        "station_id": 11,
        "track_id": 74937
      },
      {
        "epoch": "2026-09-20T19:22:36.071549",
        "excluded_measurements": 2,
        "kind": "contradictory",
        "measurements": [
          "027eda61-d5bd-506c-98af-ff0f361209c9",
          "50308304-0e5a-5e52-bdf2-3dbeba117dde"
        ],
        "object_norad_id": 68647,
        "positions": [
          "58.725503 53.824043",
          "60.354505 53.874948"
        ],
        "published_observations": 0,
        "scope": "sibling-tracks",
        "sibling_track_ids": [
          75027,
          75028
        ],
        "station_id": 11,
        "track_id": 75027
      },
      {
        "epoch": "2026-09-20T19:48:21.422318",
        "excluded_measurements": 2,
        "kind": "contradictory",
        "measurements": [
          "30ada259-6dee-53f0-a532-b9900b02d80c",
          "60cca5e0-c9b4-5dd3-b3c1-cb5f68fb1d52"
        ],
        "object_norad_id": 53228,
        "positions": [
          "58.647838 65.518281",
          "59.625841 65.596951"
        ],
        "published_observations": 0,
        "scope": "sibling-tracks",
        "sibling_track_ids": [
          75100,
          75101
        ],
        "station_id": 11,
        "track_id": 75100
      },
      {
        "epoch": "2026-09-20T20:34:53.766744",
        "excluded_measurements": 2,
        "kind": "contradictory",
        "measurements": [
          "26df9a3a-3b9c-5421-bad5-f242b18e2daf",
          "79142161-2dbe-59d3-a99b-27150f48328b"
        ],
        "object_norad_id": 11165,
        "positions": [
          "69.916331 55.740824",
          "70.887400 55.945155"
        ],
        "published_observations": 0,
        "scope": "sibling-tracks",
        "sibling_track_ids": [
          75155,
          75156
        ],
        "station_id": 11,
        "track_id": 75155
      },
      {
        "epoch": "2026-09-20T21:59:38.321052",
        "excluded_measurements": 3,
        "kind": "contradictory",
        "measurements": [
          "03df9a6c-392a-5169-bdc9-f881870b17df",
          "c9b31977-61b8-5fc9-a15c-ed21df2b8870",
          "f244c903-0ba0-5de9-beac-852a2f743e08"
        ],
        "object_norad_id": 52716,
        "positions": [
          "97.143016 55.219176",
          "97.975358 55.186553",
          "99.295261 55.121124"
        ],
        "published_observations": 0,
        "scope": "sibling-tracks",
        "sibling_track_ids": [
          75170,
          75171,
          75172
        ],
        "station_id": 11,
        "track_id": 75170
      }
    ],
    "detail_omitted": 0,
    "epochs": 6,
    "measurements_excluded": 13,
    "note": "one epoch stated twice costs its own measurements, never the session: a repeated epoch is published once, a contradicted one is published not at all, and every excluded row is still in the parquet archive. Counted over tracks with a correlated object, which are the only tracks a TDM is written for. See docs/decisions/0004-duplicate-epochs.md",
    "tracks": 6,
    "tracks_left_without_observations": 8
  },
  "generated_at": "2026-09-23T05:46:18.037301Z",
  "generation_id": "66a2fc1153907e0aba4e10f50089d0eafda3f951547ab4128f82fe91af9a3256",
  "generator": "satnogs_optical_network.products",
  "iod": {
    "11": {
      "identified_lines": 29178,
      "identified_tracks": 207,
      "lines": 33111,
      "skipped": 0,
      "skipped_reasons": [],
      "unk_lines": 3933,
      "unk_tracks": 62,
      "wide_id_tracks": 0
    },
    "15": {
      "identified_lines": 6,
      "identified_tracks": 5,
      "lines": 11,
      "skipped": 0,
      "skipped_reasons": [],
      "unk_lines": 5,
      "unk_tracks": 3,
      "wide_id_tracks": 0
    },
    "7": {
      "identified_lines": 278,
      "identified_tracks": 6,
      "lines": 278,
      "skipped": 0,
      "skipped_reasons": [],
      "unk_lines": 0,
      "unk_tracks": 0,
      "wide_id_tracks": 0
    }
  },
  "layout": {
    "generation_dir": "session_date=2026-09-20/generations/66a2fc1153907e0aba4e10f50089d0eafda3f951547ab4128f82fe91af9a3256",
    "measurements": "measurements.parquet",
    "note": "Resolve products through this manifest. Retained generations must not be combined with a recursive Parquet wildcard.",
    "session_dir": "session_date=2026-09-20",
    "stations": "stations",
    "tracks": "tracks.parquet"
  },
  "metrics": {
    "measurements": 33429,
    "objects": 142,
    "stations": 3,
    "tracks": 293,
    "unk_tracks": 134
  },
  "metrics_basis": "as-ingested",
  "packaging": {
    "note": "TDM file count is a packaging artifact, not a headline metric: it both overstates the claim to experts and understates the data volume (ADR 0010). tdm_observations is the count actually read back out of the published station-night TDMs and checked against the measurement rows; it is the number to compare a published file against. tdm_tracks is the number of segments across them.",
    "tdm_files": 3,
    "tdm_observations": 29449,
    "tdm_observations_expected": 29449,
    "tdm_observations_verified": true,
    "tdm_tracks": 210
  },
  "per_station": [
    {
      "epoch_collisions": 0,
      "iod": {
        "identified_lines": 278,
        "identified_tracks": 6,
        "lines": 278,
        "skipped": 0,
        "skipped_reasons": [],
        "unk_lines": 0,
        "unk_tracks": 0,
        "wide_id_tracks": 0
      },
      "iod_station_code": "7",
      "measurements": 278,
      "name": "Drachten",
      "objects": 3,
      "station_id": 7,
      "tdm_tracks": 6,
      "tracks": 6,
      "unk_tracks": 3
    },
    {
      "epoch_collisions": 6,
      "iod": {
        "identified_lines": 29178,
        "identified_tracks": 207,
        "lines": 33111,
        "skipped": 0,
        "skipped_reasons": [],
        "unk_lines": 3933,
        "unk_tracks": 62,
        "wide_id_tracks": 0
      },
      "iod_station_code": "11",
      "measurements": 33140,
      "name": "dwingeloo",
      "objects": 139,
      "station_id": 11,
      "tdm_tracks": 207,
      "tracks": 279,
      "unk_tracks": 123
    },
    {
      "epoch_collisions": 0,
      "iod": {
        "identified_lines": 6,
        "identified_tracks": 5,
        "lines": 11,
        "skipped": 0,
        "skipped_reasons": [],
        "unk_lines": 5,
        "unk_tracks": 3,
        "wide_id_tracks": 0
      },
      "iod_station_code": "15",
      "measurements": 11,
      "name": "Satnogs-optical",
      "objects": 0,
      "station_id": 15,
      "tdm_tracks": 5,
      "tracks": 8,
      "unk_tracks": 8
    }
  ],
  "products": [
    {
      "bytes": 9556,
      "conformance": null,
      "kind": "characterisation-station",
      "path": "session_date=2026-09-20/generations/66a2fc1153907e0aba4e10f50089d0eafda3f951547ab4128f82fe91af9a3256/stations/station-11.json",
      "scope": "station-night",
      "scope_key": "11-2026-09-20",
      "sha256": "8933be9faa6d06a9d92585527aa575417c4ab5c97bae08f478af470ebc2d0c62"
    },
    {
      "bytes": 9408,
      "conformance": null,
      "kind": "characterisation-station",
      "path": "session_date=2026-09-20/generations/66a2fc1153907e0aba4e10f50089d0eafda3f951547ab4128f82fe91af9a3256/stations/station-15.json",
      "scope": "station-night",
      "scope_key": "15-2026-09-20",
      "sha256": "9e30ec46f80e9cb64e620a59ce741b59ef45542d1e3fe48deec89309e2e5853d"
    },
    {
      "bytes": 9651,
      "conformance": null,
      "kind": "characterisation-station",
      "path": "session_date=2026-09-20/generations/66a2fc1153907e0aba4e10f50089d0eafda3f951547ab4128f82fe91af9a3256/stations/station-7.json",
      "scope": "station-night",
      "scope_key": "7-2026-09-20",
      "sha256": "70179dbc280abb1039a2fda9a36f86970cd7c9a5e1a70a8464fe6bcb5aa96bec"
    },
    {
      "bytes": 2218437,
      "conformance": null,
      "kind": "iod-station-night",
      "path": "session_date=2026-09-20/generations/66a2fc1153907e0aba4e10f50089d0eafda3f951547ab4128f82fe91af9a3256/iod/station-11-2026-09-20.iod",
      "scope": "station-night",
      "scope_key": "11-2026-09-20",
      "sha256": "2b512bbfd70ca26770ba72830e08f4ed4eb38ea05e29db1388869b558fdbc458"
    },
    {
      "bytes": 737,
      "conformance": null,
      "kind": "iod-station-night",
      "path": "session_date=2026-09-20/generations/66a2fc1153907e0aba4e10f50089d0eafda3f951547ab4128f82fe91af9a3256/iod/station-15-2026-09-20.iod",
      "scope": "station-night",
      "scope_key": "15-2026-09-20",
      "sha256": "55cb5523cc7f6df9ff00e307e97f8df6e34615c974cfe8774d54375f52b96aa4"
    },
    {
      "bytes": 18626,
      "conformance": null,
      "kind": "iod-station-night",
      "path": "session_date=2026-09-20/generations/66a2fc1153907e0aba4e10f50089d0eafda3f951547ab4128f82fe91af9a3256/iod/station-7-2026-09-20.iod",
      "scope": "station-night",
      "scope_key": "7-2026-09-20",
      "sha256": "a2783ab740b6e028413dca6d9965ffc3176fce39dddd07bb8de6370111ff6db2"
    },
    {
      "bytes": 3566541,
      "conformance": null,
      "kind": "parquet-session",
      "path": "session_date=2026-09-20/generations/66a2fc1153907e0aba4e10f50089d0eafda3f951547ab4128f82fe91af9a3256/measurements.parquet",
      "scope": "session",
      "scope_key": "2026-09-20",
      "sha256": "800812c89aa82536e2c6dff0277ada685addbe30ed1d0b5d90304c98f9948c11"
    },
    {
      "bytes": 30593,
      "conformance": null,
      "kind": "parquet-tracks",
      "path": "session_date=2026-09-20/generations/66a2fc1153907e0aba4e10f50089d0eafda3f951547ab4128f82fe91af9a3256/tracks.parquet",
      "scope": "session",
      "scope_key": "2026-09-20",
      "sha256": "90fa74b9547fb9c5b2bc957e79af6bf98caa0aebc433e5740c03693c32783c87"
    },
    {
      "bytes": 3443029,
      "conformance": "SKIPPED: Orekit conformance NOT VERIFIED for station-11-2026-09-20.tdm: orekit_jpype not importable (ModuleNotFoundError: No module named 'orekit_jpype'); pip install 'satnogs-optical-network[od]'; no JVM (JAVA_HOME unset and no 'java' on PATH); orekit-data not found (set OREKIT_DATA_PATH to the orekit-data zip or directory, or put orekit-data.zip in the working directory). Offline structural check: clean.",
      "kind": "tdm-station-night",
      "observations": 29165,
      "path": "session_date=2026-09-20/generations/66a2fc1153907e0aba4e10f50089d0eafda3f951547ab4128f82fe91af9a3256/tdm/station-11-2026-09-20.tdm",
      "scope": "station-night",
      "scope_key": "11-2026-09-20",
      "sha256": "56136cd7421db0a1e8d5e5a3b3814e115371526eee083eb1198fd564bc63f6dd"
    },
    {
      "bytes": 6026,
      "conformance": "SKIPPED: Orekit conformance NOT VERIFIED for station-15-2026-09-20.tdm: orekit_jpype not importable (ModuleNotFoundError: No module named 'orekit_jpype'); pip install 'satnogs-optical-network[od]'; no JVM (JAVA_HOME unset and no 'java' on PATH); orekit-data not found (set OREKIT_DATA_PATH to the orekit-data zip or directory, or put orekit-data.zip in the working directory). Offline structural check: clean.",
      "kind": "tdm-station-night",
      "observations": 6,
      "path": "session_date=2026-09-20/generations/66a2fc1153907e0aba4e10f50089d0eafda3f951547ab4128f82fe91af9a3256/tdm/station-15-2026-09-20.tdm",
      "scope": "station-night",
      "scope_key": "15-2026-09-20",
      "sha256": "4e059f3262e71fbfb97ac561dea2b57d348031dee9e358a514250542aecfd5c5"
    },
    {
      "bytes": 38246,
      "conformance": "SKIPPED: Orekit conformance NOT VERIFIED for station-7-2026-09-20.tdm: orekit_jpype not importable (ModuleNotFoundError: No module named 'orekit_jpype'); pip install 'satnogs-optical-network[od]'; no JVM (JAVA_HOME unset and no 'java' on PATH); orekit-data not found (set OREKIT_DATA_PATH to the orekit-data zip or directory, or put orekit-data.zip in the working directory). Offline structural check: clean.",
      "kind": "tdm-station-night",
      "observations": 278,
      "path": "session_date=2026-09-20/generations/66a2fc1153907e0aba4e10f50089d0eafda3f951547ab4128f82fe91af9a3256/tdm/station-7-2026-09-20.tdm",
      "scope": "station-night",
      "scope_key": "7-2026-09-20",
      "sha256": "9cfc2c94dff56144c1b2df8e0fcba71a7dbafe1084c94ed41ac54601b8da0821"
    }
  ],
  "quarantined_excluded": 0,
  "station": [
    7,
    11,
    15
  ],
  "stations": [
    7,
    11,
    15
  ],
  "tdm_excluded_epoch_collisions": 13,
  "tdm_skipped_no_observations": 8,
  "tdm_skipped_unk": 75
}
