Skip to content

[QC] Two invariants: no cell part_of an acellular structure; epithelial stem cell classification completeness #3701

Description

@cmungall

Two checks that would have caught defects found while reviewing #3692 and #3694.

1. No cell part_of an acellular anatomical structure

CL ⊑ part_of some <acellular anatomical structure>

should be empty. A cell can be adjacent to, attached to, or in contact with an ECM structure, but not a part of one.

Implemented as a logical axiom in #3707:

DisjointClasses(obo:CL_0000000 ObjectSomeValuesFrom(obo:BFO_0000050 obo:UBERON_0000476))

EL-safe for WHELK (DisjointClasses with an existential reduces to ⊥; the more natural has_part only (not cell) form needs a DL reasoner and is better proposed to CARO/UBERON).

Still worth having as a SPARQL query as well. An unsatisfiable class names the class, not the offending axiom — and for several of the violations below the offending axiom is in an import, so a curator hitting it gets no useful signal. The SPARQL version can report the inherited path.

2. Completeness of epithelial stem cell classification

cl info [ .sub CL:0000036 .and .sub "epithelial cell" ]
CL:1000486 ! basal cell of urothelium
CL:2000033 ! limb basal cell of epidermis
CL:1000349 ! basal cell of epithelium of bronchus
CL:0002187 ! basal cell of epidermis

Four of the eight basal cell descendants. Whatever the right answer turns out to be, a partial result is definitionally a bug: it means some subtypes acquired epithelial classification through a hand-asserted lineage parent (keratinocyte, urothelial cell, basal epithelial cell of tracheobronchial tree) while their siblings did not. Notably CL:0002633 respiratory basal cell is absent while its own child CL:1000349 is present, and CL:1000447 is absent despite being labelled "epithelial cell of stratum germinativum of esophagus".

The set should be empty or complete. Blocked on #3694 — this check fails today and will pass once basal cell is reclassified. This one is CL-local and needs no upstream work.

Part of the epithelial hierarchy cleanup (#3703).


@cmungall drove the agent, checked its reasoning, and is accountable for its output.

Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions