{
  "conformance": {
    "checked": 1,
    "counts": {
      "SKIPPED": 1
    },
    "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": 33,
    "note": "counts here move when correlation improves; the five primary metrics do not (see docs/decisions/0002-unk-participants.md)",
    "objects": 34,
    "objects_not_in_advisory": 34,
    "tracks_resolved_beyond_advisory": 50,
    "tracks_with_object": 50,
    "tracks_without_object": 325,
    "unk_designations": 325
  },
  "correlation_run_id": 33,
  "correlation_version": 4,
  "date": "2026-08-23",
  "epoch_collisions": {
    "detail": [
      {
        "epoch": "2026-08-23T22:24:18.435506",
        "excluded_measurements": 7,
        "kind": "contradictory",
        "measurements": [
          "15ebf3bf-98cf-5c7d-8ada-a102d4bafc2c",
          "511b890f-8189-54a2-a7b4-fda2460227c3",
          "74efaf5f-517e-5e2f-bf6c-8f8d47fcc6e9",
          "7ebed2f6-a442-56ad-8000-90d76e052c7a",
          "9540ea9a-1309-5086-a155-255ecce02221",
          "d2c3ca4b-33ba-564c-8e9e-8acbc40f5949",
          "d3aad540-3902-5843-81f2-016d0d3674f7"
        ],
        "object_norad_id": 62324,
        "positions": [
          "235.847775 72.963026",
          "236.647778 72.879935",
          "237.423302 72.792455",
          "240.419372 72.425324",
          "240.802689 72.372061",
          "241.195639 72.316989",
          "243.719278 71.942471"
        ],
        "published_observations": 0,
        "scope": "sibling-tracks",
        "sibling_track_ids": [
          38,
          39,
          40,
          41,
          42,
          43,
          44
        ],
        "station_id": 4,
        "track_id": 38
      },
      {
        "epoch": "2026-08-24T00:19:17.842814",
        "excluded_measurements": 8,
        "kind": "contradictory",
        "measurements": [
          "a404c7f5-2ea9-5a22-ad56-f0bbf411e045",
          "d0d53805-6dff-5048-b759-ab043cd138d2",
          "d12fa4f4-5db9-59b1-85b8-bf8ade89bb2e",
          "d8129cf0-e0f1-5910-8b9f-7c9de25efbfd",
          "e6c8eccd-aac7-56fa-9df2-bebaa43f0fdb",
          "e927f087-f670-5853-a440-d228846811d0",
          "eaf5a15d-d33f-5304-86a3-7e457cd8358f",
          "f90180ee-6ce1-5030-afae-7b4195961d4d"
        ],
        "object_norad_id": 67239,
        "positions": [
          "276.048057 67.946749",
          "276.485085 68.160574",
          "276.939210 68.375856",
          "277.229616 68.512675",
          "277.758132 68.754818",
          "277.987311 68.857641",
          "278.353285 69.020082",
          "278.714771 69.176675"
        ],
        "published_observations": 0,
        "scope": "sibling-tracks",
        "sibling_track_ids": [
          74,
          75,
          76,
          77,
          78,
          79,
          80,
          81
        ],
        "station_id": 4,
        "track_id": 74
      },
      {
        "epoch": "2026-08-24T02:16:06.598193",
        "excluded_measurements": 2,
        "kind": "contradictory",
        "measurements": [
          "308e589d-d162-5db9-9750-cf84c59b4511",
          "4688e07e-c0f2-5cb2-bc16-2f28bcbac4e1"
        ],
        "object_norad_id": 66923,
        "positions": [
          "304.279364 67.597751",
          "307.798763 69.271907"
        ],
        "published_observations": 0,
        "scope": "sibling-tracks",
        "sibling_track_ids": [
          292,
          294
        ],
        "station_id": 4,
        "track_id": 292
      }
    ],
    "detail_omitted": 0,
    "epochs": 3,
    "measurements_excluded": 17,
    "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": 17
  },
  "generated_at": "2026-09-22T23:54:57.630615Z",
  "generation_id": "ba32c64880a2a0d9b49fcacf7b608f0570560c17805c48e5d0a66e4dc6210356",
  "generator": "satnogs_optical_network.products",
  "iod": {
    "4": {
      "identified_lines": 50,
      "identified_tracks": 50,
      "lines": 375,
      "skipped": 0,
      "skipped_reasons": [],
      "unk_lines": 325,
      "unk_tracks": 325,
      "wide_id_tracks": 0
    }
  },
  "layout": {
    "generation_dir": "session_date=2026-08-23/generations/ba32c64880a2a0d9b49fcacf7b608f0570560c17805c48e5d0a66e4dc6210356",
    "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-23",
    "stations": "stations",
    "tracks": "tracks.parquet"
  },
  "metrics": {
    "measurements": 375,
    "objects": 0,
    "stations": 1,
    "tracks": 375,
    "unk_tracks": 375
  },
  "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": 1,
    "tdm_observations": 33,
    "tdm_observations_expected": 33,
    "tdm_observations_verified": true,
    "tdm_tracks": 33
  },
  "per_station": [
    {
      "epoch_collisions": 3,
      "iod": {
        "identified_lines": 50,
        "identified_tracks": 50,
        "lines": 375,
        "skipped": 0,
        "skipped_reasons": [],
        "unk_lines": 325,
        "unk_tracks": 325,
        "wide_id_tracks": 0
      },
      "iod_station_code": "4",
      "measurements": 375,
      "name": "optical-bench1",
      "objects": 0,
      "station_id": 4,
      "tdm_tracks": 50,
      "tracks": 375,
      "unk_tracks": 375
    }
  ],
  "products": [
    {
      "bytes": 10944,
      "conformance": null,
      "kind": "characterisation-station",
      "path": "session_date=2026-08-23/generations/ba32c64880a2a0d9b49fcacf7b608f0570560c17805c48e5d0a66e4dc6210356/stations/station-4.json",
      "scope": "station-night",
      "scope_key": "4-2026-08-23",
      "sha256": "becc950ccdd614c205d64a7d24fc862399656275aba95b7e994aa7d92cc2eeb9"
    },
    {
      "bytes": 25125,
      "conformance": null,
      "kind": "iod-station-night",
      "path": "session_date=2026-08-23/generations/ba32c64880a2a0d9b49fcacf7b608f0570560c17805c48e5d0a66e4dc6210356/iod/station-4-2026-08-23.iod",
      "scope": "station-night",
      "scope_key": "4-2026-08-23",
      "sha256": "1a1301f8b620ad6d3dc6789973d4ed34959b8dfc7fc5b6ea1408fa753bd3a175"
    },
    {
      "bytes": 70348,
      "conformance": null,
      "kind": "parquet-session",
      "path": "session_date=2026-08-23/generations/ba32c64880a2a0d9b49fcacf7b608f0570560c17805c48e5d0a66e4dc6210356/measurements.parquet",
      "scope": "session",
      "scope_key": "2026-08-23",
      "sha256": "fd28f5bbdb00bcc04d9ad8e9e2c3571b4dce39ec8833f8ea761ac8701f2a3eec"
    },
    {
      "bytes": 31982,
      "conformance": null,
      "kind": "parquet-tracks",
      "path": "session_date=2026-08-23/generations/ba32c64880a2a0d9b49fcacf7b608f0570560c17805c48e5d0a66e4dc6210356/tracks.parquet",
      "scope": "session",
      "scope_key": "2026-08-23",
      "sha256": "dded47aba2b4c46d3ff727f09394e1eb8d616220811af7415b48f9ada37b8aad"
    },
    {
      "bytes": 22789,
      "conformance": "SKIPPED: Orekit conformance NOT VERIFIED for station-4-2026-08-23.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": 33,
      "path": "session_date=2026-08-23/generations/ba32c64880a2a0d9b49fcacf7b608f0570560c17805c48e5d0a66e4dc6210356/tdm/station-4-2026-08-23.tdm",
      "scope": "station-night",
      "scope_key": "4-2026-08-23",
      "sha256": "c1078fcd73f3b3de61a8642e1a0c364b75417854c31d68e7fc08d466aac8a995"
    }
  ],
  "quarantined_excluded": 5,
  "station": 4,
  "stations": [
    4
  ],
  "tdm_excluded_epoch_collisions": 17,
  "tdm_skipped_no_observations": 17,
  "tdm_skipped_unk": 325
}
