{
  "conformance": {
    "checked": 2,
    "counts": {
      "SKIPPED": 2
    },
    "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": 800,
    "note": "counts here move when correlation improves; the five primary metrics do not (see docs/decisions/0002-unk-participants.md)",
    "objects": 70,
    "objects_not_in_advisory": 27,
    "tracks_resolved_beyond_advisory": 36,
    "tracks_with_object": 80,
    "tracks_without_object": 24,
    "unk_designations": 23
  },
  "correlation_run_id": 800,
  "correlation_version": 4,
  "date": "2026-09-18",
  "epoch_collisions": {
    "detail": [
      {
        "epoch": "2026-09-18T18:40:57.758561",
        "excluded_measurements": 2,
        "kind": "contradictory",
        "measurements": [
          "5c7bfcfb-5eaa-58c7-831a-293302806d65",
          "80414aa8-680f-5553-9d28-0b99339e0926"
        ],
        "object_norad_id": 15000,
        "positions": [
          "45.805974 56.277717",
          "49.373053 53.620803"
        ],
        "published_observations": 0,
        "scope": "sibling-tracks",
        "sibling_track_ids": [
          74722,
          74723
        ],
        "station_id": 11,
        "track_id": 74722
      },
      {
        "epoch": "2026-09-18T18:49:50.818369",
        "excluded_measurements": 2,
        "kind": "contradictory",
        "measurements": [
          "0a824f94-da38-50e6-974c-5850067eb4b1",
          "ceb90b64-2497-5c95-a51f-c171ab7ef660"
        ],
        "object_norad_id": 4564,
        "positions": [
          "50.058575 55.603329",
          "50.958699 56.109181"
        ],
        "published_observations": 0,
        "scope": "sibling-tracks",
        "sibling_track_ids": [
          74747,
          74748
        ],
        "station_id": 11,
        "track_id": 74747
      },
      {
        "epoch": "2026-09-18T19:02:09.794441",
        "excluded_measurements": 2,
        "kind": "contradictory",
        "measurements": [
          "21899b6f-5540-5bf3-8828-fe73ddabd893",
          "e853ecc8-3466-588a-a94e-00c7ce8c130b"
        ],
        "object_norad_id": 65571,
        "positions": [
          "45.061660 61.404519",
          "45.963788 61.282139"
        ],
        "published_observations": 0,
        "scope": "sibling-tracks",
        "sibling_track_ids": [
          74764,
          74765
        ],
        "station_id": 11,
        "track_id": 74764
      },
      {
        "epoch": "2026-09-18T19:02:20.719370",
        "excluded_measurements": 2,
        "kind": "contradictory",
        "measurements": [
          "64663a48-84a0-5fb5-9812-e7c8de703173",
          "9c1234db-b518-57ad-adf7-c2feacbf6376"
        ],
        "object_norad_id": 65571,
        "positions": [
          "49.789240 60.677492",
          "50.677855 60.515253"
        ],
        "published_observations": 0,
        "scope": "sibling-tracks",
        "sibling_track_ids": [
          74765,
          74766
        ],
        "station_id": 11,
        "track_id": 74765
      },
      {
        "epoch": "2026-09-18T21:45:16.861045",
        "excluded_measurements": 2,
        "kind": "contradictory",
        "measurements": [
          "478c1d90-22ef-5263-aee8-8a950ee088e7",
          "af284e04-4c0a-5b1f-9458-c50bdbdd5dd2"
        ],
        "object_norad_id": 64287,
        "positions": [
          "87.799615 53.251492",
          "88.834641 53.304541"
        ],
        "published_observations": 0,
        "scope": "sibling-tracks",
        "sibling_track_ids": [
          74798,
          74799
        ],
        "station_id": 11,
        "track_id": 74798
      },
      {
        "epoch": "2026-09-18T21:45:38.677696",
        "excluded_measurements": 2,
        "kind": "contradictory",
        "measurements": [
          "170ee2b6-04e1-5d18-92c1-da34a6b3841a",
          "428cdd72-5c58-5317-9b53-efeac58dbed4"
        ],
        "object_norad_id": 64287,
        "positions": [
          "92.589162 53.403129",
          "95.047997 53.389602"
        ],
        "published_observations": 0,
        "scope": "sibling-tracks",
        "sibling_track_ids": [
          74799,
          74800
        ],
        "station_id": 11,
        "track_id": 74799
      },
      {
        "epoch": "2026-09-18T22:21:25.535826",
        "excluded_measurements": 2,
        "kind": "contradictory",
        "measurements": [
          "316035d8-e882-5510-b540-c9ea71eed720",
          "ef367ec2-b302-543b-95fb-1f7c653bd7e4"
        ],
        "object_norad_id": 69387,
        "positions": [
          "106.139506 56.578341",
          "106.926398 56.553262"
        ],
        "published_observations": 0,
        "scope": "sibling-tracks",
        "sibling_track_ids": [
          74807,
          74808
        ],
        "station_id": 11,
        "track_id": 74807
      }
    ],
    "detail_omitted": 0,
    "epochs": 7,
    "measurements_excluded": 14,
    "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": 7,
    "tracks_left_without_observations": 8
  },
  "generated_at": "2026-09-22T22:45:19.622473Z",
  "generation_id": "11c4f597d67e8ec6ac6b89611be915f8c598dd9c4332bbd9373314f4a10d4299",
  "generator": "satnogs_optical_network.products",
  "iod": {
    "11": {
      "identified_lines": 7872,
      "identified_tracks": 73,
      "lines": 9566,
      "skipped": 0,
      "skipped_reasons": [],
      "unk_lines": 1694,
      "unk_tracks": 21,
      "wide_id_tracks": 0
    },
    "7": {
      "identified_lines": 495,
      "identified_tracks": 7,
      "lines": 738,
      "skipped": 0,
      "skipped_reasons": [],
      "unk_lines": 243,
      "unk_tracks": 2,
      "wide_id_tracks": 0
    }
  },
  "layout": {
    "generation_dir": "session_date=2026-09-18/generations/11c4f597d67e8ec6ac6b89611be915f8c598dd9c4332bbd9373314f4a10d4299",
    "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-18",
    "stations": "stations",
    "tracks": "tracks.parquet"
  },
  "metrics": {
    "measurements": 10306,
    "objects": 46,
    "stations": 2,
    "tracks": 104,
    "unk_tracks": 57
  },
  "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": 2,
    "tdm_observations": 8353,
    "tdm_observations_expected": 8353,
    "tdm_observations_verified": true,
    "tdm_tracks": 72
  },
  "per_station": [
    {
      "epoch_collisions": 0,
      "iod": {
        "identified_lines": 495,
        "identified_tracks": 7,
        "lines": 738,
        "skipped": 0,
        "skipped_reasons": [],
        "unk_lines": 243,
        "unk_tracks": 2,
        "wide_id_tracks": 0
      },
      "iod_station_code": "7",
      "measurements": 738,
      "name": "Drachten",
      "objects": 3,
      "station_id": 7,
      "tdm_tracks": 7,
      "tracks": 9,
      "unk_tracks": 6
    },
    {
      "epoch_collisions": 7,
      "iod": {
        "identified_lines": 7872,
        "identified_tracks": 73,
        "lines": 9566,
        "skipped": 0,
        "skipped_reasons": [],
        "unk_lines": 1694,
        "unk_tracks": 21,
        "wide_id_tracks": 0
      },
      "iod_station_code": "11",
      "measurements": 9568,
      "name": "dwingeloo",
      "objects": 43,
      "station_id": 11,
      "tdm_tracks": 73,
      "tracks": 95,
      "unk_tracks": 51
    }
  ],
  "products": [
    {
      "bytes": 9555,
      "conformance": null,
      "kind": "characterisation-station",
      "path": "session_date=2026-09-18/generations/11c4f597d67e8ec6ac6b89611be915f8c598dd9c4332bbd9373314f4a10d4299/stations/station-11.json",
      "scope": "station-night",
      "scope_key": "11-2026-09-18",
      "sha256": "c2fe4031d9abae8c2652b101ff7349bcff7a99d6e4713eab7171cf62bdf42bd0"
    },
    {
      "bytes": 9650,
      "conformance": null,
      "kind": "characterisation-station",
      "path": "session_date=2026-09-18/generations/11c4f597d67e8ec6ac6b89611be915f8c598dd9c4332bbd9373314f4a10d4299/stations/station-7.json",
      "scope": "station-night",
      "scope_key": "7-2026-09-18",
      "sha256": "179d288c74c3c0fa4b6dcdf7e8d4b2f4681b86e5bf3e6b30e717e539a45a9cb8"
    },
    {
      "bytes": 640922,
      "conformance": null,
      "kind": "iod-station-night",
      "path": "session_date=2026-09-18/generations/11c4f597d67e8ec6ac6b89611be915f8c598dd9c4332bbd9373314f4a10d4299/iod/station-11-2026-09-18.iod",
      "scope": "station-night",
      "scope_key": "11-2026-09-18",
      "sha256": "01fc74cc2c55daccfd0bb75d432f13697953c5083851e883b2249b376451c99a"
    },
    {
      "bytes": 49446,
      "conformance": null,
      "kind": "iod-station-night",
      "path": "session_date=2026-09-18/generations/11c4f597d67e8ec6ac6b89611be915f8c598dd9c4332bbd9373314f4a10d4299/iod/station-7-2026-09-18.iod",
      "scope": "station-night",
      "scope_key": "7-2026-09-18",
      "sha256": "b3a8d68eeb82cf44e2d0fd22fa429f47966701de5e326a696642d7aa74deb9ef"
    },
    {
      "bytes": 1124914,
      "conformance": null,
      "kind": "parquet-session",
      "path": "session_date=2026-09-18/generations/11c4f597d67e8ec6ac6b89611be915f8c598dd9c4332bbd9373314f4a10d4299/measurements.parquet",
      "scope": "session",
      "scope_key": "2026-09-18",
      "sha256": "13c3c9246ebb03fc7b7f092eda729b2da5ed79747439f7db53228ace6a346ae3"
    },
    {
      "bytes": 16045,
      "conformance": null,
      "kind": "parquet-tracks",
      "path": "session_date=2026-09-18/generations/11c4f597d67e8ec6ac6b89611be915f8c598dd9c4332bbd9373314f4a10d4299/tracks.parquet",
      "scope": "session",
      "scope_key": "2026-09-18",
      "sha256": "f29c862dfd75e3930f2cb011bf37f9e8a79025620819ca68bb83fa924d05fb44"
    },
    {
      "bytes": 935987,
      "conformance": "SKIPPED: Orekit conformance NOT VERIFIED for station-11-2026-09-18.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": 7858,
      "path": "session_date=2026-09-18/generations/11c4f597d67e8ec6ac6b89611be915f8c598dd9c4332bbd9373314f4a10d4299/tdm/station-11-2026-09-18.tdm",
      "scope": "station-night",
      "scope_key": "11-2026-09-18",
      "sha256": "fe8aff2321305670800139a546cb5f8540943c746504784529992552dbcec620"
    },
    {
      "bytes": 64153,
      "conformance": "SKIPPED: Orekit conformance NOT VERIFIED for station-7-2026-09-18.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": 495,
      "path": "session_date=2026-09-18/generations/11c4f597d67e8ec6ac6b89611be915f8c598dd9c4332bbd9373314f4a10d4299/tdm/station-7-2026-09-18.tdm",
      "scope": "station-night",
      "scope_key": "7-2026-09-18",
      "sha256": "1a9a2bf46c0defdd9c4b167e22e5ddbf5db0ec92cf3f82fcc63fad6e5691b52e"
    }
  ],
  "quarantined_excluded": 0,
  "station": [
    7,
    11
  ],
  "stations": [
    7,
    11
  ],
  "tdm_excluded_epoch_collisions": 14,
  "tdm_skipped_no_observations": 8,
  "tdm_skipped_unk": 24
}
