Skip to content

GeneReviews and StatPearls Baseline Check

just check-genereviews answers, offline, the first question the review skill's item 15 asks of a new Mendelian entry: does a GeneReviews chapter exist for this disease, and is it tagged? It also reports the same for StatPearls, which is a different kind of source (below), and it is deliberately only semi-deterministic.

Why it exists

The review skill used to answer "does a chapter exist" with a curl to PubMed. The automated PR reviewer runs in a sandbox that permits just and uv run and blocks every network tool, so on PR #11592 it recorded, in two consecutive reviews, that it could not verify the entry's "no GeneReviews chapter exists for isolated Dandy-Walker malformation" note, and the curator had to prove the negative by hand in a comment. The question is answerable from data the repository can carry.

How it works

PubMed indexes both collections as books, so the [book] search field selects every chapter exactly:

genereviews[book]   ->   958 chapters
statpearls[book]    -> 9,646 chapters       (snapshot 2026-09-10)

just refresh-bookshelf-index pulls those lists plus each record's title, NBK accession and date into cache/bookshelf/genereviews.csv and cache/bookshelf/statpearls.csv, with the snapshot date in cache/bookshelf/MANIFEST.yaml. Rows are sorted by PMID and carry no per-row timestamps, so the diff after a refresh is exactly the chapters that appeared, retired, or were renamed. The check then compares each entry against that index.

Two of its answers are deterministic and one is a judgement, and the report keeps them apart:

Verdict Meaning Gates?
MISTAGGED a reference tagged GeneReviews (or StatPearls) is not a chapter of that collection GeneReviews only
CITED_UNTAGGED a chapter PMID or NBK URL is cited somewhere in the file but not tagged in references: GeneReviews only
UNTAGGED_CHAPTER a chapter whose title, normalised, equals one of the entry's names exists and is not tagged GeneReviews only
TAGGED at least one tagged reference is a verified, current chapter no
TAGGED_RETIRED every tagged chapter is one GeneReviews has retired (below) no
CANDIDATE_CHAPTER only partial title matches, or only a retired chapter no, by design
NO_CHAPTER nothing in the snapshot names this entry only when the entry has no synonyms (below)

Names compared are the entry name, its synonyms, and the disease_term preferred term and ontology label. Normalisation drops case, diacritics, punctuation and hyphens, a leading <GENE>-Related, and a trailing Overview, so Aicardi-Goutieres Syndrome finds Aicardi-Goutières Syndrome and Marfan Syndrome finds FBN1-Related Marfan Syndrome as EXACT.

CANDIDATE_CHAPTER is the judgement half. Alpha Thalassemia sits inside Alpha-Thalassemia X-Linked Intellectual Disability Syndrome and is not that disease's chapter; Autosomal Dominant Robinow Syndrome 1 sits under Autosomal Dominant Robinow Syndrome and is. The check lists the title and the match kind (GENE_SUFFIX, CONTAINS, TITLE_IN_NAME, NEAR, and GENE_SCOPED, below) and leaves the call to a reader. Two guards keep this list short: a numbered title never stands in for a differently numbered name (Usher Syndrome Type I is not a candidate for Usher Syndrome Type 4), and two <GENE>-Related … forms must name the same gene.

A few chapters put the gene after the disease, set off by a spaced dash: Autosomal Dominant Tubulointerstitial Kidney Disease – REN, with sibling chapters for UMOD and MUC1, Autosomal Recessive Polycystic Kidney Disease – PKHD1, and Pyridoxine-Dependent Epilepsy – ALDH7A1. Normalisation keeps the gene as a last word, so before #15904 such a title matched only a name equal to the whole title, gene included, or a name found inside it. The ADTKD-REN entry, whose synonyms include ADTKD-REN and autosomal dominant tubulointerstitial kidney disease due to mutations in REN, got NO_CHAPTER. Such a title is now also read as <disease> – <gene>, and is reported as GENE_SUFFIX when the disease part is a phrase in one of the entry's names and the gene symbol appears in one of its names or in its genetic: records (record name, gene_term preferred term or label). The gene condition is what stops the UMOD, REN and MUC1 chapters from being offered to each other's entries: the disease words are identical in all three. A GENE_SUFFIX hit is a candidate, never EXACT, so it does not make --strict fail; an entry whose name is the exact title, gene included, still gets EXACT. Only a single upper-case symbol after the dash counts as a gene, so Udd Distal Myopathy – Tibial Muscular Dystrophy is not read this way. An entry for the whole family with no gene in it (Autosomal Dominant Tubulointerstitial Kidney Disease) still sees all three chapters as CONTAINS candidates, which is the right answer for a grouping-level name.

