{
  "built": {
    "at": "2026-11-05T17:25:06Z",
    "builder_refs": {
      "pyEfis": "980497e8d823bb3ff13dd6dc103b3c95b0370cac"
    },
    "commit": "6b3d2e542d3588bd09379657d8ce1caf36b73f3b",
    "repo": "billmallard/makerplane-data",
    "run_url": "https://github.com/billmallard/makerplane-data/actions/runs/42074346330",
    "runner": "github-hosted"
  },
  "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=procedures-conus kind=procedures cycle=2612 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 procedures, 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": "1 source(s), each with edition and sha256",
      "status": "pass",
      "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": "largest change: transitions +0.0% (52,317 -> 52,323)",
      "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": "pass",
      "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": "0 of 5 tables gone",
      "since": "AER-4102",
      "status": "pass",
      "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": "procedures(airport, kind, ident) 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": "641 (previous 641)",
      "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": "pass",
      "title": "Points outside the US coverage envelope, against the previous edition"
    },
    {
      "blocking": false,
      "cannot_catch": "A fix placed at the wrong coordinates. Legs with no fix by design (for example heading legs) are not counted.",
      "expected": "at most 0.5% of legs: a regression bound that carries forward the 0.47% observed in 2610 (950 of 201,030) and 2611 (941 of 200,853). It does not accept those legs as correct; it stops the share growing",
      "id": "PROC-FIX-001",
      "measured": "941 of 200,869 legs (0.47%)",
      "status": "pass",
      "title": "Procedure legs that name a fix the build could not place"
    },
    {
      "blocking": true,
      "cannot_catch": "Two areas' airways merged under one ident row; PROC-AWY-002 looks for that.",
      "expected": "0 duplicate idents",
      "id": "PROC-AWY-001",
      "measured": "0 duplicate idents; unique index present",
      "since": "AER-1979",
      "status": "pass",
      "title": "Airway idents are unique"
    },
    {
      "blocking": true,
      "cannot_catch": "Two areas' legs merged with sequence numbers that do not collide, and an airway whose legs are all present but in the wrong order.",
      "expected": "0 airways",
      "id": "PROC-AWY-002",
      "measured": 0,
      "since": "AER-1979",
      "status": "pass",
      "title": "No airway mixes legs from two areas (repeated sequence numbers)"
    },
    {
      "blocking": false,
      "cannot_catch": "Everything outside the fixture's handful of procedures.",
      "expected": "the fixture's procedures decode to their published legs",
      "id": "PROC-GLD-001",
      "measured": null,
      "note": "The golden fixture runs in the unit tests against the parser (tests/test_build_procedures.py), not against a built pack. Catalogue v2 (TV7) moves it here.",
      "status": "not-run",
      "title": "FAACIFP18 golden fixture"
    },
    {
      "blocking": false,
      "cannot_catch": "Errors that both databases share.",
      "expected": "no unexplained differences",
      "id": "PROC-DIFF-001",
      "measured": null,
      "note": "Not yet run (AER-1702). Until it is, nothing independent of the FAA source has been compared against this pack's procedures.",
      "status": "not-run",
      "title": "Independent differential against a commercial database"
    }
  ],
  "gated": true,
  "metrics": {
    "ACC-001": [
      {
        "count": 79,
        "min": 1,
        "ok": true,
        "query": "airway legs V23"
      },
      {
        "count": 28,
        "min": 1,
        "ok": true,
        "query": "airway legs J80"
      },
      {
        "count": 46,
        "min": 1,
        "ok": true,
        "query": "airway legs V1"
      }
    ],
    "GEO-002": {
      "airway_legs.fix_lat": 335,
      "legs.centre_lat": 14,
      "legs.fix_lat": 292
    },
    "PROC-FIX-001": {
      "by_fix_type": {
        "airport": 641,
        "ndb": 188,
        "vor": 112
      },
      "legs": 200869,
      "unresolved": 941
    }
  },
  "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": 21798912,
    "cycle": "2612",
    "id": "procedures-conus",
    "kind": "procedures",
    "schema_version": "1",
    "sha256": "e21d2609afde5291ac23ed3ff01f44801b374c74647a5959b96b8196f1f08e72"
  },
  "previous": {
    "cycle": "2611",
    "sha256": "2ac5c748f9406817aacff0e84855afa6460efc7bf1d823b3a73635184dfe1099"
  },
  "record": "build",
  "schema": "pack-report/1",
  "sources": [
    {
      "edition": "2612",
      "name": "CIFP_261126.zip",
      "retrieved": "2026-11-05T17:25:01Z",
      "sha256": "9bf85e1d01882b215b0d4b0e3ed3c056034d24f453c8cbf9554aa84337ea8e64",
      "url": "https://aeronav.faa.gov/Upload_313-d/cifp/CIFP_261126.zip"
    }
  ],
  "summary": {
    "fail": 0,
    "not_run": 2,
    "pass": 15,
    "warn": 0
  },
  "tables": {
    "airway_legs": {
      "prev": 16960,
      "rows": 16960
    },
    "airways": {
      "prev": 1244,
      "rows": 1244
    },
    "legs": {
      "prev": 200853,
      "rows": 200869
    },
    "procedures": {
      "prev": 14303,
      "rows": 14303
    },
    "transitions": {
      "prev": 52317,
      "rows": 52323
    }
  }
}
