{
  "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=procedures-conus kind=procedures 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 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": 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": "largest change: airways -17.3% (1,504 -> 1,244)",
      "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": "warn",
      "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 1,007)",
      "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,853 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": true,
      "cannot_catch": "A record that is present but decoded wrong; PROC-MSA-002 and -003 look for that.",
      "expected": "as many MSA records (and continuation records) in the pack as PS records in the source FAACIFP18",
      "id": "PROC-MSA-001",
      "measured": "no msa table",
      "since": "AER-4446",
      "status": "fail",
      "title": "Every PS record in the source file is in the msa table"
    },
    {
      "blocking": true,
      "cannot_catch": "A consistent set of sectors with the wrong altitude in one of them, and a column shift that keeps the bearings contiguous.",
      "expected": "0 records: every sector ends where the next begins, the last closes on the first, and together they span 360 degrees (one sector: start equals end)",
      "id": "PROC-MSA-002",
      "measured": "no msa table",
      "since": "AER-4446",
      "status": "fail",
      "title": "Each MSA's sectors cover 360 degrees with no gap or overlap"
    },
    {
      "blocking": true,
      "cannot_catch": "A wrong value inside the bounds, such as 5200 coded where the plate says 5900.",
      "expected": "altitudes 1,000-20,000 ft, radii 10-50 nm, bearings referenced M or T",
      "id": "PROC-MSA-003",
      "measured": "no msa table",
      "since": "AER-4446",
      "status": "fail",
      "title": "MSA altitudes, radii and bearing references are plausible"
    },
    {
      "blocking": false,
      "cannot_catch": "A centre placed at the wrong coordinates.",
      "expected": "at most 0.1% of MSA records, every one listed: a regression bound that carries forward the 1 of 6,058 observed in 2611 (KHRJ HQT, an NDB the file does not define). It does not accept those records as correct; they are stored with no position, never a guessed one",
      "id": "PROC-MSA-004",
      "measured": "no msa table",
      "since": "AER-4446",
      "status": "fail",
      "title": "MSA centre fixes the build could not place"
    },
    {
      "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": 200853,
      "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": "2611",
    "id": "procedures-conus",
    "kind": "procedures",
    "schema_version": "1",
    "sha256": "2ac5c748f9406817aacff0e84855afa6460efc7bf1d823b3a73635184dfe1099"
  },
  "previous": {
    "cycle": "2610",
    "sha256": "e373c924c3febb08bb97d9320b4f322d2fbb66583cd0fcf0aa473b9d3ed20385"
  },
  "record": "retro",
  "retro": {
    "commit": "0dc3dcd2bbe2337d6a08a2846af9c395ea561ffb",
    "probe_refs": {
      "pyEfis": "31110ec077522536e440a2bda9f1eae7083495de"
    },
    "run_url": null,
    "runner": "local",
    "written_at": "2026-11-01T00:54:03Z"
  },
  "schema": "pack-report/1",
  "sources": [],
  "summary": {
    "fail": 4,
    "not_run": 3,
    "pass": 13,
    "warn": 1
  },
  "tables": {
    "airway_legs": {
      "prev": 19391,
      "rows": 16960
    },
    "airways": {
      "prev": 1504,
      "rows": 1244
    },
    "legs": {
      "prev": 201030,
      "rows": 200853
    },
    "procedures": {
      "prev": 14338,
      "rows": 14303
    },
    "transitions": {
      "prev": 52352,
      "rows": 52317
    }
  }
}
