{
  "built": {
    "at": null,
    "builder_refs": {},
    "commit": null,
    "repo": "billmallard/makerplane-data",
    "run_url": null,
    "runner": null
  },
  "checks": [
    {
      "blocking": true,
      "cannot_catch": "A pack_meta that is well formed but names the wrong id or cycle for the bytes inside.",
      "expected": "pack_meta present; kind is one the device knows",
      "id": "PACK-001",
      "measured": "id=obstacles-conus kind=obstacles cycle=260806 schema_version=1",
      "status": "pass",
      "title": "pack_meta is readable and names a known kind"
    },
    {
      "blocking": true,
      "cannot_catch": "A license tag or attribution that is present but wrong for the data.",
      "expected": "both non-empty",
      "id": "PACK-002",
      "measured": "missing: license",
      "status": "fail",
      "title": "Attribution and license are recorded in pack_meta"
    },
    {
      "blocking": true,
      "cannot_catch": "Whether the label matches where the data really came from. For a kind with a default label (ORIGIN_BY_KIND in packtools/report.py) the label comes from that table, not from the builder or the pack, so the check is tautological and always passes; measured says which. With --origin it shows only that the label given is one of the three.",
      "expected": "one of federal / community / user-supplied",
      "id": "PACK-003",
      "measured": "federal (defaulted by kind obstacles, not read from the pack)",
      "since": "AER-699",
      "status": "pass",
      "title": "Origin label is federal, community or user-supplied"
    },
    {
      "blocking": false,
      "cannot_catch": "A recorded source that is not the one the build actually used, and an edition or sha256 that is well formed but wrong.",
      "expected": "at least one source, each with a non-empty edition and a 64-hex sha256",
      "id": "PACK-004",
      "measured": null,
      "note": "Retro record: this edition was published before pack-report/1 existed, and the upstream inputs it was built from were not recorded then and cannot be recovered from the pack.",
      "status": "not-run",
      "title": "Upstream sources are recorded"
    },
    {
      "blocking": true,
      "cannot_catch": "Wrong values the reader accepts. It shows the device can open and query these bytes, not that what it returns is right. The queries cover fixed points only: US kinds, 5 CONUS metros (Denver, Seattle, Atlanta, Los Angeles and Chicago); airports (Canada), Toronto and Vancouver; water, Puget Sound, Lake Michigan and Lake Ontario; navaids, idents DEN, SEA, LAX; procedures, airways V23, J80, V1; terrain, one native tile or the coarsest mosaic level. So it cannot catch a missing Alaska, Hawaii or Puerto Rico, or any state or province that holds none of those points.",
      "expected": "the reader opens the pack and every query returns data",
      "id": "ACC-001",
      "measured": "opened; 5/5 queries returned data",
      "status": "pass",
      "title": "Device acceptance: pyEfis's own reader opens the pack and answers a fixed query set"
    },
    {
      "blocking": true,
      "cannot_catch": "Wrong data in a structurally sound file, and an index whose contents do not match its table: quick_check does not verify index contents, which is SQLite's documented difference from integrity_check. IDX-001 covers the R-trees.",
      "expected": "ok",
      "id": "SQL-001",
      "measured": "ok",
      "status": "pass",
      "title": "SQLite structure is sound (PRAGMA quick_check)"
    },
    {
      "blocking": true,
      "cannot_catch": "A table that has rows but is missing most of them.",
      "expected": "0 empty tables, apart from those declared empty by design for the kind (water: waterway_lines)",
      "id": "ROW-001",
      "measured": 0,
      "status": "pass",
      "title": "No data table is empty"
    },
    {
      "blocking": false,
      "cannot_catch": "A change that keeps counts steady (rows replaced by wrong rows), any defect already present in the previous edition, and a loss under the threshold (for obstacles at 10%, about 65,000 rows).",
      "expected": "Provisional threshold: no table moves more than 10%; a larger move needs a build note",
      "id": "ROW-002",
      "measured": null,
      "not_run_reason": "no-previous",
      "note": "Retro record: no earlier edition is listed, so there is nothing to compare against. Editions published before the ones the manifest lists were pruned and are not known here.",
      "provisional": "no edition-to-edition baseline yet (one published pair per kind when set); a warn level for a person to look at, to be re-set once enough records exist (AER-4102)",
      "status": "not-run",
      "title": "Row counts against the previous edition"
    },
    {
      "blocking": true,
      "cannot_catch": "A table dropped together with a schema_version bump that should not have been; the bump is taken as the declaration that the drop is intended.",
      "expected": "every table in the previous edition is still present, unless schema_version changed",
      "id": "ROW-003",
      "measured": null,
      "not_run_reason": "no-previous",
      "note": "Retro record: no earlier edition is listed, so there is nothing to compare against. Editions published before the ones the manifest lists were pruned and are not known here.",
      "since": "AER-4102",
      "status": "not-run",
      "title": "No table of the previous edition has disappeared"
    },
    {
      "blocking": true,
      "cannot_catch": "A plausible coordinate in the wrong place, such as a transposed digit that still lands on land. On airway_legs, a leg with a NULL fix position (no check counts those).",
      "expected": "0 bad coordinates. On point tables a NULL latitude or longitude is bad; on procedure and airway legs a leg with no fix position is left to PROC-FIX-001",
      "id": "GEO-001",
      "measured": 0,
      "status": "pass",
      "title": "Coordinates are present, valid and not at 0,0"
    },
    {
      "blocking": true,
      "cannot_catch": "Two different things given the same correct-looking identifier in different tables, and a wrong identifier that happens to be unique.",
      "expected": "0 duplicates",
      "id": "UNQ-001",
      "measured": "obstacles(oas_no) 0",
      "status": "pass",
      "title": "Identifiers that must be unique are unique"
    },
    {
      "blocking": false,
      "cannot_catch": "A point moved to the wrong place inside the envelope; the envelope is a handful of boxes, not a coastline.",
      "expected": "Provisional threshold: no growth beyond 25 points or 10%, whichever is larger. FAA files carry real oceanic and foreign points, so the count is tracked, not forbidden",
      "id": "GEO-002",
      "measured": null,
      "not_run_reason": "no-previous",
      "note": "Retro record: no earlier edition is listed, so there is nothing to compare against. Editions published before the ones the manifest lists were pruned and are not known here. This edition has 5,228 such points; the next edition compares against that.",
      "provisional": "no edition-to-edition baseline yet (one published pair per kind when set); a warn level for a person to look at, to be re-set once enough records exist (AER-4102)",
      "status": "not-run",
      "title": "Points outside the US coverage envelope, against the previous edition"
    },
    {
      "blocking": true,
      "cannot_catch": "A loss smaller than half an observed build (ROW-002 tracks that against the previous edition, as a warn), and rows that are present but wrong.",
      "expected": "at or above the floor: half an observed build (half of the 657,181 obstacles in 261001)",
      "id": "OBS-001",
      "measured": "obstacles 652,407 (floor 328,500)",
      "since": "AER-4102",
      "status": "pass",
      "title": "The obstacles table clears its row floor"
    }
  ],
  "gated": true,
  "metrics": {
    "ACC-001": [
      {
        "count": 11,
        "min": 1,
        "ok": true,
        "query": "obstacles within 10 nm of Denver"
      },
      {
        "count": 93,
        "min": 1,
        "ok": true,
        "query": "obstacles within 10 nm of Seattle"
      },
      {
        "count": 249,
        "min": 1,
        "ok": true,
        "query": "obstacles within 10 nm of Atlanta"
      },
      {
        "count": 193,
        "min": 1,
        "ok": true,
        "query": "obstacles within 10 nm of Los Angeles"
      },
      {
        "count": 272,
        "min": 1,
        "ok": true,
        "query": "obstacles within 10 nm of Chicago"
      }
    ],
    "GEO-002": {
      "obstacles.lat": 5228
    }
  },
  "notice": "Experimental / Amateur-Built use only. Not certified. This data is provided as-is with no warranty and any use of the data is at your own risk.",
  "origin": "federal",
  "pack": {
    "bytes": 76529664,
    "cycle": "260806",
    "id": "obstacles-conus",
    "kind": "obstacles",
    "schema_version": "1",
    "sha256": "9886da87e22afbf3515a18278149564665856e7597dd9e34bae9651e32d47ad0"
  },
  "previous": null,
  "record": "retro",
  "retro": {
    "commit": "0dc3dcd2bbe2337d6a08a2846af9c395ea561ffb",
    "probe_refs": {
      "pyEfis": "31110ec077522536e440a2bda9f1eae7083495de"
    },
    "run_url": null,
    "runner": "local",
    "written_at": "2026-11-01T00:53:50Z"
  },
  "schema": "pack-report/1",
  "sources": [],
  "summary": {
    "fail": 1,
    "not_run": 4,
    "pass": 8,
    "warn": 0
  },
  "tables": {
    "obstacles": {
      "prev": null,
      "rows": 652407
    }
  }
}
