diff --git a/.claude/skills/gap-issue-filing/SKILL.md b/.claude/skills/gap-issue-filing/SKILL.md index e56a65b..6c9621d 100644 --- a/.claude/skills/gap-issue-filing/SKILL.md +++ b/.claude/skills/gap-issue-filing/SKILL.md @@ -23,8 +23,13 @@ how many logged gaps still lack a tracking issue. - `reports/gaps.tsv` — the source rows. Columns: `soulcap_abbreviation`, `soulcap_full_name`, `gap_type`, `description`, `related_cl_ids`, - `evidence`, `status` (`open` / `filed_as_issue`), `repo_issue`, - `date_logged`. + `evidence`, `status` (`open` / `filed_as_issue` / `draft_for_review` / + `on_hold`), `repo_issue`, `date_logged`. `draft_for_review` rows are CL + issue drafts waiting for Alex (and sometimes Dr. Diehl) to approve them; + change them to `open` only after that approval. `on_hold` rows wait on an + open question named in their description. Never file either directly. + `withdrawn` (the proposal was dropped) and `not_a_cl_issue` (the problem + turned out not to be in CL) are closed: never file them. - `.github/ISSUE_TEMPLATE/mapping_gap.yml` — the template whose fields map directly onto `gaps.tsv` columns: `soulcap_abbreviation` → title, `gap_type` → the dropdown, `description` + `related_cl_ids` + `evidence` → the @@ -38,7 +43,7 @@ how many logged gaps still lack a tracking issue. ## Step 1 — find what's actually unfiled Read `reports/gaps.tsv` and list every row where `status` is `open` (not -`filed_as_issue`). Note two rows sharing a `soulcap_abbreviation` group (e.g. +`filed_as_issue`, `draft_for_review`, `on_hold`, `withdrawn` or `not_a_cl_issue`). Note two rows sharing a `soulcap_abbreviation` group (e.g. `NK1 / NK3`) file as **one** issue, matching how the row itself is structured — don't split a single row into multiple issues. diff --git a/.claude/skills/mapping-audit/SKILL.md b/.claude/skills/mapping-audit/SKILL.md index de15c83..3e31cdc 100644 --- a/.claude/skills/mapping-audit/SKILL.md +++ b/.claude/skills/mapping-audit/SKILL.md @@ -71,10 +71,22 @@ is to question it, not just print it — for each row, ask: fixes changes the term's markers/definition/label out from under a mapping made before the fix landed. 3. **Does literature actually back a species-specific claim the mapping - relies on?** Cross-check against `reports/pro_marker_species_support.tsv` - — if a mapping leans on a marker that TSV records as - `insufficient_evidence` or a different species than SOULCAP's row assumes, - that's a real finding, not noise. + relies on?** Cross-check against `reports/pro_marker_species_support.tsv`, + using `human_status` (SOULCAP rows are human). The four values mean + different things, so report them separately and never merge them: + - `contradicted`: a real finding. Evidence goes against the CL assertion + (`soulcap-audit` raises `species_marker_contradicted`). + - `no_evidence_found`: searched, nothing found. Note it as an evidence gap, + **not** a contradiction. + - `not_applicable`: the species question doesn't apply (term or protein + limited to the other species, or a human-only marker such as HLA-DRA or + NCAM1/CD56 on the mouse side). **Never a failure.** + - blank / `not_assessed`: not checked yet; say so. + + Use `pro_species_support.species_status(row, "human")` to read a row: it + fills a blank with `not_applicable` when a rule applies and never + overrides a recorded value. The legacy `species_support` column + (`insufficient_evidence` etc.) is superseded by these columns. 4. **Was it marked `uncertain` for a reason that's since been resolved (or gotten worse)?** Re-read the `note` field and check whether the ambiguity it describes is still accurate. diff --git a/.claude/skills/pro-marker-species-support/SKILL.md b/.claude/skills/pro-marker-species-support/SKILL.md index 1a7697a..6cb6ade 100644 --- a/.claude/skills/pro-marker-species-support/SKILL.md +++ b/.claude/skills/pro-marker-species-support/SKILL.md @@ -120,12 +120,16 @@ own discipline here. `reports/pro_marker_species_support.tsv` has one row per directly asserted (CL term, PRO marker) pair for every CL term in -`mappings/curated_mappings.tsv` (87 pairs as of 2026-09-28). The question is +`mappings/curated_mappings.tsv` (87 pairs as of 2026-09-28), plus every term +under group 1 ILC (`CL:0001067`, NK cells included) from the October 2026 NK +audit (`audit_batch = nk_2026-10`; see `reports/nk_marker_audit_2026-10.md`). +Extra terms can be added the same way: scope them from Ubergraph and pull +their labels from `cl_pro_relationships.tsv`. The question is Dr. Diehl's: **is each marker, as CL asserts it, valid in human, mouse, or both?** **Never edit the first 10 (legacy) columns** of an existing row. They record -the original human-only check from issue #11. All new work goes in the 7 +the original human-only check from issue #11. All new work goes in the columns after them. **Where the new columns disagree with the legacy `species_support` value, the new columns take precedence** (e.g. plasmablast "lacks CD138", where the legacy value still says `human`). @@ -134,11 +138,43 @@ columns after them. **Where the new columns disagree with the legacy |---|---| | `cl_id`, `cl_label`, `pr_id`, `pr_label`, `cd_synonym` | From `cl_pro_relationships.tsv` — pull them programmatically, don't retype them. | | `species_support`, `evidence_source`, `citation`, `quote`, `source_ref` | **Legacy** (issue #11 human-only check). Read-only. | -| `species_scope` | `human`, `mouse`, `both` or `unresolved` (blank = not yet assessed). | -| `human_citation`, `human_quote` | Citation (author, year, PMID, PMCID) and an exact quote for the human side. | +| `species_scope` | `human`, `mouse`, `both` or `unresolved` (blank = not yet assessed). Derived from the two status columns. | +| `human_status`, `mouse_status` | One value per species, from the controlled list below. | +| `human_citation`, `human_quote` | Citation (author, year, PMID, PMCID) and an exact quote: the evidence behind `human_status`. For `contradicted`, this is the contradicting quote. | | `mouse_citation`, `mouse_quote` | The same for mouse. | +| `counter_citation`, `counter_quote` | For a `contradicted` verdict, the strongest quote on the other side (supporting the assertion), so both sides are recorded. Blank if none was found. | | `note` | Free text explaining the verdict, e.g. "not tested in mouse, no reagent", "ortholog exists but not expressed", "contradicted in mouse", or "species from PRO label". | | `checked_on` | Date the row was last assessed. | +| `audit_batch` | Which audit last set the row, e.g. `nk_2026-10`. Blank for earlier rows. | + +Status values for `human_status` / `mouse_status` (Dr. Diehl, 2026-10-05). +Keep these four apart; they mean different things: + +| Value | Meaning | +|---|---| +| `supported` | An exact quote supports the assertion as CL states it. | +| `contradicted` | An exact quote goes against it. Put any supporting quote in `counter_*`. | +| `no_evidence_found` | Searched, found nothing. **Not** a contradiction. Say in `note` what was searched. | +| `not_applicable` | The species question doesn't apply: the CL term is limited to the other species (", human" / ", mouse"), the PRO term is the other species' protein, or the marker is human-only. Human-only markers so far: HLA-DRA (mouse ortholog H2-Ea is a different protein) and NCAM1/CD56 for NK cells. | +| *(blank)* | Not assessed. | + +The same vocabulary is in code: `pro_species_support.SPECIES_STATUSES`, +`HUMAN_ONLY_MARKERS`, `not_applicable_reason()`, `species_status()` and +`species_scope()`. `soulcap-audit` uses them. It reports `contradicted` rows +as findings and counts every status per species in `audit_summary.md`. Add +a new human-only marker to `HUMAN_ONLY_MARKERS` (with a test), not only to a +note. `tests/test_pro_species_support.py` checks that every recorded value is +in the vocabulary, that `supported`/`contradicted` have a quote, and that a +species which can't apply is never marked anything but `not_applicable`. + +Derive `species_scope` from them: `both` if both are `supported`; `human` +if human is `supported` and mouse is `not_applicable` or `contradicted` +(likewise `mouse`); otherwise `unresolved`. + +Lineage-negative markers (lacks CD3/CD19/CD20/CD14 on non-T, non-B, +non-myeloid cells) are generally safe across species (Dr. Diehl), but still +look for mouse evidence and record `no_evidence_found` if there is none. Never +mark them `supported` on expert opinion alone; put the opinion in `note`. Rules for `species_scope`: diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..cb3cea1 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# The benchmark reserve test hashes these files; keep LF on every OS. +mappings/*.tsv text eol=lf diff --git a/.gitignore b/.gitignore index 03a0058..4b6eede 100644 --- a/.gitignore +++ b/.gitignore @@ -49,3 +49,6 @@ htmlcov/ *.swp .idea/ .vscode/ + +# Library copies of paywalled papers, for local quote checks only (never commit) +literature/paywalled/ diff --git a/CLAUDE.md b/CLAUDE.md index 742e102..040a618 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -75,6 +75,7 @@ AST in `marker_syntax.py`, compiled/evaluated by `phenotype.py`. | `pyproject.toml` | Project metadata, deps, and the CLI entry points. | | `.mcp.json` | MCP servers available in this project (see below). | | `.env` | `ASTA_API_KEY=...` (gitignored; required for the Asta MCP server). | +| `.gitattributes` | Forces LF line endings on `mappings/*.tsv`, whose hashes `tests/test_benchmark_reserve.py` checks (Windows `core.autocrlf` would otherwise break it). | When you create a new artifact, put it in the established location and link it from here and the README so locations stay consistent. Do not scatter diff --git a/ROADMAP.md b/ROADMAP.md index 527c11f..ac5bfc0 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -141,6 +141,18 @@ Mgr` tab are covered — B cell, DC, ILC, iNKT, NK cell, T cell, gdT, MAIT category, not a cell type). Still missing: monocyte, neutrophil, basophil, mast cell, granulocyte, MDSC. +**Human/mouse marker validity (Dr. Diehl, 2026-09-28 and 2026-10-05):** +[reports/pro_marker_species_support.tsv](reports/pro_marker_species_support.tsv) +records, per CL marker assertion, a `human_status` and `mouse_status`. The +values are `supported` / `contradicted` / `no_evidence_found` / +`not_applicable`, each verdict backed by a quote checked against the paper. +- **Done (2026-10-05):** every marker on the group 1 ILC / NK subtree + (66 pairs on 28 terms) and on plasmablast (4 pairs). See + [nk_marker_audit_2026-10.md](reports/nk_marker_audit_2026-10.md) and + [plasmablast_marker_audit_2026-10.md](reports/plasmablast_marker_audit_2026-10.md). +- **Remaining:** the other pairs on mapped CL terms (blank status = + not assessed). + --- ## Milestone 3 — Audit curated CL mappings ⛔ (blocked) @@ -163,6 +175,14 @@ against current CL marker axioms and literature, catching drift — without needing the sheet columns. It cannot capture curator *intent*, so this milestone stays ⛔ for the full deliverable until the sheet changes. +**Update (2026-10-05):** `soulcap-audit` now keeps `contradicted`, +`no_evidence_found` and `not_applicable` species statuses apart. Only +`contradicted` raises a finding, and human-only markers on the mouse side are +`not_applicable`, not failures. The mapping-audit skill uses the same +vocabulary. 6 contradicted marker assertions are currently in the review +queue ([audit_summary.md](reports/audit_summary.md)). This is still the +evidence half of M3; the blocker above is unchanged. + --- ## Milestone 4 — Candidate improved CL mappings 🟡 (80/127 entities with proposals) @@ -189,6 +209,14 @@ proposal. The SSSOM export is generated from this registry. All proposals are `needs_review`, not confirmed equivalences. The gap log includes family-level entries and is not a one-to-one accounting of the 47 entities without proposals. +**CL structure proposal (2026-10-05, design only):** +[docs/group1_ilc_species_hierarchy_proposal.md](docs/group1_ilc_species_hierarchy_proposal.md) +proposes a parallel human/mouse hierarchy under group 1 ILC → NK. +- 6 new grouping terms, plus 2 recommended (uterine NK, human; group 1 ILC, + human = #14) and 1 optional. +- Awaiting Dr. Diehl's decisions ([docs/diehl_review_2026-10.md](docs/diehl_review_2026-10.md)). + No CL edits are made here; approved changes go to David's team as issues. + --- ## CL term corrections @@ -201,7 +229,15 @@ upstream to `obophenotype/cell-ontology`. | Issue | Terms | Status | |-------|-------|--------| | [#13 NKT cell naming](https://github.com/Cellular-Semantics/SOULCAP_CL_Mapping/issues/13) | CL:4052055 → "CD56-positive T cell, human"; CL:0000814 → "iNKT cell" | Filed upstream: [CL#3663](https://github.com/obophenotype/cell-ontology/issues/3663), [CL#3664](https://github.com/obophenotype/cell-ontology/issues/3664) | -| [#14 Missing human-specific ILC1 term](https://github.com/Cellular-Semantics/SOULCAP_CL_Mapping/issues/14) | CL:0001067 "group 1 innate lymphoid cell" — no `, human` variant, unlike group 2 (CL:0001081) and group 3 (CL:0001078) | Open — not yet filed upstream | +| [#14 Missing human-specific ILC1 term](https://github.com/Cellular-Semantics/SOULCAP_CL_Mapping/issues/14) | CL:0001067 "group 1 innate lymphoid cell" — no `, human` variant, unlike group 2 (CL:0001081) and group 3 (CL:0001078) | Open — not yet filed upstream. Recommended as NEW:8 in the group 1 ILC hierarchy proposal | +| B1 "lacks HLA-DRA" on CD56-bright/dim NK (draft) | CL:0000938, CL:0000939 | Draft in [reports/gaps.tsv](reports/gaps.tsv), awaiting Dr. Diehl ([review](docs/diehl_review_2026-10.md)) | +| B3a plasmablast "lacks CD138" (draft) | CL:0000980 | Draft, awaiting Dr. Diehl | +| B3b plasmablast markers to a species child (draft) | CL:0000980 | Draft, awaiting Dr. Diehl (human vs mammal-level child) | +| B6a–d smaller fixes (drafts) | CL:0002345 (DX5+); CL:0002348/0002349 (wrong PMID); CL:0002439–0002448 ("T cell" wording); CL:0002343 (galectin-1 relation) | Drafts, awaiting Dr. Diehl | +| C1 liver-resident NK human sentences to a human child (draft) | CL:4047101 | Draft, awaiting Dr. Diehl | +| Pre-NK markers (on hold) | CL:0000937 | On hold pending Dr. Diehl | +| Protégé NCAM1 query returns too few classes | — | Not filed; repro note in [docs/protege_ncam1_query_repro.md](docs/protege_ncam1_query_repro.md) for Dr. Diehl to reproduce | +| ~~Add CD56 to generic NK~~ | CL:0000623 | Withdrawn 2026-10-05 (generic NK keeps only lack statements) | --- @@ -214,6 +250,14 @@ upstream to `obophenotype/cell-ontology`. - **Data hygiene.** The errors in `reports/marker_string_issues.md` (spaced marker names, unbalanced brackets, etc.) should be fixed in the Google Sheet before relying on automated parsing for M1/M3/M4. +- **Matcher evaluation fingerprints break on Windows checkouts** (noted + 2026-10-05, not fixed yet). `soulcap-evaluate` fingerprints source files by + hashing their raw bytes (`evaluation.py`). With `core.autocrlf=true`, a + Windows checkout has CRLF line endings, so the hashes differ from a Linux + run and the dashboard shows the evaluation as `stale_or_unverified`. The + same problem in `mappings/*.tsv` was fixed with a `.gitattributes` LF rule. + Fix later: normalise line endings before hashing, or extend the LF rule to + the fingerprinted files. - **Folders to standardise:** - `marker_mappings/` — curated mapping CSVs (tracked). - `literature/` — M2 literature reports. diff --git a/docs/README.md b/docs/README.md index 94bf95e..7acc549 100644 --- a/docs/README.md +++ b/docs/README.md @@ -9,6 +9,9 @@ pages hold the full detail. | [pipeline.md](pipeline.md) | Each pipeline stage and its command: sheet sync, CL→PRO axioms, candidate matching, OAK lexical search, SSSOM export, ROBOT QC | | [marker_resolution.md](marker_resolution.md) | Token → PRO resolution rules, policies, lexical cache | | [matching_and_evaluation.md](matching_and_evaluation.md) | Audit dashboard, matcher evaluation, regression triage and follow-up | +| [diehl_review_2026-10.md](diehl_review_2026-10.md) | CL issue drafts from the October 2026 NK and plasmablast audit, for Dr. Diehl to approve before anything is filed | +| [group1_ilc_species_hierarchy_proposal.md](group1_ilc_species_hierarchy_proposal.md) | Design proposal for a parallel human / mouse hierarchy under group 1 ILC and NK cell (Dr. Diehl, 2026-10-05): before/after trees, new grouping terms, terms to decide. Per-term changes in the matching [.tsv](group1_ilc_species_hierarchy_proposal.tsv) | +| [protege_ncam1_query_repro.md](protege_ncam1_query_repro.md) | Repro note for the Protégé NCAM1 (CD56) query that returned too few classes (Dr. Diehl, 2026-10-05): expected classes, likely causes, what to record | | [planning/](planning/) | Sprint backlog and semester plan (hand-maintained); agenda for the [12 Oct 2026 meeting](planning/2026-10-12_meeting_summary.md); [human/mouse marker pilot summary](planning/2026-10-02_diehl_summary.md) for Dr. Diehl | Related specs that live at the top level: [MARKER_SYNTAX.md](../MARKER_SYNTAX.md) diff --git a/docs/diehl_review_2026-10.md b/docs/diehl_review_2026-10.md new file mode 100644 index 0000000..281ebf5 --- /dev/null +++ b/docs/diehl_review_2026-10.md @@ -0,0 +1,199 @@ +# CL issue drafts for review — October 2026 + +For Dr. Diehl, before anything is handed to David's team. Nothing has been +filed yet. Each section is one proposed GitHub issue against CL. Please mark +each one **file**, **change** or **drop**. + +Every quote below was checked word for word against the paper's Europe PMC +full text. Full detail is in +[reports/nk_marker_audit_2026-10.md](../reports/nk_marker_audit_2026-10.md), +[reports/plasmablast_marker_audit_2026-10.md](../reports/plasmablast_marker_audit_2026-10.md) +and the draft rows at the end of [reports/gaps.tsv](../reports/gaps.tsv). + +## Decisions needed from Dr. Diehl + +Issue drafts (details below): + +1. **B1** HLA-DRA on the CD56-bright and CD56-dim NK terms: file, change or drop? +2. **B3a** plasmablast "lacks CD138": file, change or drop? +3. **B3b** plasmablast child: Option 1 "plasmablast, human" or Option 2 a + mammal-level child? And should the mature B cell → Mammalia link be raised + as its own issue? +4. **Batch 2** (B6a DX5 on `CL:0002345`, B6b wrong PMID, B6c "T cell" + wording, B6d galectin-1 relation): file, change or drop, each. +5. **Pre-NK** (`CL:0000937`, on hold): move CD34/CD117/CD122 to a human child? + +Group 1 ILC hierarchy (details in +[group1_ilc_species_hierarchy_proposal.md](group1_ilc_species_hierarchy_proposal.md)): + +6. **Terms with unclear species.** Accept the recommended defaults? + - Keep uterine NK, liver-resident NK, hepatic pit cell and cycling NK generic. + - Make the uterine NK definition species-neutral. + - Move liver-resident NK's human sentences to a human child (draft C1 in + `gaps.tsv`). +7. **New grouping terms.** NEW:7 "uterine natural killer cell, human" and + NEW:8 "group 1 innate lymphoid cell, human" (issue #14) are recommended. + NEW:9 "group 1 innate lymphoid cell, mouse" is optional. Which do you want? +8. **Two parents.** Logical definitions with `in taxon` (suggested default), or + hand-asserted parents? +9. **`CL:0002349`** CD27-high, CD11b-low NK cell, mouse: move from mature to + immature NK, mouse? +10. **`CL:0002426`**: merge with `CL:0002347`, which it may duplicate? +11. **`CL:0002346`** Dx5-negative, NK1.1-positive immature NK cell, mouse: + keep under NK despite its overlap with ILC1? + +--- + +**The HLA-DR positive vs negative conflict** you described was in your old +curation spreadsheet, not in CL, so it isn't a CL issue. In CL, both +NK subset terms say "lacks HLA-DRA", and B1 below covers both. + +--- + +## Batch 1: NK and plasmablast + +### B1. Remove "lacks HLA-DRA" from the CD56-bright and CD56-dim NK terms + +**CL IDs:** `CL:0000938` CD16-negative, CD56-bright natural killer cell, human; +`CL:0000939` CD16-positive, CD56-dim natural killer cell, human + +**Change:** remove (or disable) `lacks_plasma_membrane_part` `PR:000002015` +(HLA-DRA) on both terms until a source is found. **One issue for both +terms**, because they share the same axiom, the same two definition sources +and the same evidence. + +**Why:** neither definition source supports it. PMID:19796267 never mentions +HLA-DR. PMID:22343568 mentions it on NK cells only as an activation marker: + +> "The similar use of HLA-DR to track activated NK cells is a possibility that +> has been less well explored, but that might be equally fruitful." +> — Maecker HT et al. 2012 (PMID:22343568) + +Resting NK cells are mostly HLA-DR negative, but not all: + +> "In contrast, only 2–5.5% (median 3.5%) of fresh NK cells ex vivo expressed +> HLA-DR" — Evans JH et al. 2011 (PMID:21491418) + +> "We have observed that HLA-DR expression in freshly isolated circulating NK +> cells was mostly associated with less differentiated CD56brightCD57− cells, +> although in some individuals it could also be found in terminally +> differentiated CD57+ cells." — Erokhina SA et al. 2018 (PMID:29363179) + +**Confidence:** high that the axiom has no source; medium that it is wrong, +since HLA-DR+ cells are a minority (more so for CD56-dim). Attach +[nk_hladr_conflicts_2026-10.tsv](../reports/nk_hladr_conflicts_2026-10.tsv). + +### B3a. Drop "lacks CD138" from plasmablast + +**CL ID:** `CL:0000980` plasmablast + +**Change:** remove `lacks_plasma_membrane_part` `PR:000001935` (syndecan-1 / +CD138) and "CD138-negative" from the text definition. + +**Why:** contradicted in mouse and in one human scheme, and the definition +source (Jackson SM et al. 2009, PMID:19059880) does not mention CD138. + +> "plasmablasts as B220+CD138+" — Marques RF et al. 2026 (PMID:42774878), mouse + +> "short-lived plasmablasts (CD19+CD138++ or CD19+CD27+CD38++)" +> — Jamaluddin J et al. 2026 (PMID:41771939), human + +**Confidence:** high for mouse; medium for human, where some schemes do treat +plasmablasts as CD138-low. No quote supporting "lacks CD138" was found. + +### B3b. Move plasmablast markers to a species-specific child + +**CL ID:** `CL:0000980` plasmablast (generic term keeps no markers) + +**Markers to move:** CD38 high, CD27 high, lacks CD20 (with B3a, CD138 is +dropped). + +> "Plasmablasts and Long-Lived Plasma Cells +> (CD19+CD20−IgD−CD27hiCD38hi/CD138+CD38+CD19−/Low)" +> — Georgopoulos C et al. 2026 (PMID:42653236), human + +> "as B cells differentiate to become plasmablasts and plasma cells, CD20 is +> lost but CD19 remains, as CD38/CD138 is acquired" +> — Griffin DO & Rothstein TL 2012 (PMID:22654880), human + +**Two options. Your choice:** + +| | Option 1: "plasmablast, human" | Option 2: mammal-level child | +|---|---|---| +| Taxon | in taxon Homo sapiens | in taxon Mammalia | +| Evidence | All three markers supported in human | Same human quotes; **no mouse evidence found** for CD38, CD27 or CD20 on mouse plasmablasts (mouse studies gate on B220/CD138) | +| Fits | What the literature shows today | What was discussed on 5 October | + +**Note for either option:** plasmablast is *already* mammal-only. Its parent +"mature B cell" sits under "B cell, CD19-positive", whose parent +`CL:0001200` is `in taxon Mammalia`. So stripping markers from the generic +term alone won't make it usable for zebrafish; the mature B cell link would +also have to change. Do you want that raised as a separate issue? + +**Confidence:** high on the evidence; the choice between options is yours. + +--- + +## Batch 2: smaller CL fixes found during the audit + +### B6a. DX5-positive on an immature mouse NK term + +**CL ID:** `CL:0002345` CD27-low, CD11b-low immature natural killer cell, mouse + +**Change:** review or remove the DX5 (CD49b, `PR:000001008`) positive axiom. +Its sibling `CL:0002346` is DX5-negative. + +> "Collective reports have demonstrated that iNK cells in mouse bone marrow +> and periphery can express Ly49 receptors, CD49a, CD90, TRAIL, CD69, and +> Eomes, and lack CD49b expression" — Riggan L et al. 2019 (PMID:31500958) + +**Confidence:** medium. One review statement; the definition source's +abstract (PMID:19949422) doesn't mention DX5, and its full text isn't open +access. + +### B6b. Wrong PMID in two definitions + +**CL IDs:** `CL:0002348` CD27-low, CD11b-high natural killer cell, mouse; +`CL:0002349` CD27-high, CD11b-low natural killer cell, mouse + +**Change:** both cite PMID:1994922, which is an unrelated 1991 paper (Liang +MH, pulmonary venoocclusive disease). Probably a typo for PMID:19949422 +(Andrews DM 2010, mouse NK ontogeny), which `CL:0002345` and `CL:0002347` cite. + +**Confidence:** high that the PMID is wrong; medium that 19949422 is the +intended one. + +### B6c. "NK1.1-positive T cell" in 10 NK definitions + +**CL IDs:** `CL:0002439` to `CL:0002448` (Ly49, CD94 and NKG2A subsets of +NK cells, mouse) + +**Change:** their definitions read "A NK1.1-positive T cell that is …", but +they are NK cells (parent `CL:0002438` NK1.1-positive natural killer cell, +mouse). Change to "A NK1.1-positive natural killer cell that is …". + +**Confidence:** high (wording error, no literature needed). + +### B6d. Galectin-1 on decidual NK: wrong relation + +**CL ID:** `CL:0002343` decidual natural killer cell, human + +**Change:** galectin-1 (`PR:000009766`) is asserted as `has plasma membrane +part`. Use `expresses` instead. + +> "two secreted proteins, galectin-1 and progestagen-associated protein 14, +> known to have immunomodulatory functions, were selectively expressed in dNK +> cells" — Koopman LA et al. 2003 (PMID:14568979), the definition source + +**Confidence:** medium. Expression is clearly supported; membrane +localisation just isn't shown. + +--- + +## Still on hold + +- **Pre-NK markers** (`CL:0000937`, CD34/CD117/CD122). In mouse, the earliest + pre-NK "does not express IL-2Rβ (CD122)" (Fathman JW et al. 2011, + PMID:21931117). Should these move to a human child, as for plasmablast? +- **Withdrawn:** our old draft to *add* CD56 to generic NK (`CL:0000623`). + It conflicts with your rule that generic NK terms keep only lack statements. diff --git a/docs/group1_ilc_species_hierarchy_proposal.md b/docs/group1_ilc_species_hierarchy_proposal.md new file mode 100644 index 0000000..46d146c --- /dev/null +++ b/docs/group1_ilc_species_hierarchy_proposal.md @@ -0,0 +1,230 @@ +# Group 1 ILC: parallel human / mouse hierarchy (proposal) + +Design only. Nothing here changes CL. Dr. Diehl asked for the **hierarchy +first** (meeting 2026-10-05); definitions and sources for the new terms are a +second pass. Every term, its current parent and its proposed parent are listed +in [group1_ilc_species_hierarchy_proposal.tsv](group1_ilc_species_hierarchy_proposal.tsv). + +## Why a parallel hierarchy + +Grouping all human NK terms under one node and all mouse NK terms under +another makes species-specific terms easy to find, instead of having them +interleaved under the same generic parents. It also lines SOULCAP's human +cell types up against a human-only branch of CL. The generic terms stay free of +species markers, so zebrafish and other non-mammal users can still use them. +The cost is extra grouping terms (6 required, 2 recommended, 1 optional) and more terms with +two parents, which makes the hierarchy more complex to maintain. + +**Source:** the subtree of `CL:0001067` group 1 innate lymphoid cell, pulled from +Ubergraph on 2026-10-05 (37 terms). The parents match the local CL release of +2026-03-26 exactly. `in taxon` values are as asserted. Terms without one inherit +it from a parent. + +## Constraints from the meeting + +- **ILC1 is not group 1.** ILC2/ILC3 are used as synonyms of group 2/group 3, + but group 1 contains two things: ILC1 (non-cytotoxic) and NK cells + (cytotoxic). The proposal keeps `CL:0001068` ILC1 and `CL:0000623` natural + killer cell as separate children of group 1. +- Keep the ", human" / ", mouse" label convention and `in taxon` axioms + (Homo sapiens `NCBITaxon:9606`, Mus musculus `NCBITaxon:10090`). + Hsap/Mmus-style labels are only a possible future option, not proposed here. +- Terms not marked as species-specific stay in the generic hierarchy. +- Pattern to follow: group 2 ILC already has "group 2 innate lymphoid cell, + human" (`CL:0001081`) and "…, mouse" (`CL:0002089`) side by side. Group 3 + has only the human one (`CL:0001078`). + +## Before (current CL) + +`[Hs]` = in taxon Homo sapiens, `[Mm]` = in taxon Mus musculus (asserted on the +term). `(+)` = the term has more than one parent. + +``` +group 1 innate lymphoid cell CL:0001067 +├── ILC1 CL:0001068 +│ └── ILC1, human CL:0001077 [Hs] +└── natural killer cell CL:0000623 + ├── pre-natural killer cell CL:0000937 + ├── immature natural killer cell CL:0000823 (+ immature innate lymphoid cell) + │ ├── CD56-positive, CD161-positive immature NK cell, human CL:0002338 [Hs] + │ ├── CD56-negative, CD161-positive immature NK cell, human CL:0002344 [Hs] + │ ├── CD27-low, CD11b-low immature NK cell, mouse CL:0002345 [Mm] + │ └── Dx5-negative, NK1.1-positive immature NK cell, mouse CL:0002346 [Mm] + ├── mature natural killer cell CL:0000824 + │ ├── CD16-negative, CD56-bright NK cell, human CL:0000938 [Hs] + │ ├── CD16-positive, CD56-dim NK cell, human CL:0000939 [Hs] + │ ├── decidual natural killer cell, human CL:0002343 [Hs] (+ uterine NK, extraembryonic cell) + │ ├── CD27-high, CD11b-high NK cell, mouse CL:0002347 [Mm] + │ ├── CD27-low, CD11b-high NK cell, mouse CL:0002348 [Mm] + │ ├── CD27-high, CD11b-low NK cell, mouse CL:0002349 [Mm] + │ └── NK1.1-positive NK cell, mouse CL:0002438 [Mm] + │ └── 11 Ly49 / CD94 / NKG2A / CD11b-CD27 subsets, mouse + │ (CL:0002426, CL:0002439–0002441, CL:0002443–0002449) + ├── CD94-negative, Ly49CI-negative NK cell, mouse CL:0002442 [Mm] + ├── cycling natural killer cell CL:4033071 + ├── liver-resident natural killer cell CL:4047101 + │ └── hepatic pit cell CL:2000054 + └── uterine natural killer cell CL:4052028 + ├── uterine natural killer cell 1 / 2 / 3, human CL:4052051–4052053 [Hs] + └── decidual natural killer cell, human CL:0002343 [Hs] +``` + +Human and mouse terms are interleaved under the same generic parents, and +there is no node that collects "all human NK" or "all mouse NK". + +## After (proposed) + +`NEW:n` = proposed new grouping term (IDs to be assigned by CL). Species terms +sit under their developmental parent *and* their species branch. + +``` +group 1 innate lymphoid cell CL:0001067 +├── ILC1 CL:0001068 +│ └── ILC1, human CL:0001077 +├── [recommended] group 1 innate lymphoid cell, human NEW:8 ── parent of CL:0001077 and NEW:1 +├── [optional] group 1 innate lymphoid cell, mouse NEW:9 ── parent of NEW:2 +└── natural killer cell CL:0000623 + │ + │ generic branch (no species) + ├── pre-natural killer cell CL:0000937 + ├── immature natural killer cell CL:0000823 + │ ├── immature natural killer cell, human NEW:3 + │ └── immature natural killer cell, mouse NEW:4 + ├── mature natural killer cell CL:0000824 + │ ├── mature natural killer cell, human NEW:5 + │ └── mature natural killer cell, mouse NEW:6 + ├── cycling natural killer cell CL:4033071 + ├── liver-resident natural killer cell CL:4047101 + │ └── hepatic pit cell CL:2000054 + ├── uterine natural killer cell CL:4052028 + │ └── [recommended] uterine natural killer cell, human NEW:7 + │ + │ human branch + ├── natural killer cell, human NEW:1 [Hs] + │ ├── immature natural killer cell, human NEW:3 [Hs] + │ │ ├── CL:0002338 CD56-positive, CD161-positive immature NK cell, human + │ │ └── CL:0002344 CD56-negative, CD161-positive immature NK cell, human + │ ├── mature natural killer cell, human NEW:5 [Hs] + │ │ ├── CL:0000938 CD16-negative, CD56-bright NK cell, human + │ │ ├── CL:0000939 CD16-positive, CD56-dim NK cell, human + │ │ └── CL:0002343 decidual natural killer cell, human (+ NEW:7 or CL:4052028) + │ └── [recommended] uterine natural killer cell, human NEW:7 [Hs] + │ ├── CL:4052051 / CL:4052052 / CL:4052053 uterine NK 1 / 2 / 3, human + │ └── CL:0002343 decidual natural killer cell, human + │ + │ mouse branch + └── natural killer cell, mouse NEW:2 [Mm] + ├── immature natural killer cell, mouse NEW:4 [Mm] + │ ├── CL:0002345 CD27-low, CD11b-low immature NK cell, mouse + │ └── CL:0002346 Dx5-negative, NK1.1-positive immature NK cell, mouse + └── mature natural killer cell, mouse NEW:6 [Mm] + ├── CL:0002347 / CL:0002348 / CL:0002349 CD27/CD11b subsets, mouse + └── CL:0002438 NK1.1-positive NK cell, mouse + ├── 11 existing subsets (unchanged) + └── CL:0002442 CD94-negative, Ly49CI-negative NK cell, mouse (moved here) +``` + +NEW:3–NEW:6 appear twice in the drawing because each has two parents: the +generic stage and the species branch. + +## New grouping terms + +| ID | Label | Parents | Why | +|---|---|---|---| +| NEW:1 | natural killer cell, human | `CL:0000623` | The human branch under NK; collects every human NK term. | +| NEW:2 | natural killer cell, mouse | `CL:0000623` | The mouse branch under NK. | +| NEW:3 | immature natural killer cell, human | `CL:0000823`, NEW:1 | Human/mouse pair for immature NK; parent of `CL:0002338`, `CL:0002344`. | +| NEW:4 | immature natural killer cell, mouse | `CL:0000823`, NEW:2 | Parent of `CL:0002345`, `CL:0002346`. | +| NEW:5 | mature natural killer cell, human | `CL:0000824`, NEW:1 | Dr. Diehl's example pair; parent of `CL:0000938`, `CL:0000939`, `CL:0002343`. | +| NEW:6 | mature natural killer cell, mouse | `CL:0000824`, NEW:2 | Parent of `CL:0002347`–`CL:0002349` and `CL:0002438`. | +| NEW:7 | uterine natural killer cell, human *(recommended)* | `CL:4052028`, NEW:1 | All 4 current uterine/decidual NK subtypes are human; takes the menstrual-cycle wording from `CL:4052028`. | +| NEW:8 | group 1 innate lymphoid cell, human *(recommended)* | `CL:0001067` | Matches group 2/3; requested in [repo issue #14](https://github.com/Cellular-Semantics/SOULCAP_CL_Mapping/issues/14). | +| NEW:9 | group 1 innate lymphoid cell, mouse *(optional)* | `CL:0001067` | Mouse counterpart of NEW:8. CL has no "ILC1, mouse" term yet. | + +Six terms are needed for the structure Dr. Diehl described (NEW:1–6). +**NEW:7 and NEW:8 are recommended**: +- NEW:7 gives the human-only menstrual-cycle wording a home (see uterine NK below). +- NEW:8 is the term [repo issue #14](https://github.com/Cellular-Semantics/SOULCAP_CL_Mapping/issues/14) asks for. + +NEW:9 is optional, for Dr. Diehl to decide. + +**None of these terms exists in CL already**, obsolete terms included. Checked +on 2026-10-05 against 52 variants of the nine labels: +- "…, human", "human …", "… human", the same with "NK cell", and for group 1 + also "group 1 ILC, …" and "human/mouse ILC1". +- Matched against every label and synonym (exact, related, broad, narrow) in + the local CL release of 2026-03-26, which includes its 272 obsolete terms. +- Also matched against Ubergraph: the labels and synonyms of all + innate lymphoid cell descendants, and of all 199 deprecated CL terms. + +The only near-hit was `CL:0001077` "ILC1, human". It is ILC1, not group 1, so +it is not a match for NEW:8. The OLS4 search API was returning incomplete +results that day, so it wasn't used. + +**Two parents (question for Dr. Diehl):** NEW:3–NEW:6 and the terms under them +need both a developmental parent and a species parent. There are two ways to +do this: +- **Logical definitions (suggested default):** give each species grouping term + a definition such as "natural killer cell and in taxon some Homo sapiens" and + let the reasoner place terms under it. Every term that carries an `in taxon` + axiom then lands in the right branch automatically, and new terms can't be + forgotten. +- **Hand-asserted parents:** simpler to read in the source file, but every new + species term needs both parents added by hand. + +## Existing terms that move + +| Term | From | To | +|---|---|---| +| `CL:0000938`, `CL:0000939` | mature NK `CL:0000824` | NEW:5 | +| `CL:0002343` | mature NK; uterine NK; extraembryonic cell | NEW:5; NEW:7 (or uterine NK); extraembryonic cell | +| `CL:0002338`, `CL:0002344` | immature NK `CL:0000823` | NEW:3 | +| `CL:0002345`, `CL:0002346` | immature NK `CL:0000823` | NEW:4 | +| `CL:0002347`, `CL:0002348`, `CL:0002349`, `CL:0002438` | mature NK `CL:0000824` | NEW:6 | +| `CL:4052051`–`CL:4052053` | uterine NK `CL:4052028` | NEW:7 (recommended) | +| `CL:0002442` | natural killer cell `CL:0000623` | `CL:0002438` NK1.1-positive NK cell, mouse (its definition says NK1.1-positive; all its siblings are there) | + +Nothing else moves: the 11 subsets under `CL:0002438` go along with it, and all +generic terms stay where they are. + +## For Alex and Dr. Diehl to decide + +### Terms with unclear species: recommended defaults + +| Term | Evidence | Recommended default | +|---|---|---| +| `CL:4052028` uterine natural killer cell | Mice have uterine NK cells too: "The conserved CD94/NKG2A inhibitory receptor is expressed by nearly all human and ∼50% of mouse uterine natural killer (uNK) cells." (Shreeve N et al. 2021, PMID:33887202). But the current definition describes changes over the menstrual cycle, which is human wording. | **Keep generic.** Rewrite its definition to be species-neutral and move the menstrual-cycle wording to NEW:7 "uterine natural killer cell, human" (recommended). | +| `CL:4047101` liver-resident natural killer cell | Generic label; the definition adds human markers ("In humans this cell type is distinguished from circulating natural killer cells by CD49a or CD69 gene expression"). | **Keep generic.** A separate draft (`gaps.tsv`, status `draft_for_review`) proposes moving the human-marker sentences to a human child term. | +| `CL:2000054` hepatic pit cell | First described in rat: "The pit cell: description of a new type of cell occurring in rat liver sinusoids and peripheral blood." (Wisse E et al. 1976, PMID:991252, title). CL's definition cites a later review (Wisse E et al. 1997, PMID:9408963) that names no species. | **Keep generic** under liver-resident NK. It isn't human- or mouse-specific, and the original species is rat. | +| `CL:4033071` cycling natural killer cell | The only definition source is a human study: "a CITE-seq dataset of 211,000 human peripheral blood mononuclear cells (PBMCs)", in which "a small population of NK cells expressing proliferation and cell-cycle genes (NK_proliferation), consistently increased upon vaccination" (Hao Y et al. 2021, PMID:34062119). | **Keep generic.** A cycling state isn't species-specific, even though the source is human. Note the human source in the definition. | + +### Other questions + +1. **NEW:7 and NEW:8 are recommended. Adopt them?** NEW:8 would close + [repo issue #14](https://github.com/Cellular-Semantics/SOULCAP_CL_Mapping/issues/14). + NEW:9 (group 1 ILC, mouse) is optional. +2. **Two parents:** logical definitions with `in taxon` (suggested default) or + hand-asserted parents? See [New grouping terms](#new-grouping-terms). +3. **`CL:0002349` CD27-high, CD11b-low NK cell, mouse** sits under *mature* + NK, but two sources place this phenotype early in maturation: + > "The results of these various experiments collectively support a 4-stage + > model of NK-cell maturation CD11b(low)CD27(low) --> CD11b(low)CD27(high) + > --> CD11b(high)CD27(high) --> CD11b(high)CD27(low)." + > — Chiossone L et al. 2009 (PMID:19234143), abstract + + > "Neonatal NK cells in the bone marrow, spleen and lung exist as immature + > CD27(+)/CD11B(lo) cells." — Andrews DM et al. 2010 (PMID:19949422), abstract + + Both quotes are checked against the Europe PMC abstracts. **Chiossone's + full text could not be checked:** it isn't in PMC, the publisher's page + blocks automated access, and the Undermind connector was unreachable. The + note is kept on the strength of the two abstracts. Should `CL:0002349` move + to immature NK, mouse (NEW:4)? +4. **`CL:0002426`** CD11b-positive, CD27-positive NK cell, mouse may duplicate + `CL:0002347` CD27-high, CD11b-high NK cell, mouse. Merge? +5. **`CL:0002346`** Dx5-negative, NK1.1-positive immature NK cell, mouse: + these cells overlap with ILC1 (Riggan 2019, PMID:31500958). Keep it under NK? +6. `pro-NK cell` (`CL:0000825`) sits under lymphoid lineage-restricted + progenitor rather than group 1, and the human ILC precursors + (`CL:0001072`–`CL:0001076`) sit under immature innate lymphoid cell. Both + are out of scope here. Include them in a later pass? diff --git a/docs/group1_ilc_species_hierarchy_proposal.tsv b/docs/group1_ilc_species_hierarchy_proposal.tsv new file mode 100644 index 0000000..8a7e746 --- /dev/null +++ b/docs/group1_ilc_species_hierarchy_proposal.tsv @@ -0,0 +1,47 @@ +term_id label species_assignment current_in_taxon current_parents proposed_parents new_term_needed change reason +CL:0000623 natural killer cell generic CL:0001067 group 1 innate lymphoid cell CL:0001067 group 1 innate lymphoid cell no none Generic NK; keeps only lack statements. +CL:0000823 immature natural killer cell generic CL:0000623 natural killer cell; CL:0001082 immature innate lymphoid cell CL:0000623 natural killer cell; CL:0001082 immature innate lymphoid cell no none Generic developmental stage; its species children move under NEW:3 / NEW:4. Keeps its second parent CL:0001082 immature innate lymphoid cell. +CL:0000824 mature natural killer cell generic CL:0000623 natural killer cell CL:0000623 natural killer cell no none Generic developmental stage; its species children move under NEW:5 / NEW:6. +CL:0000937 pre-natural killer cell generic CL:0000623 natural killer cell CL:0000623 natural killer cell no none Stays generic (Dr. Diehl). Its markers fit human stage 2; see the on-hold item in docs/diehl_review_2026-10.md. +CL:0000938 CD16-negative, CD56-bright natural killer cell, human human NCBITaxon:9606 Homo sapiens CL:0000824 mature natural killer cell NEW:5 mature natural killer cell, human no re-parent Human mature NK subset. +CL:0000939 CD16-positive, CD56-dim natural killer cell, human human NCBITaxon:9606 Homo sapiens CL:0000824 mature natural killer cell NEW:5 mature natural killer cell, human no re-parent Human mature NK subset. +CL:0001067 group 1 innate lymphoid cell generic CL:0001065 innate lymphoid cell CL:0001065 innate lymphoid cell no none Top of the hierarchy (Dr. Diehl). Not the same as ILC1. +CL:0001068 ILC1 generic CL:0001067 group 1 innate lymphoid cell CL:0001067 group 1 innate lymphoid cell no none Non-cytotoxic group 1 ILC. Not a synonym of group 1, and not NK. +CL:0001077 ILC1, human human NCBITaxon:9606 Homo sapiens CL:0001068 ILC1 CL:0001068 ILC1 no none Already split. Would also go under NEW:8 if that is adopted. +CL:0002338 CD56-positive, CD161-positive immature natural killer cell, human human NCBITaxon:9606 Homo sapiens CL:0000823 immature natural killer cell NEW:3 immature natural killer cell, human no re-parent Human immature NK (stage 3-like). +CL:0002343 decidual natural killer cell, human human NCBITaxon:9606 Homo sapiens CL:0000349 extraembryonic cell; CL:0000824 mature natural killer cell; CL:4052028 uterine natural killer cell NEW:5 mature natural killer cell, human; NEW:7 uterine natural killer cell, human (if adopted, else CL:4052028); CL:0000349 extraembryonic cell no re-parent Human; keeps its extraembryonic cell parent. +CL:0002344 CD56-negative, CD161-positive immature natural killer cell, human human NCBITaxon:9606 Homo sapiens CL:0000823 immature natural killer cell NEW:3 immature natural killer cell, human no re-parent Human immature NK (stage 3-like). +CL:0002345 CD27-low, CD11b-low immature natural killer cell, mouse mouse NCBITaxon:10090 Mus musculus CL:0000823 immature natural killer cell NEW:4 immature natural killer cell, mouse no re-parent Mouse immature NK. +CL:0002346 Dx5-negative, NK1.1-positive immature natural killer cell, mouse mouse NCBITaxon:10090 Mus musculus CL:0000823 immature natural killer cell NEW:4 immature natural killer cell, mouse no re-parent Mouse immature NK. DX5-negative NK1.1-positive cells overlap with ILC1 (Riggan 2019, PMID:31500958). +CL:0002347 CD27-high, CD11b-high natural killer cell, mouse mouse NCBITaxon:10090 Mus musculus CL:0000824 mature natural killer cell NEW:6 mature natural killer cell, mouse no re-parent Mouse CD27/CD11b subset. +CL:0002348 CD27-low, CD11b-high natural killer cell, mouse mouse NCBITaxon:10090 Mus musculus CL:0000824 mature natural killer cell NEW:6 mature natural killer cell, mouse no re-parent Mouse CD27/CD11b subset. +CL:0002349 CD27-high, CD11b-low natural killer cell, mouse mouse NCBITaxon:10090 Mus musculus CL:0000824 mature natural killer cell NEW:6 mature natural killer cell, mouse no re-parent Mouse CD27/CD11b subset. CD11b-low CD27-high is the second of four maturation stages (Chiossone 2009, PMID:19234143, abstract; full text not accessible) and immature in neonates (Andrews 2010, PMID:19949422), yet the term sits under mature NK. Question for Dr. Diehl: move to NEW:4? +CL:0002426 CD11b-positive, CD27-positive natural killer cell, mouse mouse CL:0002438 NK1.1-positive natural killer cell, mouse CL:0002438 NK1.1-positive natural killer cell, mouse no none Stays under its current mouse parent (mouse taxon inherited). Possible duplicate of CL:0002347. +CL:0002438 NK1.1-positive natural killer cell, mouse mouse NCBITaxon:10090 Mus musculus CL:0000824 mature natural killer cell NEW:6 mature natural killer cell, mouse no re-parent Mouse NK1.1+ NK; its 11 descendants move with it. +CL:0002439 NKGA2-positive natural killer cell, mouse mouse CL:0002438 NK1.1-positive natural killer cell, mouse CL:0002438 NK1.1-positive natural killer cell, mouse no none Stays under its current mouse parent (mouse taxon inherited). +CL:0002440 Ly49D-positive natural killer cell, mouse mouse CL:0002438 NK1.1-positive natural killer cell, mouse CL:0002438 NK1.1-positive natural killer cell, mouse no none Stays under its current mouse parent (mouse taxon inherited). +CL:0002441 CD94-positive natural killer cell, mouse mouse CL:0002438 NK1.1-positive natural killer cell, mouse CL:0002438 NK1.1-positive natural killer cell, mouse no none Stays under its current mouse parent (mouse taxon inherited). +CL:0002442 CD94-negative, Ly49CI-negative natural killer cell, mouse mouse NCBITaxon:10090 Mus musculus CL:0000623 natural killer cell CL:0002438 NK1.1-positive natural killer cell, mouse no re-parent The only Ly49/CD94 subset not under CL:0002438, although its definition says NK1.1-positive. Re-parent (it then falls under NEW:2 through CL:0002438). +CL:0002443 Ly49CI-positive natural killer cell, mouse mouse CL:0002438 NK1.1-positive natural killer cell, mouse CL:0002438 NK1.1-positive natural killer cell, mouse no none Stays under its current mouse parent (mouse taxon inherited). +CL:0002444 Ly49H-positive natural killer cell, mouse mouse CL:0002438 NK1.1-positive natural killer cell, mouse CL:0002438 NK1.1-positive natural killer cell, mouse no none Stays under its current mouse parent (mouse taxon inherited). +CL:0002445 Ly49D-negative natural killer cell, mouse mouse CL:0002438 NK1.1-positive natural killer cell, mouse CL:0002438 NK1.1-positive natural killer cell, mouse no none Stays under its current mouse parent (mouse taxon inherited). +CL:0002446 Ly49CI-negative natural killer cell, mouse mouse CL:0002438 NK1.1-positive natural killer cell, mouse CL:0002438 NK1.1-positive natural killer cell, mouse no none Stays under its current mouse parent (mouse taxon inherited). +CL:0002447 CD94-negative natural killer cell, mouse mouse CL:0002438 NK1.1-positive natural killer cell, mouse CL:0002438 NK1.1-positive natural killer cell, mouse no none Stays under its current mouse parent (mouse taxon inherited). +CL:0002448 Ly49H-negative natural killer cell, mouse mouse CL:0002438 NK1.1-positive natural killer cell, mouse CL:0002438 NK1.1-positive natural killer cell, mouse no none Stays under its current mouse parent (mouse taxon inherited). +CL:0002449 CD94-positive Ly49CI-positive natural killer cell, mouse mouse CL:0002441 CD94-positive natural killer cell, mouse; CL:0002443 Ly49CI-positive natural killer cell, mouse CL:0002441 CD94-positive natural killer cell, mouse; CL:0002443 Ly49CI-positive natural killer cell, mouse no none Stays under its current mouse parent (mouse taxon inherited). +CL:2000054 hepatic pit cell generic CL:4047101 liver-resident natural killer cell CL:4047101 liver-resident natural killer cell no none Recommended default: keep generic under liver-resident NK. First described in rat (Wisse 1976, PMID:991252); CL cites a later review naming no species. +CL:4033071 cycling natural killer cell generic CL:0000623 natural killer cell CL:0000623 natural killer cell no none Recommended default: keep generic. The only definition source (Hao 2021, PMID:34062119) is a human PBMC study, but a cycling state is not species-specific. +CL:4047101 liver-resident natural killer cell generic CL:0000623 natural killer cell CL:0000623 natural killer cell no none Recommended default: keep generic (Dr. Diehl's example). Separate gaps.tsv draft proposes moving the human-marker sentences of the definition to a human child term. +CL:4052028 uterine natural killer cell generic CL:0000623 natural killer cell CL:0000623 natural killer cell no none Recommended default: keep generic (mice have uterine NK cells, Shreeve 2021, PMID:33887202). Make the definition species-neutral and move the menstrual-cycle wording to NEW:7. +CL:4052051 uterine natural killer cell 1, human human NCBITaxon:9606 Homo sapiens CL:4052028 uterine natural killer cell NEW:7 uterine natural killer cell, human (recommended) no re-parent Human uterine NK subset. +CL:4052052 uterine natural killer cell 2, human human NCBITaxon:9606 Homo sapiens CL:4052028 uterine natural killer cell NEW:7 uterine natural killer cell, human (recommended) no re-parent Human uterine NK subset. +CL:4052053 uterine natural killer cell 3, human human NCBITaxon:9606 Homo sapiens CL:4052028 uterine natural killer cell NEW:7 uterine natural killer cell, human (recommended) no re-parent Human uterine NK subset. +NEW:1 natural killer cell, human human CL:0000623 natural killer cell yes new grouping term (in taxon NCBITaxon:9606 Homo sapiens) Human branch under NK: groups every human NK term (Dr. Diehl, 2026-10-05). +NEW:2 natural killer cell, mouse mouse CL:0000623 natural killer cell yes new grouping term (in taxon NCBITaxon:10090 Mus musculus) Mouse branch under NK: groups every mouse NK term. +NEW:3 immature natural killer cell, human human CL:0000823 immature natural killer cell; NEW:1 natural killer cell, human yes new grouping term (in taxon NCBITaxon:9606 Homo sapiens) Parallel pair for immature NK; groups CL:0002338 and CL:0002344. +NEW:4 immature natural killer cell, mouse mouse CL:0000823 immature natural killer cell; NEW:2 natural killer cell, mouse yes new grouping term (in taxon NCBITaxon:10090 Mus musculus) Parallel pair for immature NK; groups CL:0002345 and CL:0002346. +NEW:5 mature natural killer cell, human human CL:0000824 mature natural killer cell; NEW:1 natural killer cell, human yes new grouping term (in taxon NCBITaxon:9606 Homo sapiens) Dr. Diehl's example pair; groups CL:0000938, CL:0000939 and CL:0002343. +NEW:6 mature natural killer cell, mouse mouse CL:0000824 mature natural killer cell; NEW:2 natural killer cell, mouse yes new grouping term (in taxon NCBITaxon:10090 Mus musculus) Dr. Diehl's example pair; groups CL:0002347, CL:0002348, CL:0002349 and CL:0002438 with its subtree. +NEW:7 uterine natural killer cell, human human CL:4052028 uterine natural killer cell; NEW:1 natural killer cell, human yes new grouping term (in taxon NCBITaxon:9606 Homo sapiens) RECOMMENDED. Groups uNK1-3 and decidual NK (all human) and takes the menstrual-cycle wording from CL:4052028; the generic term stays for other species (mice have uNK cells, Shreeve 2021, PMID:33887202). +NEW:8 group 1 innate lymphoid cell, human human CL:0001067 group 1 innate lymphoid cell yes new grouping term (in taxon NCBITaxon:9606 Homo sapiens) RECOMMENDED. Requested in repo issue #14 (https://github.com/Cellular-Semantics/SOULCAP_CL_Mapping/issues/14); matches group 2 and 3. Parent of CL:0001077 ILC1, human and NEW:1. +NEW:9 group 1 innate lymphoid cell, mouse mouse CL:0001067 group 1 innate lymphoid cell yes new grouping term (in taxon NCBITaxon:10090 Mus musculus) OPTIONAL (Dr. Diehl to decide). Mouse counterpart of NEW:8 and parent of NEW:2. CL has no 'ILC1, mouse' term to put under it. diff --git a/docs/protege_ncam1_query_repro.md b/docs/protege_ncam1_query_repro.md new file mode 100644 index 0000000..0b7b01b --- /dev/null +++ b/docs/protege_ncam1_query_repro.md @@ -0,0 +1,71 @@ +# Protégé query for NCAM1 (CD56) returns too few classes: repro note + +Dr. Diehl reported on 5 October 2026 that a Protégé DL query for +`has plasma membrane part some NCAM1` did not return a cell type that has that +axiom, even after running the reasoner. **Not filed against CL** until it is +reproduced. This note lists what the query should return according to +Ubergraph, the likely causes, and what to check. + +## What the query should return + +Ubergraph (queried 2026-10-05) has these **positive** NCAM1 axioms on CL +terms. "Lacks" axioms (`CL:4030046`) should *not* be returned and are left out. + +| CL term | Relation | PRO term | +|---|---|---| +| `CL:0000570` parafollicular cell | has plasma membrane part (`RO:0002104`) | `PR:000001024` | +| `CL:0002338` CD56-positive, CD161-positive immature natural killer cell, human | has plasma membrane part (`RO:0002104`) | `PR:000001024` | +| `CL:0000938` CD16-negative, CD56-bright natural killer cell, human | has high plasma membrane amount (`RO:0015015`) | `PR:000001024` | +| `CL:0002343` decidual natural killer cell, human | has high plasma membrane amount (`RO:0015015`) | `PR:000001024` | +| `CL:0000939` CD16-positive, CD56-dim natural killer cell, human | has low plasma membrane amount (`RO:0015016`) | `PR:000001024` | +| `CL:0001073` CD34-negative, CD56-positive, CD117-positive innate lymphoid cell, human | has plasma membrane part (`RO:0002104`) | `PR:P13591` (human) | +| `CL:0001074` CD34-positive, CD56-positive, CD117-positive common innate lymphoid precursor, human | has plasma membrane part (`RO:0002104`) | `PR:P13591` (human) | +| `CL:4052055` mature NK T cell, human | has plasma membrane part (`RO:0002104`) | `PR:P13591` (human) | + +Subclasses of these terms should also be returned. + +## Names of the protein + +| Identifier | Label | Notes | +|---|---|---| +| `PR:000001024` | neural cell adhesion molecule 1 | Exact synonyms: CD56, NCAM1, N-CAM-1, NCAM-1. Related synonym: NCAM | +| `PR:P13591` | neural cell adhesion molecule 1 (human) | A subclass of `PR:000001024` in PRO (Ubergraph) | +| UniProtKB:P13591 | — | The human UniProt entry behind `PR:P13591` | + +"NCAM1" and "CD56" are **synonyms**, not labels. If Protégé renders entities +by label, the query has to name the class as `'neural cell adhesion molecule 1'`. + +## Likely causes, to test one at a time + +1. **The relation used.** The CD56-bright, CD56-dim and decidual NK terms + don't use `has plasma membrane part`. They use `has high` / `has low plasma + membrane amount`. In Ubergraph these two are sub-properties of `has plasma + membrane part`, so a reasoner should return them. But it can only do that if + the loaded file contains those sub-property axioms (from the RO import). If + the missing class is one of these three, this is the likely cause. +2. **The protein term used.** `CL:0001073`, `CL:0001074` and `CL:4052055` use + the human protein `PR:P13591`, not `PR:000001024`. The query only returns + them if the loaded file says `PR:P13591` is a subclass of `PR:000001024`. + PRO says so, but CL's PRO import may not include that link. +3. **The name typed.** Typing `NCAM1` or `CD56` may resolve to nothing, or to a + different entity, if Protégé is rendering by label (see above). +4. **Protégé settings.** Check that the DL query has "Subclasses" ticked (not + only "Direct subclasses") and that the reasoner was synchronised *after* + the file finished loading. +5. **Reasoner.** Record which reasoner was used (ELK, HermiT, …) and its + version. Some reasoners handle anonymous class-expression queries + differently; this hasn't been checked here. + +## What to record when reproducing + +- CL file and version (for example `cl-edit.owl` at commit X, or `cl.owl` + release date), and whether imports were loaded. +- The exact query text, copied from Protégé. +- Reasoner name and version, and whether it was synchronised. +- Expected class (from the table above) vs. what was returned. +- Results of the same query with `'neural cell adhesion molecule 1'`, with + `PR_000001024` by IRI, and with `has high plasma membrane amount some …`. + +If the difference comes from cause 1 or 2 (a missing import axiom), that is a +CL import issue worth filing. If it comes from cause 3 or 4, nothing needs to +be filed. diff --git a/literature/README.md b/literature/README.md index 3a38857..8ef87d2 100644 --- a/literature/README.md +++ b/literature/README.md @@ -80,6 +80,8 @@ WebFetch (an AI model copying page text), so they start as `no` and become not be accessed, say so; never quote from memory or from an abstract you have not retrieved. Never write an identifier from memory. - Paywalled papers are listed as inaccessible. Do not commit paywalled PDFs. + A library copy used to check a quote goes in `literature/paywalled/`, which + is gitignored; open-access PDFs may still be committed elsewhere. - "No evidence found" is a valid, recorded result. - The `pro-marker-species-support`, `mapping-audit` and `soulcap-cl-matching` skills read `evidence.tsv`; older rows of diff --git a/reports/README.md b/reports/README.md index c7757c7..8060d00 100644 --- a/reports/README.md +++ b/reports/README.md @@ -23,7 +23,7 @@ literature evidence in [literature/](../literature/), and planning documents in | File | What it is | Produced by | Type | |---|---|---|---| -| [audit_dashboard.html](audit_dashboard.html) | Offline, filterable dashboard of entities, proposals, findings, marker coverage, gaps and provenance | `uv run soulcap-audit` | Generated | +| [audit_dashboard.html](audit_dashboard.html) | Offline, filterable dashboard of entities, proposals, findings, marker coverage, gaps, provenance and species evidence (human and mouse status per CL marker: `supported`, `contradicted`, `no_evidence_found`, `not_applicable`, `not_assessed`; only `contradicted` raises a finding) | `uv run soulcap-audit` | Generated | | [audit_summary.md](audit_summary.md) | Text summary of the same audit | `uv run soulcap-audit` | Generated | | [audit_data.json](audit_data.json) | Data behind the dashboard | `uv run soulcap-audit` | Generated | | [matcher_evaluation.md](matcher_evaluation.md), [matcher_evaluation.tsv](matcher_evaluation.tsv), [matcher_evaluation.json](matcher_evaluation.json) | How well the matcher retrieves the proposed CL targets (provisional agreement, not accuracy) | `uv run soulcap-evaluate` | Generated | @@ -60,7 +60,10 @@ These are generated, but they are inputs to other code and need network access |---|---|---|---| | [gaps.tsv](gaps.tsv) | Cases with no good CL match, CL/marker conflicts, CL axiom gaps, or sheet data problems. Filed as GitHub issues by the `gap-issue-filing` skill | Hand-maintained | Curated | | [cl_term_issues.md](cl_term_issues.md) | Proposed Cell Ontology corrections found during mapping | Hand-maintained | Curated | -| [pro_marker_species_support.tsv](pro_marker_species_support.tsv) | For every directly asserted PRO marker on a mapped CL term (87 pairs): is the assertion valid in human, mouse, or both? The first 10 columns are the original human-only check (issue #11, read-only); `species_scope`, `human_*`/`mouse_*` citation and quote, `note` and `checked_on` hold the human/mouse assessment (Dr. Diehl's request, 2026-09-28; pilot on 3 CL terms so far). Where they disagree with the legacy `species_support`, the new columns take precedence | `pro-marker-species-support` skill; every quote checked against the paper's full text | Curated | +| [pro_marker_species_support.tsv](pro_marker_species_support.tsv) | Is each CL marker assertion valid in human, mouse, or both? One row per directly asserted PRO marker on (a) every mapped CL term (87 pairs) and (b) every term under group 1 ILC, natural killer cell included (NK audit, `audit_batch = nk_2026-10`). The first 10 columns are the original human-only check (issue #11, read-only). `human_status` / `mouse_status` hold one value each: `supported`, `contradicted` (evidence against; any supporting quote goes in `counter_citation`/`counter_quote`), `no_evidence_found` (searched, nothing found; *not* a contradiction), `not_applicable` (term or PRO protein limited to the other species, or a human-only marker such as HLA-DRA or NCAM1/CD56 for mouse), or blank (not assessed). `species_scope` summarises them as `human`/`mouse`/`both`/`unresolved`. `human_*`/`mouse_*` hold the citation and exact quote, `note` and `checked_on` the reasoning and date. Where they disagree with the legacy `species_support`, the new columns take precedence | `pro-marker-species-support` skill; every quote checked against the paper's full text or abstract | Curated | +| [nk_marker_audit_2026-10.md](nk_marker_audit_2026-10.md) | NK and group 1 ILC marker audit for Dr. Diehl (meeting 2026-10-05): counts per status, the HLA-DRA and CD56 cases, other CL issue candidates, open questions | Hand-written from `pro_marker_species_support.tsv` | Curated | +| [nk_hladr_conflicts_2026-10.tsv](nk_hladr_conflicts_2026-10.tsv) | One sheet of the conflicting "lacks HLA-DRA" NK assertions (`CL:0000938`, `CL:0000939`): definition PMIDs, what they say, quotes for and against. To attach to the CL issue | Hand-maintained | Curated | +| [plasmablast_marker_audit_2026-10.md](plasmablast_marker_audit_2026-10.md) | Plasmablast markers and lineage, with a proposal to move them from the generic term to a species-specific child (meeting 2026-10-05) | Hand-written | Curated | ## Not tracked diff --git a/reports/audit_dashboard.html b/reports/audit_dashboard.html index f54a5a1..5166441 100644 --- a/reports/audit_dashboard.html +++ b/reports/audit_dashboard.html @@ -28,7 +28,7 @@

How to interpret this audit

Generated by soulcap-audit. Re-run the command to refresh this snapshot. No external scripts, fonts, or services are used.

- +