A negative from an entry with no synonyms is not a verified negative. GeneReviews often titles a chapter by a synonym: 17q12 Recurrent Duplication is the chapter for Chromosome 17q12 Duplication Syndrome, and matching the entry name alone misses it. Stripping the synonyms: block from 88 committed entries that had a chapter match turned eight exact-title UNTAGGED_CHAPTER findings into NO_CHAPTER (#12075). So when an entry has no non-empty synonyms, a NO_CHAPTER or CANDIDATE_CHAPTER verdict carries a note listing the strings that were searched. That note is printed whenever the file is named on the command line, and --strict fails a GeneReviews NO_CHAPTER of this kind. A whole-KB run counts these verdicts on a separate summary line rather than listing them, because several hundred finished entries have no synonyms; --all lists them, and so does --strict, since they are then a reason for the non-zero exit. The fix is to add the entry's synonyms and re-run, not to record that no chapter exists. For a disease that has no synonyms anywhere (MONDO included), write an explicit synonyms: []: an empty list records that synonyms were looked for and none exist, so the negative counts as checked, while an absent synonyms key still counts as unsearched.

In --format json output, gating is true for a synonym-less GeneReviews NO_CHAPTER, so a whole-KB count of gating entries includes them. The synonymless and no_synonyms_recorded fields separate them from the other gating verdicts; TSV output does not carry either field.

Gating is opt-in (--strict) and only ever on GeneReviews. A TAGGED entry that also has an untagged candidate is reported, not failed.

just check-genereviews kb/disorders/Asthma.yaml     # one or more files
just check-genereviews                               # whole KB, findings only
just check-genereviews --strict FILE                 # exit 1 on a GeneReviews gap
just check-genereviews --online FILE                 # also live PubMed title search
just check-genereviews --format tsv > census.tsv     # machine-readable census

--online adds a live "<name>"[TI] AND genereviews[book] search per name so a chapter published after the snapshot is caught, and a <GENE>[TIAB] AND genereviews[book] search per causal gene symbol (see Gene-scoped chapters below). The name is quoted as a phrase: unquoted, PubMed drops the words it cannot match and searches what is left, so mesiodens-cataract syndrome became a search for "syndrome" (#14213). A search PubMed reports having rewritten anyway is skipped with a warning. It needs network and is not what the reviewer runs; a tagged PMID missing from the snapshot is still accepted when the cached record carries the Bookshelf citation form. A live hit is listed with match kind ONLINE, after every index match: PubMed's [TI] search finds the name's words in the title, which is not the normalised-title equality EXACT means, so an ONLINE hit makes the entry a CANDIDATE_CHAPTER and never gates. Read the title, and tag the chapter if it is this disease's.

Retired chapters

GeneReviews withdraws a chapter by appending – RETIRED CHAPTER, FOR HISTORICAL REFERENCE ONLY to its title. The index records that as retired = 1 (68 of the 958 GeneReviews chapters in the 2026-09-10 snapshot). A retired chapter is still a GeneReviews article, so tagging it GeneReviews is correct, and removing the tag would only turn the citation into a CITED_UNTAGGED finding.

What changes is the verdict. An entry whose tagged GeneReviews chapters are all retired gets TAGGED_RETIRED instead of TAGGED, so the entries resting on withdrawn content can be listed (#16018). One current chapter tagged beside the retired one makes the verdict TAGGED again. TAGGED_RETIRED never fails under --strict: most retired chapters have no successor, and a retired chapter can still be the fullest clinical description of its disease. The question it puts to a curator is whether a current chapter now covers the disease, often a spectrum or Overview chapter that a GENE_SCOPED row or a title search finds. If one does, cite and mine it, and re-quote evidence from it rather than carrying the retired abstract's sentences over. If none does, the retired chapter stays. The schema cannot yet record a source's standing (#9840), so say so in notes: when it matters to a claim.

Gene-scoped chapters

GeneReviews often scopes a chapter to a gene rather than to one disease: Autosomal Dominant TRPV4-Related Disorders covers five skeletal dysplasias, SED Maroteaux type among them, and no comparison with the entry's disease names reaches it (#9694). So the check also searches from the gene side. Every <GENE>-Related … or <GENE>-Associated … title (about 250 chapters, including forms such as HAMP- and HJV-Related Hemochromatosis and MCM8/MCM9-Related Syndromes) is indexed under its gene symbols, and a chapter whose symbol matches one of the entry's causal genes is listed as a GENE_SCOPED candidate.

The genes come from genetic: records that claim to cause the disease: relationship_type CAUSATIVE or absent, variant_origin not SOMATIC, and no "somatic" in the record's name or association. A susceptibility, modifier or somatic-driver gene's chapter is about another disease (HRAS-Related Costello Syndrome is not a thymoma baseline). Symbols are compared case and all, so HFE matches and a word does not.

A somatic-mosaic disorder is the exception. When the entry's inheritance, or a subtype's, binds HP:0001442 Typified by somatic mosaicism (the convention the somatic-mosaicism skill sets), its somatic causal genes are kept, because the variant is post-zygotic by definition and the gene's chapter is the baseline: Hemimegalencephaly, angioosteohypertrophic_syndrome (Klippel-Trenaunay) and Focal_Cortical_Dysplasia_Type_II all reach PIK3CA-Related Overgrowth Spectrum this way. Non-causal records stay out even then.

GENE_SCOPED is a candidate, never a verdict, for the same reason as the other partial matches: POLG-Related Disorders covers every POLG disease, which may or may not include this one. It never changes a gating verdict. When it landed it moved 108 entries from NO_CHAPTER to CANDIDATE_CHAPTER, including GM1_Gangliosidosis_Type_3 (GLB1-Related Disorders) and Distal_Hereditary_Motor_Neuronopathy_Autosomal_Dominant (the GARS1, BSCL2, DCTN1 and TRPV4 chapters).

The index holds titles only, so a chapter that names the gene only in its abstract, usually an overview (Nuclear Gene-Encoded Leigh Syndrome Spectrum Overview for SURF1), is out of its reach. --online closes that gap with one <GENE>[TIAB] AND genereviews[book] search per causal symbol, limited to symbols in the committed HGNC label cache (cache/hgnc/terms.csv), since a token such as II, CAG or HLA would match unrelated abstracts. Unlike the name search it keeps hits already in the snapshot, since the title match never saw them, and it runs for GeneReviews only. A retired hit is marked [retired chapter].

Searching PubMed by hand

genereviews[book] is the field that selects chapters. GeneReviews[TI] searches chapter titles, which never contain the book's name, so it returns zero for every disease; that query sat in both curation skills until #9694. To drop withdrawn chapters add NOT retired[TI]. NOT "RETIRED CHAPTER"[TI] looks equivalent but PubMed's title index does not hold the phrase: it returns a warninglist and excludes nothing.

Query Hits
TRPV4[TI] GeneReviews[TI] 0
TRPV4[TIAB] AND genereviews[book] 3, one retired
TRPV4[TIAB] AND genereviews[book] NOT retired[TI] 2
TRPV4[TIAB] AND genereviews[book] NOT "RETIRED CHAPTER"[TI] 3, with a warninglist
genereviews[book] AND retired[TI] 68

(Counts from 2026-10-30.)

What to do with a finding

  • UNTAGGED_CHAPTER / CITED_UNTAGGED (GeneReviews): fetch the chapter (just fetch-reference PMID:<id>), tag it in the top-level references: block (just tag-references FILE does this for a chapter cited by PMID; one cited only by its NBK URL is tagged by hand), then mine it as the review skill's item 15 describes. If the matched chapter is genuinely not this disease's, say so in notes:.
  • MISTAGGED: the tag is wrong. Remove it, or replace the reference with the real chapter.
  • CANDIDATE_CHAPTER: read the title. Either tag and mine it, or ignore it; the check will keep listing it, which is the intended behaviour for a judgement it cannot make.
  • StatPearls anything: informational. See the next section.

GeneReviews versus StatPearls

Both are NCBI Bookshelf collections with PubMed-indexed chapters, both are fetched and cached by just fetch-reference like any PMID, and both are easy to mistake for each other in a deep-research report's "NCBI Bookshelf" citation. They are not the same kind of source.

GeneReviews StatPearls
Scope Mendelian and heritable disease all of clinical medicine
Size ~960 chapters ~9,600 chapters
Authorship invited domain experts volunteer clinicians
Review peer-reviewed; scheduled comprehensive revisions light editorial review; continuing-education framing
Structure fixed clinical sections (Clinical Characteristics, Diagnosis/Testing, Management, Genetic Counseling), each quotable from the PubMed abstract free narrative plus a "Continuing Education Activity" summary
Role here mandatory phenotype baseline for a Mendelian entry (review skill item 15) citable orientation source; never a baseline, and its absence is never a gap

So for Dandy-Walker malformation the check reports GeneReviews NO_CHAPTER and StatPearls UNTAGGED_CHAPTER (PMID:30855785, Dandy-Walker Malformation). The first closes the reviewer's open item; the second says a StatPearls chapter exists that the entry could cite for orientation, and nothing more. The StatPearls value of ReferenceTagEnum exists so that a cited chapter can be tagged and the KB queried for it, not to make it a requirement.

Tagging is now index-driven

just tag-references decides whether a cited PMID is a chapter by looking it up in the index, falling back to the Bookshelf citation form in the cached record (In: GeneReviews(®) [Internet], In: StatPearls [Internet]) for a chapter newer than the snapshot. It used to grep the cached abstract for the bare word "GeneReviews", which also matches a journal article that cites GeneReviews in its reference list. It tags both collections.

Staleness

The index is a snapshot and is refreshed by hand, like cache/<prefix>/hierarchy.csv. A chapter published after the snapshot is missed until the next refresh; the snapshot date is printed in every summary line so a reader can see how old the answer is. Nothing gates on the index being current.