{
  "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=navaids-conus kind=navaids cycle=2611 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": "attribution and license present",
      "status": "pass",
      "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 navaids, 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; 3/3 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 change in the values inside an unchanged column layout.",
      "expected": "no added, removed, retyped or widened column",
      "id": "SG-001",
      "measured": null,
      "note": "Needs the upstream CSVs (--inputs). The guard runs on the live download at build time.",
      "since": "NASR 26-01",
      "status": "not-run",
      "title": "schema_guard layer 1: input CSV structure matches the committed snapshot"
    },
    {
      "blocking": true,
      "cannot_catch": "A column that is present but filled with wrong or blank values.",
      "expected": "all required headers present",
      "id": "SG-002",
      "measured": null,
      "note": "Needs the upstream CSVs (--inputs). The guard runs on the live download at build time.",
      "since": "NASR 26-01",
      "status": "not-run",
      "title": "schema_guard layer 2: every column the builder reads is present"
    },
    {
      "blocking": true,
      "cannot_catch": "A known value used with a new meaning, and every column the contract does not police.",
      "expected": "no unknown value in a policed column",
      "id": "SG-003",
      "measured": null,
      "note": "Needs the upstream CSVs (--inputs). The guard runs on the live download at build time.",
      "since": "NASR 26-01",
      "status": "not-run",
      "title": "schema_guard layer 3: policed columns hold only known values"
    },
    {
      "blocking": true,
      "cannot_catch": "A loss smaller than half an observed build, and a table with enough rows that are wrong.",
      "expected": "every floored table at or above its floor (half an observed build)",
      "id": "SG-004",
      "measured": "awy_segments 17,310 (floor 8,600); fixes 70,060 (floor 35,000); navaids 1,608 (floor 800)",
      "since": "NASR 26-01",
      "status": "pass",
      "title": "schema_guard layer 4: output tables clear their row floors"
    },
    {
      "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": "fixes(id) 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 2,139 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": false,
      "cannot_catch": "Whether any one reuse is legitimate; the check only counts them.",
      "expected": "no more reused navaid idents or airway sequence numbers than the previous edition",
      "id": "UNQ-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: navaids(id, type) 33; awy_segments(awy_id, seq) 332.",
      "status": "not-run",
      "title": "Identifiers the FAA reuses, against the previous edition"
    }
  ],
  "gated": true,
  "metrics": {
    "ACC-001": [
      {
        "count": 2,
        "min": 1,
        "ok": true,
        "query": "ident lookup DEN"
      },
      {
        "count": 2,
        "min": 1,
        "ok": true,
        "query": "ident lookup SEA"
      },
      {
        "count": 2,
        "min": 1,
        "ok": true,
        "query": "ident lookup LAX"
      }
    ],
    "GEO-002": {
      "awy_segments.lat1": 570,
      "awy_segments.lat2": 599,
      "fixes.lat": 946,
      "navaids.lat": 24
    },
    "UNQ-002": {
      "awy_segments(awy_id, seq)": 332,
      "navaids(id, type)": 33
    }
  },
  "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": 5812224,
    "cycle": "2611",
    "id": "navaids-conus",
    "kind": "navaids",
    "schema_version": "1",
    "sha256": "2cb9eca314387c9d93f0fe92cd33f509bfe989cac1e7331b88077ce41ad5725b"
  },
  "previous": null,
  "record": "retro",
  "retro": {
    "commit": "0dc3dcd2bbe2337d6a08a2846af9c395ea561ffb",
    "probe_refs": {
      "pyEfis": "31110ec077522536e440a2bda9f1eae7083495de"
    },
    "run_url": null,
    "runner": "local",
    "written_at": "2026-11-01T00:48:40Z"
  },
  "schema": "pack-report/1",
  "sources": [],
  "summary": {
    "fail": 0,
    "not_run": 8,
    "pass": 9,
    "warn": 0
  },
  "tables": {
    "awy_segments": {
      "prev": null,
      "rows": 17310
    },
    "fixes": {
      "prev": null,
      "rows": 70060
    },
    "navaids": {
      "prev": null,
      "rows": 1608
    }
  }
}
