{
  "status": "warn",
  "errors": [],
  "warnings": [
    {
      "code": "invalid_months",
      "message": "Records whose pub_month is not a month/season, a range of two, or empty.",
      "count": 220122,
      "see": "checks.structure.invalid_months"
    },
    {
      "code": "field_mismatches",
      "message": "Some sampled records disagreed with Entrez.",
      "count": 8,
      "see": "checks.field_validation.mismatches"
    },
    {
      "code": "identifier_mismatches",
      "message": "Sampled DOIs/PMCIDs differ from Entrez (may be assigned since our last update).",
      "count": 1,
      "see": "checks.field_validation.identifier_mismatches"
    }
  ],
  "generated_at": "2026-09-26T07:18:37-0400",
  "duration": "28m 37s",
  "peak_rss_gib": 8.802,
  "inputs": {
    "export_dir": "data/json",
    "shards": [
      "pubmed_metadata_0.ndjson.gz",
      "pubmed_metadata_1.ndjson.gz",
      "pubmed_metadata_2.ndjson.gz",
      "pubmed_metadata_3.ndjson.gz",
      "pubmed_metadata_4.ndjson.gz",
      "pubmed_metadata_5.ndjson.gz",
      "pubmed_metadata_6.ndjson.gz",
      "pubmed_metadata_7.ndjson.gz"
    ],
    "database": "available",
    "previous_report": "data/manifests/validation_report-20260821.json",
    "previous_manifest": "data/manifests/pmids-20260821.txt.gz",
    "manifest_written": "data/manifests/pmids-20260926.txt.gz",
    "online": true,
    "sample_size": 30,
    "drop_sample": 10,
    "seed": 0,
    "api_key_used": true,
    "abstract_threshold": 0.9,
    "entrez_low": 0.95,
    "entrez_high": 1.05
  },
  "skipped_checks": [],
  "checks_run": [
    {
      "name": "shards-found",
      "section": "structure",
      "expectation": "the export directory contains NDJSON shards",
      "status": "pass",
      "observed": "8 shard(s)",
      "code": "no_shards",
      "count": 0,
      "see": "inputs",
      "detail": {}
    },
    {
      "name": "records-present",
      "section": "structure",
      "expectation": "the export contains at least one record",
      "status": "pass",
      "observed": "41,153,516 record(s)",
      "code": "no_records",
      "count": 0,
      "see": "checks.structure",
      "detail": {}
    },
    {
      "name": "shard-readable",
      "section": "structure",
      "expectation": "every shard can be read to its end",
      "status": "pass",
      "observed": "0 unreadable shard(s)",
      "code": "unreadable_shard",
      "count": 0,
      "see": "checks.structure.unreadable_shards",
      "detail": {}
    },
    {
      "name": "json-parse",
      "section": "structure",
      "expectation": "every line parses as JSON",
      "status": "pass",
      "observed": "0 malformed line(s)",
      "code": "malformed_json",
      "count": 0,
      "see": "checks.structure.malformed",
      "detail": {}
    },
    {
      "name": "record-fields",
      "section": "structure",
      "expectation": "every record has all the required fields",
      "status": "pass",
      "observed": "0 record(s) missing a field",
      "code": "missing_fields",
      "count": 0,
      "see": "checks.structure.missing_fields",
      "detail": {}
    },
    {
      "name": "no-nulls",
      "section": "structure",
      "expectation": "absent values are \"\" and never null",
      "status": "pass",
      "observed": "0 null field value(s)",
      "code": "null_values",
      "count": 0,
      "see": "checks.structure.null_values",
      "detail": {}
    },
    {
      "name": "id-format",
      "section": "structure",
      "expectation": "every id looks like PMID:<digits>",
      "status": "pass",
      "observed": "0 invalid id(s)",
      "code": "invalid_ids",
      "count": 0,
      "see": "checks.structure.invalid_ids",
      "detail": {}
    },
    {
      "name": "pmid-unique",
      "section": "structure",
      "expectation": "no PMID is exported twice",
      "status": "pass",
      "observed": "0 duplicated PMID(s)",
      "code": "duplicate_pmids",
      "count": 0,
      "see": "checks.structure.duplicate_pmids",
      "detail": {}
    },
    {
      "name": "no-extra-fields",
      "section": "structure",
      "expectation": "no record carries an unexpected field",
      "status": "pass",
      "observed": "0 record(s) with extra fields",
      "code": "extra_fields",
      "count": 0,
      "see": "checks.structure.extra_fields",
      "detail": {}
    },
    {
      "name": "month-format",
      "section": "structure",
      "expectation": "pub_month is a month, season, range of those, or \"\"",
      "status": "warn",
      "observed": "220,122 invalid pub_month value(s)",
      "code": "invalid_months",
      "count": 220122,
      "see": "checks.structure.invalid_months",
      "detail": {}
    },
    {
      "name": "vs-entrez",
      "section": "coverage",
      "expectation": "within [95%, 105%] of the live PubMed total",
      "status": "pass",
      "observed": "41,153,516 of 41,210,261 (99.862%)",
      "code": "coverage_out_of_band",
      "count": 1,
      "see": "checks.coverage",
      "detail": {}
    },
    {
      "name": "vs-database",
      "section": "coverage",
      "expectation": "matches the database's latest_article count",
      "status": "pass",
      "observed": "exact match (41,153,516)",
      "code": null,
      "count": 0,
      "see": null,
      "detail": {}
    },
    {
      "name": "vs-previous",
      "section": "coverage",
      "expectation": "coverage within 10% of the previous report's",
      "status": "pass",
      "observed": "99.878% then, 99.862% now",
      "code": "coverage_drift",
      "count": 1,
      "see": "checks.coverage.previous",
      "detail": {}
    },
    {
      "name": "sample-fetched",
      "section": "field accuracy",
      "expectation": "PubMed still serves every sampled record",
      "status": "pass",
      "observed": "240 of 240 sampled record(s) returned",
      "code": "sampled_pmid_absent",
      "count": 0,
      "see": "checks.field_validation.missing_from_api",
      "detail": {}
    },
    {
      "name": "core-fields",
      "section": "field accuracy",
      "expectation": "<20% of compared fields differ from Entrez",
      "status": "warn",
      "observed": "8 of 1,598 comparison(s) differ (0.50%)",
      "code": "field_mismatches",
      "count": 8,
      "see": "checks.field_validation.mismatches",
      "detail": {
        "by_field": {
          "article_title": 4,
          "issue": 3,
          "abstract": 1
        },
        "by_kind": {
          "values_differ": 3,
          "low_similarity": 1,
          "entrez_blank": 0,
          "exported_blank": 4
        },
        "examples": {
          "values_differ": {
            "pmid": 5684047,
            "field": "article_title",
            "exported": "[Surgical results in the reconstruction of the lacrimal ducts with out cannula probes].",
            "entrez": "Surgical results in the reconstruction of the lacrimal ducts with out cannula probes."
          },
          "low_similarity": {
            "pmid": 4825553,
            "field": "abstract",
            "similarity": 0.0
          },
          "exported_blank": {
            "pmid": 1536640,
            "field": "issue",
            "exported": "",
            "entrez": "Pt 3"
          }
        }
      }
    },
    {
      "name": "abstract",
      "section": "field accuracy",
      "expectation": "abstracts at least 90% similar to Entrez",
      "status": "warn",
      "observed": "min 0.000, mean 0.994 over 158 record(s)",
      "code": null,
      "count": 0,
      "see": null,
      "detail": {}
    },
    {
      "name": "journal-soft",
      "section": "field accuracy",
      "expectation": "journal_name, journal_abbrev match Entrez (advisory)",
      "status": "pass",
      "observed": "0 of 240 record(s) differ",
      "code": "journal_mismatches",
      "count": 0,
      "see": "checks.field_validation.soft_mismatches",
      "detail": {}
    },
    {
      "name": "pub-date-soft",
      "section": "field accuracy",
      "expectation": "pub_date match Entrez (advisory)",
      "status": "pass",
      "observed": "0 of 240 record(s) differ",
      "code": "pub_date_mismatches",
      "count": 0,
      "see": "checks.field_validation.soft_mismatches",
      "detail": {}
    },
    {
      "name": "publication-types-soft",
      "section": "field accuracy",
      "expectation": "publication_types match Entrez (advisory)",
      "status": "pass",
      "observed": "0 of 240 record(s) differ",
      "code": "publication_type_mismatches",
      "count": 0,
      "see": "checks.field_validation.soft_mismatches",
      "detail": {}
    },
    {
      "name": "identifiers-soft",
      "section": "field accuracy",
      "expectation": "DOIs and PMCIDs match Entrez (advisory)",
      "status": "warn",
      "observed": "1 of 240 record(s) differ",
      "code": "identifier_mismatches",
      "count": 1,
      "see": "checks.field_validation.identifier_mismatches",
      "detail": {}
    },
    {
      "name": "deleted-gone",
      "section": "deletions",
      "expectation": "PubMed no longer serves those PMIDs either",
      "status": "pass",
      "observed": "10 of 10 confirmed gone",
      "code": "deleted_pmid_still_live",
      "count": 0,
      "see": "checks.deletions.still_live",
      "detail": {}
    },
    {
      "name": "deleted-absent",
      "section": "deletions",
      "expectation": "DB-deleted PMIDs are absent from the export",
      "status": "pass",
      "observed": "0 of 10 sampled still in the export",
      "code": "deleted_pmid_exported",
      "count": 0,
      "see": "checks.deletions.present_in_export",
      "detail": {}
    },
    {
      "name": "pmid-set-diff",
      "section": "drops since previous",
      "expectation": "no PMID vanished without a recorded deletion",
      "status": "pass",
      "observed": "762 dropped (762 explained by a recorded deletion), 164,060 added",
      "code": null,
      "count": 0,
      "see": null,
      "detail": {}
    }
  ],
  "checks": {
    "structure": {
      "records_total": 41153516,
      "records_by_shard": {
        "pubmed_metadata_0.ndjson.gz": 5252405,
        "pubmed_metadata_1.ndjson.gz": 5038080,
        "pubmed_metadata_2.ndjson.gz": 5160960,
        "pubmed_metadata_3.ndjson.gz": 5237942,
        "pubmed_metadata_4.ndjson.gz": 5191126,
        "pubmed_metadata_5.ndjson.gz": 5038080,
        "pubmed_metadata_6.ndjson.gz": 5129229,
        "pubmed_metadata_7.ndjson.gz": 5105694
      },
      "malformed": [],
      "missing_fields": {},
      "extra_fields": {},
      "null_values": [],
      "invalid_ids": [],
      "invalid_months": [
        {
          "shard": "pubmed_metadata_0.ndjson.gz",
          "line": 1422,
          "pub_month": "Dec-1971 Jan"
        },
        {
          "shard": "pubmed_metadata_0.ndjson.gz",
          "line": 19112,
          "pub_month": "Feb 2-3"
        },
        {
          "shard": "pubmed_metadata_0.ndjson.gz",
          "line": 19118,
          "pub_month": "Feb 2-3"
        },
        {
          "shard": "pubmed_metadata_0.ndjson.gz",
          "line": 19454,
          "pub_month": "Jun 7-9"
        },
        {
          "shard": "pubmed_metadata_0.ndjson.gz",
          "line": 19455,
          "pub_month": "Jun 7-9"
        },
        {
          "shard": "pubmed_metadata_0.ndjson.gz",
          "line": 19456,
          "pub_month": "Jun 7-9"
        },
        {
          "shard": "pubmed_metadata_0.ndjson.gz",
          "line": 19457,
          "pub_month": "Jun 7-9"
        },
        {
          "shard": "pubmed_metadata_0.ndjson.gz",
          "line": 19458,
          "pub_month": "Jun 7-9"
        },
        {
          "shard": "pubmed_metadata_0.ndjson.gz",
          "line": 19460,
          "pub_month": "Jun 7-9"
        },
        {
          "shard": "pubmed_metadata_0.ndjson.gz",
          "line": 19461,
          "pub_month": "Jun 7-9"
        },
        {
          "shard": "pubmed_metadata_0.ndjson.gz",
          "line": 19462,
          "pub_month": "Jun 7-9"
        },
        {
          "shard": "pubmed_metadata_0.ndjson.gz",
          "line": 19465,
          "pub_month": "Jun 7-9"
        },
        {
          "shard": "pubmed_metadata_0.ndjson.gz",
          "line": 19466,
          "pub_month": "Jun 7-9"
        },
        {
          "shard": "pubmed_metadata_0.ndjson.gz",
          "line": 19470,
          "pub_month": "Jun 7-9"
        },
        {
          "shard": "pubmed_metadata_0.ndjson.gz",
          "line": 19473,
          "pub_month": "Jun 7-9"
        },
        {
          "shard": "pubmed_metadata_0.ndjson.gz",
          "line": 19475,
          "pub_month": "Jun 7-9"
        },
        {
          "shard": "pubmed_metadata_0.ndjson.gz",
          "line": 19476,
          "pub_month": "Jun 7-9"
        },
        {
          "shard": "pubmed_metadata_0.ndjson.gz",
          "line": 19478,
          "pub_month": "Jun 7-9"
        },
        {
          "shard": "pubmed_metadata_0.ndjson.gz",
          "line": 19479,
          "pub_month": "Jun 7-9"
        },
        {
          "shard": "pubmed_metadata_0.ndjson.gz",
          "line": 19480,
          "pub_month": "Jun 7-9"
        }
      ],
      "unreadable_shards": [],
      "duplicate_pmids": [],
      "identifier_coverage": {
        "doi": {
          "records": 32228907,
          "pct": 78.31
        },
        "PMCID": {
          "records": 11571339,
          "pct": 28.12
        }
      }
    },
    "coverage": {
      "exported_count": 41153516,
      "entrez_total": 41210261,
      "pct_of_entrez": 0.9986230371120435,
      "db_latest_count": 41153516,
      "pct_of_db": 1.0,
      "previous": {
        "exported_count": 40990218,
        "pct_of_entrez": 0.998782680688731
      }
    },
    "field_validation": {
      "sampled": 240,
      "checked": 240,
      "core_comparisons": 1598,
      "core_mismatches": 8,
      "core_mismatch_rate": 0.005,
      "mismatches": [
        {
          "pmid": 1536640,
          "field": "issue",
          "exported": "",
          "entrez": "Pt 3"
        },
        {
          "pmid": 4825553,
          "field": "abstract",
          "similarity": 0.0
        },
        {
          "pmid": 5684047,
          "field": "article_title",
          "exported": "[Surgical results in the reconstruction of the lacrimal ducts with out cannula probes].",
          "entrez": "Surgical results in the reconstruction of the lacrimal ducts with out cannula probes."
        },
        {
          "pmid": 10205128,
          "field": "article_title",
          "exported": "Rationing-talk and action in health care ",
          "entrez": "Rationing-talk and action in health care."
        },
        {
          "pmid": 13919374,
          "field": "issue",
          "exported": "",
          "entrez": "1"
        },
        {
          "pmid": 27576470,
          "field": "issue",
          "exported": "",
          "entrez": "1"
        },
        {
          "pmid": 33511611,
          "field": "article_title",
          "exported": "",
          "entrez": "[Not Available]."
        },
        {
          "pmid": 36326224,
          "field": "article_title",
          "exported": "[An infectious diseases ward dedicated to elderly patients: why and how?]",
          "entrez": "[An infectious diseases ward dedicated to elderly patients: why and how?]."
        }
      ],
      "mismatches_by_field": {
        "article_title": 4,
        "issue": 3,
        "abstract": 1
      },
      "mismatches_by_kind": {
        "values_differ": 3,
        "low_similarity": 1,
        "entrez_blank": 0,
        "exported_blank": 4
      },
      "soft_mismatches": [],
      "identifier_mismatches": [
        {
          "pmid": 6491726,
          "field": "identifiers",
          "exported": [
            "PMID:6491726",
            "PMCID:PMC6564706"
          ],
          "entrez": [
            "PMID:6491726",
            "PMCID:PMC6564706",
            "doi:10.1523/JNEUROSCI.04-10-02614.1984"
          ]
        }
      ],
      "missing_from_api": [],
      "abstract_similarity": {
        "min": 0.0,
        "mean": 0.994
      }
    },
    "deletions": {
      "source": "database",
      "candidates_checked": 10,
      "present_in_export": [],
      "confirmed_deleted": [
        42307586,
        42429189,
        36115684,
        41911725,
        42672189,
        42575377,
        42377882,
        42012241,
        42549700,
        42204118
      ],
      "still_live": [],
      "unknown": []
    },
    "drops_since_previous": {
      "previous_manifest": "data/manifests/pmids-20260821.txt.gz",
      "previous_count": 40990218,
      "current_count": 41153516,
      "dropped": 762,
      "added": 164060,
      "explained_by_deletion": [
        17247233,
        17247242,
        17247253,
        17247263,
        17247264,
        17247280,
        17247288,
        17247293,
        17247307,
        17247308,
        17247316,
        17247319,
        17247330,
        17247332,
        17247337,
        19112521,
        19668072,
        19802336,
        20418964,
        20632863
      ],
      "explained_by_deletion_count": 762,
      "unexplained": [],
      "unexplained_count": 0,
      "added_examples": [
        41101975,
        41130795,
        42550891,
        42551701,
        42613315,
        42613316,
        42613317,
        42613318,
        42613319,
        42613320,
        42613321,
        42613322,
        42613323,
        42613324,
        42613325,
        42613326,
        42613327,
        42613328,
        42613329,
        42613330
      ]
    }
  }
}
