{
  "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": 147,
    "note": "counts here move when correlation improves; the five primary metrics do not (see docs/decisions/0002-unk-participants.md)",
    "objects": 44,
    "objects_not_in_advisory": 12,
    "tracks_resolved_beyond_advisory": 22,
    "tracks_with_object": 56,
    "tracks_without_object": 10,
    "unk_designations": 10
  },
  "correlation_run_id": 147,
  "correlation_version": 4,
  "date": "2026-08-27",
  "epoch_collisions": {
    "detail": [
      {
        "epoch": "2026-08-27T18:24:12.409733",
        "excluded_measurements": 3,
        "kind": "contradictory",
        "measurements": [
          "c6ebe9f2-4c8b-5f50-89cc-2a8d1fee82bf",
          "c9395027-ab38-56ee-be58-c2c1c74a521f",
          "e039f4fd-5796-535c-b62b-5b96fa45267b"
        ],
        "object_norad_id": 69711,
        "positions": [
          "168.138744 63.814580",
          "168.520560 63.809625",
          "172.223065 63.724679"
        ],
        "published_observations": 0,
        "scope": "sibling-tracks",
        "sibling_track_ids": [
          5244,
          5245,
          5246
        ],
        "station_id": 4,
        "track_id": 5244
      },
      {
        "epoch": "2026-08-27T21:39:54.845286",
        "excluded_measurements": 2,
        "kind": "contradictory",
        "measurements": [
          "1ea02d53-7ac8-5840-a4ae-9a0d8a649f19",
          "8f45247e-ec28-5f4e-9b36-1cb434eff820"
        ],
        "object_norad_id": 68652,
        "positions": [
          "226.829472 65.190694",
          "228.971961 64.811023"
        ],
        "published_observations": 0,
        "scope": "sibling-tracks",
        "sibling_track_ids": [
          5271,
          5272
        ],
        "station_id": 4,
        "track_id": 5271
      },
      {
        "epoch": "2026-08-28T01:26:47.868555",
        "excluded_measurements": 5,
        "kind": "contradictory",
        "measurements": [
          "141c4293-84cd-5020-bc65-103cf3f755f5",
          "8827d063-a246-5edf-b6f7-f095982825cb",
          "98ce1bec-49f1-56c5-bd61-90ce0c50b417",
          "9aabb6d3-98b6-5a31-921b-bc5b146bbaba",
          "b94cc7d3-7f9e-5434-9cfa-fb391d70b21f"
        ],
        "object_norad_id": 28926,
        "positions": [
          "277.945720 67.891202",
          "278.174497 68.136704",
          "278.474546 68.447505",
          "278.665109 68.662181",
          "278.898894 68.870195"
        ],
        "published_observations": 0,
        "scope": "sibling-tracks",
        "sibling_track_ids": [
          5281,
          5282,
          5283,
          5284,
          5285
        ],
        "station_id": 4,
        "track_id": 5281
      }
    ],
    "detail_omitted": 0,
    "epochs": 3,
    "measurements_excluded": 10,
    "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": 3,
    "tracks_left_without_observations": 7
  },
  "generated_at": "2026-09-22T23:46:57.514475Z",
  "generation_id": "93f9384060fd4bfc38c1623e479050f9b16c333af0fbc91c5836e1b005973d5f",
  "generator": "satnogs_optical_network.products",
  "iod": {
    "11": {
      "identified_lines": 4,
      "identified_tracks": 3,
      "lines": 4,
      "skipped": 0,
      "skipped_reasons": [],
      "unk_lines": 0,
      "unk_tracks": 0,
      "wide_id_tracks": 0
    },
    "4": {
      "identified_lines": 2511,
      "identified_tracks": 53,
      "lines": 3082,
      "skipped": 0,
      "skipped_reasons": [],
      "unk_lines": 571,
      "unk_tracks": 10,
      "wide_id_tracks": 0
    }
  },
  "layout": {
    "generation_dir": "session_date=2026-08-27/generations/93f9384060fd4bfc38c1623e479050f9b16c333af0fbc91c5836e1b005973d5f",
    "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-08-27",
    "stations": "stations",
    "tracks": "tracks.parquet"
  },
  "metrics": {
    "measurements": 3086,
    "objects": 32,
    "stations": 2,
    "tracks": 66,
    "unk_tracks": 32
  },
  "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": 2505,
    "tdm_observations_expected": 2505,
    "tdm_observations_verified": true,
    "tdm_tracks": 49
  },
  "per_station": [
    {
      "epoch_collisions": 3,
      "iod": {
        "identified_lines": 2511,
        "identified_tracks": 53,
        "lines": 3082,
        "skipped": 0,
        "skipped_reasons": [],
        "unk_lines": 571,
        "unk_tracks": 10,
        "wide_id_tracks": 0
      },
      "iod_station_code": "4",
      "measurements": 3082,
      "name": "optical-bench1",
      "objects": 32,
      "station_id": 4,
      "tdm_tracks": 53,
      "tracks": 63,
      "unk_tracks": 29
    },
    {
      "epoch_collisions": 0,
      "iod": {
        "identified_lines": 4,
        "identified_tracks": 3,
        "lines": 4,
        "skipped": 0,
        "skipped_reasons": [],
        "unk_lines": 0,
        "unk_tracks": 0,
        "wide_id_tracks": 0
      },
      "iod_station_code": "11",
      "measurements": 4,
      "name": "dwingeloo",
      "objects": 0,
      "station_id": 11,
      "tdm_tracks": 3,
      "tracks": 3,
      "unk_tracks": 3
    }
  ],
  "products": [
    {
      "bytes": 9536,
      "conformance": null,
      "kind": "characterisation-station",
      "path": "session_date=2026-08-27/generations/93f9384060fd4bfc38c1623e479050f9b16c333af0fbc91c5836e1b005973d5f/stations/station-11.json",
      "scope": "station-night",
      "scope_key": "11-2026-08-27",
      "sha256": "53649e362bbc9f1db1b52324cf8f58e026ad80c3d5746a9715778ca8377c7dd7"
    },
    {
      "bytes": 10955,
      "conformance": null,
      "kind": "characterisation-station",
      "path": "session_date=2026-08-27/generations/93f9384060fd4bfc38c1623e479050f9b16c333af0fbc91c5836e1b005973d5f/stations/station-4.json",
      "scope": "station-night",
      "scope_key": "4-2026-08-27",
      "sha256": "2e72c74604c50bc692d4adaee0f5696959bcea1a256d95188fdb74437be892b8"
    },
    {
      "bytes": 268,
      "conformance": null,
      "kind": "iod-station-night",
      "path": "session_date=2026-08-27/generations/93f9384060fd4bfc38c1623e479050f9b16c333af0fbc91c5836e1b005973d5f/iod/station-11-2026-08-27.iod",
      "scope": "station-night",
      "scope_key": "11-2026-08-27",
      "sha256": "9111c6cce5bb25c8ffcc28b77317415c029435c4278393b2fba447592d27ba4c"
    },
    {
      "bytes": 206494,
      "conformance": null,
      "kind": "iod-station-night",
      "path": "session_date=2026-08-27/generations/93f9384060fd4bfc38c1623e479050f9b16c333af0fbc91c5836e1b005973d5f/iod/station-4-2026-08-27.iod",
      "scope": "station-night",
      "scope_key": "4-2026-08-27",
      "sha256": "f161772bba6892f78c8df6820a1048f61202e843afa9958d776dc7b4179d84c0"
    },
    {
      "bytes": 287918,
      "conformance": null,
      "kind": "parquet-session",
      "path": "session_date=2026-08-27/generations/93f9384060fd4bfc38c1623e479050f9b16c333af0fbc91c5836e1b005973d5f/measurements.parquet",
      "scope": "session",
      "scope_key": "2026-08-27",
      "sha256": "860096d814a7475d4afa597b932529a9b3a7bbe7d3394e73b24ba56288f10600"
    },
    {
      "bytes": 12951,
      "conformance": null,
      "kind": "parquet-tracks",
      "path": "session_date=2026-08-27/generations/93f9384060fd4bfc38c1623e479050f9b16c333af0fbc91c5836e1b005973d5f/tracks.parquet",
      "scope": "session",
      "scope_key": "2026-08-27",
      "sha256": "30ab05befffb5b298eacbd98289eb1bc456fe5fb81fa0158da68650402055c94"
    },
    {
      "bytes": 2812,
      "conformance": "SKIPPED: Orekit conformance NOT VERIFIED for station-11-2026-08-27.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": 4,
      "path": "session_date=2026-08-27/generations/93f9384060fd4bfc38c1623e479050f9b16c333af0fbc91c5836e1b005973d5f/tdm/station-11-2026-08-27.tdm",
      "scope": "station-night",
      "scope_key": "11-2026-08-27",
      "sha256": "78970758729981e014ba03788991f6a9f3146062fc296059cec73080978eb21d"
    },
    {
      "bytes": 315807,
      "conformance": "SKIPPED: Orekit conformance NOT VERIFIED for station-4-2026-08-27.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": 2501,
      "path": "session_date=2026-08-27/generations/93f9384060fd4bfc38c1623e479050f9b16c333af0fbc91c5836e1b005973d5f/tdm/station-4-2026-08-27.tdm",
      "scope": "station-night",
      "scope_key": "4-2026-08-27",
      "sha256": "74d9ebcbdc0494f8995a54532a4b6cec687b9880e81525506adc429942ff2064"
    }
  ],
  "quarantined_excluded": 0,
  "station": [
    4,
    11
  ],
  "stations": [
    4,
    11
  ],
  "tdm_excluded_epoch_collisions": 10,
  "tdm_skipped_no_observations": 7,
  "tdm_skipped_unk": 10
}
