{
  "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": 1112,
    "note": "counts here move when correlation improves; the five primary metrics do not (see docs/decisions/0002-unk-participants.md)",
    "objects": 82,
    "objects_not_in_advisory": 38,
    "tracks_resolved_beyond_advisory": 57,
    "tracks_with_object": 101,
    "tracks_without_object": 134,
    "unk_designations": 126
  },
  "correlation_run_id": 1112,
  "correlation_version": 1,
  "date": "2026-10-03",
  "epoch_collisions": {
    "detail": [
      {
        "epoch": "2026-10-03T19:18:45.278235",
        "excluded_measurements": 2,
        "kind": "contradictory",
        "measurements": [
          "e811c1c1-b874-584e-9d9c-e55582607c5b",
          "faa99281-8c85-55e0-b2e1-c98a179e90ff"
        ],
        "object_norad_id": 65312,
        "positions": [
          "300.273026 4.663031",
          "300.973558 4.357716"
        ],
        "published_observations": 0,
        "scope": "sibling-tracks",
        "sibling_track_ids": [
          81494,
          81495
        ],
        "station_id": 15,
        "track_id": 81494
      },
      {
        "epoch": "2026-10-03T19:24:33.073529",
        "excluded_measurements": 2,
        "kind": "contradictory",
        "measurements": [
          "a5127fc1-e4c4-5828-b01d-5e417a9e051c",
          "a74df14f-3c3d-57ef-a4f0-e76d2267acba"
        ],
        "object_norad_id": 100205,
        "positions": [
          "294.795583 5.327164",
          "295.376016 5.084710"
        ],
        "published_observations": 0,
        "scope": "sibling-tracks",
        "sibling_track_ids": [
          81497,
          81498
        ],
        "station_id": 15,
        "track_id": 81497
      },
      {
        "epoch": "2026-10-03T19:50:37.014953",
        "excluded_measurements": 2,
        "kind": "contradictory",
        "measurements": [
          "30dca272-f163-531c-84d6-b03a48feed4a",
          "89b89497-e4b4-5a1e-9c3e-8050457e75c1"
        ],
        "object_norad_id": 62329,
        "positions": [
          "297.557212 2.802856",
          "297.684975 1.887388"
        ],
        "published_observations": 0,
        "scope": "sibling-tracks",
        "sibling_track_ids": [
          81515,
          81517
        ],
        "station_id": 15,
        "track_id": 81515
      },
      {
        "epoch": "2026-10-03T20:04:05.706006",
        "excluded_measurements": 2,
        "kind": "contradictory",
        "measurements": [
          "947ce29f-29ac-59f9-ac8e-90f72db25598",
          "daea0231-5536-592d-bb0f-18aff3175857"
        ],
        "object_norad_id": 66418,
        "positions": [
          "311.674252 2.783855",
          "312.392639 3.125275"
        ],
        "published_observations": 0,
        "scope": "sibling-tracks",
        "sibling_track_ids": [
          81520,
          81521
        ],
        "station_id": 15,
        "track_id": 81520
      }
    ],
    "detail_omitted": 0,
    "epochs": 4,
    "measurements_excluded": 8,
    "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": 4,
    "tracks_left_without_observations": 6
  },
  "generated_at": "2026-10-04T04:54:48.995768Z",
  "generation_id": "18d0cc54a6f3bf00499d2778319f130881d4b1bf9d6fa6ff4ec2d60552c81492",
  "generator": "satnogs_optical_network.products",
  "iod": {
    "15": {
      "identified_lines": 4639,
      "identified_tracks": 52,
      "lines": 4977,
      "skipped": 0,
      "skipped_reasons": [],
      "unk_lines": 338,
      "unk_tracks": 90,
      "wide_id_tracks": 0
    },
    "7": {
      "identified_lines": 3595,
      "identified_tracks": 49,
      "lines": 3845,
      "skipped": 0,
      "skipped_reasons": [],
      "unk_lines": 250,
      "unk_tracks": 36,
      "wide_id_tracks": 0
    }
  },
  "layout": {
    "generation_dir": "session_date=2026-10-03/generations/18d0cc54a6f3bf00499d2778319f130881d4b1bf9d6fa6ff4ec2d60552c81492",
    "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-10-03",
    "stations": "stations",
    "tracks": "tracks.parquet"
  },
  "metrics": {
    "measurements": 8839,
    "objects": 45,
    "stations": 2,
    "tracks": 235,
    "unk_tracks": 189
  },
  "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": 8226,
    "tdm_observations_expected": 8226,
    "tdm_observations_verified": true,
    "tdm_tracks": 95
  },
  "per_station": [
    {
      "epoch_collisions": 0,
      "iod": {
        "identified_lines": 3595,
        "identified_tracks": 49,
        "lines": 3845,
        "skipped": 0,
        "skipped_reasons": [],
        "unk_lines": 250,
        "unk_tracks": 36,
        "wide_id_tracks": 0
      },
      "iod_station_code": "7",
      "measurements": 3862,
      "name": "Drachten",
      "objects": 30,
      "station_id": 7,
      "tdm_tracks": 49,
      "tracks": 93,
      "unk_tracks": 62
    },
    {
      "epoch_collisions": 4,
      "iod": {
        "identified_lines": 4639,
        "identified_tracks": 52,
        "lines": 4977,
        "skipped": 0,
        "skipped_reasons": [],
        "unk_lines": 338,
        "unk_tracks": 90,
        "wide_id_tracks": 0
      },
      "iod_station_code": "15",
      "measurements": 4977,
      "name": "Satnogs-optical",
      "objects": 15,
      "station_id": 15,
      "tdm_tracks": 52,
      "tracks": 142,
      "unk_tracks": 127
    }
  ],
  "products": [
    {
      "bytes": 12822,
      "conformance": null,
      "kind": "characterisation-station",
      "path": "session_date=2026-10-03/generations/18d0cc54a6f3bf00499d2778319f130881d4b1bf9d6fa6ff4ec2d60552c81492/stations/station-15.json",
      "scope": "station-night",
      "scope_key": "15-2026-10-03",
      "sha256": "d3f81b0be6530b47aa81689894927712b426cfaad7a6c8a7f12b6b198957174b"
    },
    {
      "bytes": 9904,
      "conformance": null,
      "kind": "characterisation-station",
      "path": "session_date=2026-10-03/generations/18d0cc54a6f3bf00499d2778319f130881d4b1bf9d6fa6ff4ec2d60552c81492/stations/station-7.json",
      "scope": "station-night",
      "scope_key": "7-2026-10-03",
      "sha256": "0c87ffc337d916c0ba1fcc8395ab502c6eeb5a5983d22a9d5a0ebcb00fc4ed3c"
    },
    {
      "bytes": 333459,
      "conformance": null,
      "kind": "iod-station-night",
      "path": "session_date=2026-10-03/generations/18d0cc54a6f3bf00499d2778319f130881d4b1bf9d6fa6ff4ec2d60552c81492/iod/station-15-2026-10-03.iod",
      "scope": "station-night",
      "scope_key": "15-2026-10-03",
      "sha256": "855e1235c60042395ef45ba22443c462f62a9ea503e8b1d1b841f294ea54b9c8"
    },
    {
      "bytes": 257615,
      "conformance": null,
      "kind": "iod-station-night",
      "path": "session_date=2026-10-03/generations/18d0cc54a6f3bf00499d2778319f130881d4b1bf9d6fa6ff4ec2d60552c81492/iod/station-7-2026-10-03.iod",
      "scope": "station-night",
      "scope_key": "7-2026-10-03",
      "sha256": "3eaaf41083125733ba750e5c57768487d70940127ee4b42df2b253cc0628c170"
    },
    {
      "bytes": 958238,
      "conformance": null,
      "kind": "parquet-session",
      "path": "session_date=2026-10-03/generations/18d0cc54a6f3bf00499d2778319f130881d4b1bf9d6fa6ff4ec2d60552c81492/measurements.parquet",
      "scope": "session",
      "scope_key": "2026-10-03",
      "sha256": "bf2b543f52c78b4d833175cb59226c179244efadc03c6ee0f91a016a3153de00"
    },
    {
      "bytes": 25397,
      "conformance": null,
      "kind": "parquet-tracks",
      "path": "session_date=2026-10-03/generations/18d0cc54a6f3bf00499d2778319f130881d4b1bf9d6fa6ff4ec2d60552c81492/tracks.parquet",
      "scope": "session",
      "scope_key": "2026-10-03",
      "sha256": "eb04d58d370ce4060246dac309b080ef3b194879c4a64dc85d7edfc42d77c66b"
    },
    {
      "bytes": 575546,
      "conformance": "SKIPPED: Orekit conformance NOT VERIFIED for station-15-2026-10-03.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": 4631,
      "path": "session_date=2026-10-03/generations/18d0cc54a6f3bf00499d2778319f130881d4b1bf9d6fa6ff4ec2d60552c81492/tdm/station-15-2026-10-03.tdm",
      "scope": "station-night",
      "scope_key": "15-2026-10-03",
      "sha256": "e995aabb67c5a7050b2ddc0a1074807b29180943455d69bf171214c3636b9aa0"
    },
    {
      "bytes": 459488,
      "conformance": "SKIPPED: Orekit conformance NOT VERIFIED for station-7-2026-10-03.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": 3595,
      "path": "session_date=2026-10-03/generations/18d0cc54a6f3bf00499d2778319f130881d4b1bf9d6fa6ff4ec2d60552c81492/tdm/station-7-2026-10-03.tdm",
      "scope": "station-night",
      "scope_key": "7-2026-10-03",
      "sha256": "7fbe888b9d09a831f0a501f2e352a4ea6674a27be0dadfad041cdb923be0c910"
    }
  ],
  "quarantined_excluded": 0,
  "station": [
    7,
    15
  ],
  "stations": [
    7,
    15
  ],
  "tdm_excluded_epoch_collisions": 8,
  "tdm_skipped_no_observations": 6,
  "tdm_skipped_unk": 134
}
