Skip to content

Add HRA lymph NTR template (41 new terms)#3718

Open
zhengj2007 wants to merge 7 commits into
masterfrom
add-hra-lymph-ntr
Open

Add HRA lymph NTR template (41 new terms)#3718
zhengj2007 wants to merge 7 commits into
masterfrom
add-hra-lymph-ntr

Conversation

@zhengj2007

Copy link
Copy Markdown
Collaborator

Generated via bulk_ntr_workflow from source_data/lymph.csv (46 input rows).

Pipeline completed through Stage 4:

  • 41 new UBERON terms in leaf template
  • 0 group terms
  • 3 confirmed existing matches excluded
  • 1 out-of-scope term excluded
  • 1 manual-curation term flagged
  • 7 name corrections reported

Resolved final pending row by removing
'ASCTB-TEMP_medial-lymph-node-of-common-illiac-lymph-nodes' from template, as it is a confirmed existing match to UBERON:0037532 (recorded in candidates.tsv).

Generated via bulk_ntr_workflow from source_data/lymph.csv (46 input rows).

Pipeline completed through Stage 4:
- 41 new UBERON terms in leaf template
- 0 group terms
- 3 confirmed existing matches excluded
- 1 out-of-scope term excluded
- 1 manual-curation term flagged
- 7 name corrections reported

Resolved final pending row by removing
'ASCTB-TEMP_medial-lymph-node-of-common-illiac-lymph-nodes' from template,
as it is a confirmed existing match to UBERON:0037532
(recorded in candidates.tsv).

Signed-off-by: dragon-ai-agent <dragon-ai-agent@users.noreply.github.com>
@ai4c-agent

ai4c-agent Bot commented May 26, 2026

Copy link
Copy Markdown

Claude finished @zhengj2007's task in 6m 18s —— View job


PR Review: Add HRA lymph NTR template (41 new terms)

  • Gather context and understand the request
  • Read template files and source data
  • Review definitions and references
  • Check parent term consistency in ontology
  • Check OBO/ODK conventions
  • Post final review summary

Review Checklist


🔴 CRITICAL Issues

1. UNRESOLVABLE: prefix in part_of fields — will break the ROBOT build

Six terms in src/templates/hra-lymph.template.tsv have invalid OBO IDs in the part_of column:

Term Bad part_of value
UBERON_8930108 — anterior lymph trunk of accompanying suprarenal vein UNRESOLVABLE:suprarenal vein region
UBERON_8930110 — collecting lymph trunk of lymphatics of soft parts covering posterior thoracic wall UNRESOLVABLE:posterior thoracic wall
UBERON_8930123 — left lateral aortic lymph node UNRESOLVABLE:left lateral aortic region
UBERON_8930135 — posterior extrathoracic lymph node UNRESOLVABLE:posterior extrathoracic region
UBERON_8930141 — right lateral aortic lymph node UNRESOLVABLE:right lateral aortic region
UBERON_8930144 — subclavicular lymph node UNRESOLVABLE:subclavicular region

UNRESOLVABLE: is not a recognised OBO/ROBOT prefix. ROBOT will either fail to parse the template or produce malformed OWL axioms. These cells must be either left blank (no part_of) or replaced with valid UBERON IDs before the template can build.

2. Semantically wrong part_of — UBERON:0001631 is the thoracic duct, not an intercostal region

  • hra-lymph.template.tsv row 9 (UBERON_8930115 — efferent lymphatics from fifth or sixth lowermost intercostal spaces): part_of UBERON:0001631
  • Row 10 (UBERON_8930116 — efferent lymphatics from third, fourth, and fifth intercostal spaces): part_of UBERON:0001631

UBERON:0001631 = thoracic duct. The definitions correctly state these vessels drain toward the thoracic duct, but they are not part of the thoracic duct. There is no intercostal space term in UBERON, so the part_of should either be removed or pointed to a thoracic region (e.g. thoracic wall).

3. Duplicate FMA:12775 xref will corrupt cross-reference mappings

  • UBERON:0035520 (anterior mediastinal lymph node) already has xref: FMA:12775 — this is the correct mapping.
  • UBERON_8930121 (left anterior mediastinal lymph node) also gets xref: FMA:12775.
  • UBERON_8930124 (lymph node of superior lymphatic collecting vessel of left lung) also gets xref: FMA:12775.

Three UBERON terms sharing one FMA ID will produce three-way bidirectional mapping conflicts. The two new terms should either have no FMA xref, or be mapped to distinct FMA IDs (if they exist).

4. "left lateral aortic lymph node" name collides with an existing RELATED synonym in UBERON:0016386

id: UBERON:0016386
name: paraaortic lymph node
synonym: "left lateral aortic lymph node" RELATED [FMA:16604]

The new term UBERON_8930123 uses exactly this string as its primary label. If a new separate concept is justified, the RELATED synonym on UBERON:0016386 must be updated or removed before merging to avoid label duplication. Similarly, the candidates.tsv marks this as only a possible_match, so the decision to create a new term warrants explicit curator sign-off.


🟡 IMPORTANT Issues

5. "epitrochlear lymph node" (UBERON_8930117) may be redundant with UBERON:0038870

candidates.tsv notes UBERON:0038870 (cubital lymph node) as a possible match, with the recommendation that "epitrochlear should be added as a synonym to cubital lymph node, or if it represents a distinct structure that requires a new term." The workflow creates a new term without resolving this ambiguity. If epitrochlear ≡ cubital (same anatomical entity), a new term is wrong — epitrochlear should be added as a synonym to UBERON:0038870 instead.

6. part_of UBERON:0007302 is semantically imprecise for UBERON_8930113

  • UBERON:0007302 = pectoral appendage vasculature (a vasculature, not an anatomical region)
  • Used as part_of for "deep radial lymphatic channel", which the definition places specifically in the forearm

A lymphatic vessel is typically part_of an anatomical region (e.g. forelimb zeugopod UBERON:0002386). Making it part_of the entire vasculature of the pectoral appendage is both too broad and ontologically odd (vessels are not usually part_of a vasculature in this way).

7. part_of target too broad for UBERON_8930121

  • "left anterior mediastinal lymph node" has part_of UBERON:0003728 (mediastinum — the entire central thoracic cavity)
  • UBERON:0008820 (anterior mediastinum) is available and would be a more precise target consistent with the definition

8. part_of UBERON:0035520 is an unusual pattern for UBERON_8930124

  • "lymph node of superior lymphatic collecting vessel of left lung" is specified as part_of UBERON:0035520 (anterior mediastinal lymph node)
  • In UBERON, anatomical structures are typically part_of regions (spaces/organs), not part_of other lymph nodes. This needs anatomical verification.

9. ~15 terms lack PMID support

The following terms have only an ASCTB-TEMP URI as def_xref — no peer-reviewed literature:

  • UBERON_8930108, 8930109, 8930110, 8930121, 8930125, 8930126, 8930130, 8930131, 8930133, 8930135, 8930138, 8930142, 8930143, 8930144, 8930151, 8930152

UBERON guidelines prefer at least one PMID per definition. The ASCTB-TEMP IRI is a provenance link to the HRA source, not a citable publication.


🔵 Suggestions

10. "circumflex lymphatic channel" (UBERON_8930109) has no part_of and the definition does not name the specific anatomical structure it encircles — "around an anatomical structure" is uninformative. Consider specifying the structure or adding a narrower part_of.

11. "right lateral aortic lymph node" (UBERON_8930141): Unlike its left counterpart, UBERON:0016386 does not carry "right lateral aortic lymph node" as a synonym, so there is no pre-existing label conflict. The is_a parent (UBERON:0016386) is appropriate.

12. "left anterior mediastinal lymph node" (UBERON_8930121) part_of choice: Consider part_of UBERON:0008820 (anterior mediastinum) rather than part_of UBERON:0003728 (mediastinum) for consistency with the right-side analogue UBERON_8930139, which correctly uses part_of UBERON:0008820.


Summary

This PR introduces a well-structured NTR template from the HRA lymph source data. The pipeline-level decisions (excluded confirmed matches, flagged manual curation items, corrected naming errors) are documented and largely sound. However, four critical issues must be resolved before the template can build and produce valid OWL:

  1. Remove or replace the six UNRESOLVABLE: values in part_of cells.
  2. Fix the two part_of UBERON:0001631 (thoracic duct) assignments for the intercostal efferent lymphatic terms.
  3. Remove FMA:12775 xrefs from UBERON_8930121 and UBERON_8930124 (already used by UBERON:0035520).
  4. Resolve the "left lateral aortic lymph node" label/synonym collision with UBERON:0016386.

Additionally, the epitrochlear/cubital overlap (issue #5) warrants explicit curator verification before the term is committed to the ontology.

@ai4c-agent ai4c-agent Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Four critical issues must be resolved before this template can build:

  1. UNRESOLVABLE: prefix in part_of fields for 6 terms — not a valid OBO/ROBOT IRI, will break the build.
  2. Wrong part_of parent: UBERON_8930115 and UBERON_8930116 use part_of UBERON:0001631 (thoracic duct), but these vessels drain toward the thoracic duct — they are not part of it.
  3. Duplicate FMA:12775 xref: UBERON_8930121 and UBERON_8930124 both carry FMA:12775, which is already mapped to UBERON:0035520. Three-way mapping conflict will corrupt cross-references.
  4. Label collision: "left lateral aortic lymph node" (UBERON_8930123) duplicates an existing RELATED synonym on UBERON:0016386; the synonym on the existing term must be updated or removed.

Additional important items: epitrochlear lymph node (UBERON_8930117) possible redundancy with UBERON:0038870 needs curator sign-off; ~15 terms lack PMID support; several part_of targets need review (UBERON:0007302 for UBERON_8930113; UBERON:0003728 vs :0008820 for UBERON_8930121). Full details in the inline review comment.

@github-actions

Copy link
Copy Markdown
Contributor

This PR has not seen any activity in the past month; if nobody comments or reviews it in the next week, the PR creator will be allowed to proceed with merging without explicit approval, should they wish to do so.

@ai4c-agent

ai4c-agent Bot commented Jul 7, 2026

Copy link
Copy Markdown

Claude finished @zhengj2007's task in 2m 20s —— View job


Review Checklist

What changed since the last review

The only new commit on this branch (c1a45f2) is a merge of master (bringing in the 2026-06-23 release) — it does not touch any of the PR's own files. src/templates/hra-lymph.template.tsv and the other hra-lymph-* files are byte-identical to the version reviewed on 2026-05-26.

I re-verified the key claims directly against src/ontology/uberon-edit.obo (not just relying on the old review):

  • obo-grep.pl -r 'id: UBERON:0016386' confirms paraaortic lymph node still carries synonym: "left lateral aortic lymph node" RELATED [FMA:16604] — an exact label collision with the new term UBERON_8930123.
  • obo-grep.pl -r 'id: UBERON:0035520' confirms anterior mediastinal lymph node already has xref: FMA:12775. The template still assigns this same FMA ID to two additional new terms (UBERON_8930121, UBERON_8930124), which will corrupt the xref mapping.
  • The template still contains six UNRESOLVABLE:... values in part_of columns (UBERON_8930108, 8930110, 8930123, 8930135, 8930141, 8930144) — not a valid OBO/ROBOT prefix, will break the build.
  • UBERON_8930115 and UBERON_8930116 still use part_of UBERON:0001631 (thoracic duct) despite the definitions only describing drainage toward it, not part-hood.

🔴 CRITICAL Issues (unresolved from prior review)

  1. UNRESOLVABLE: prefix in part_of for 6 terms — will break the ROBOT build.
  2. part_of UBERON:0001631 (thoracic duct) wrongly applied to UBERON_8930115 and UBERON_8930116.
  3. Duplicate FMA:12775 xref on UBERON_8930121 and UBERON_8930124, already used by UBERON:0035520 — three-way mapping conflict.
  4. Label collision: "left lateral aortic lymph node" (UBERON_8930123) duplicates the existing RELATED synonym on UBERON:0016386, which hasn't been updated/removed.

🟡 IMPORTANT (still open)

  • Epitrochlear lymph node (UBERON_8930117) possible redundancy with cubital lymph node (UBERON:0038870) — needs explicit curator sign-off per candidates.tsv.
  • ~15 terms lack PMID support (ASCTB-TEMP URI only).
  • Imprecise part_of targets: UBERON:0007302 for UBERON_8930113; UBERON:0003728 vs. UBERON:0008820 for UBERON_8930121; UBERON:0035520 as part_of target for UBERON_8930124.

Full term-by-term detail is in the original review comment from 2026-05-26 — it still applies unchanged.

Merge recommendation

Request changes. Since the underlying template content hasn't changed, I've submitted another REQUEST_CHANGES review. The build-breaking (UNRESOLVABLE:) and mapping-corrupting (duplicate FMA xref) issues must be fixed before this can merge.

@ai4c-agent ai4c-agent Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Checklist

  • Hierarchy and parents are consistent — FAIL (see critical issues #1, #2, #4)
  • Definitions and supporting references look adequate — PARTIAL (~15 terms lack PMID support)
  • Obsolete or replacement handling is safe — N/A (no obsoletions)
  • OBO and ODK conventions appear preserved — FAIL (invalid UNRESOLVABLE: prefix, duplicate FMA xrefs)
  • No obvious CI, auth, or workflow regression — PASS (no workflow files touched)

Summary

I re-checked this PR after the latest push. The only new commit (c1a45f2) is a merge of master into this branch (bringing in the 2026-06-23 release) — the actual PR content in src/templates/hra-lymph.template.tsv and related files is byte-identical to what was reviewed on 2026-05-26. I re-verified directly against src/ontology/uberon-edit.obo and none of the four critical issues from the prior review have been addressed:

  1. UNRESOLVABLE: prefix in part_of — still present for 6 terms (UBERON_8930108, 8930110, 8930123, 8930135, 8930141, 8930144). This is not a valid OBO/ROBOT prefix and will break the template build.
  2. Wrong part_of target — UBERON_8930115 and UBERON_8930116 still use part_of UBERON:0001631 (thoracic duct), even though the definitions say these vessels merely drain toward the thoracic duct.
  3. Duplicate FMA:12775 xref — confirmed via uberon-edit.obo that UBERON:0035520 (anterior mediastinal lymph node) already carries xref: FMA:12775. The template still assigns the same xref to two new terms (UBERON_8930121, UBERON_8930124), which will produce a three-way mapping conflict.
  4. Label collision — confirmed UBERON:0016386 (paraaortic lymph node) still carries synonym: "left lateral aortic lymph node" RELATED [FMA:16604], identical to the new term's primary label (UBERON_8930123). This needs to be resolved (update/remove the existing synonym, or justify the duplication) before merging.

Other important items from the original review are also still open: the epitrochlear (UBERON_8930117) vs. cubital lymph node (UBERON:0038870) overlap needs curator sign-off, ~15 terms still lack PMID support, and several part_of targets remain imprecise (UBERON:0007302 for UBERON_8930113; UBERON:0003728 vs. UBERON:0008820 for UBERON_8930121; UBERON:0035520 as a part_of target for UBERON_8930124).

Full details, including the term-by-term table, are in the prior review comment and inline review from 2026-05-26 — those still apply unchanged. Requesting changes again since the build-breaking and mapping-corrupting issues (#1#3) remain unresolved.

@zhengj2007

Copy link
Copy Markdown
Collaborator Author

@dragon-ai-agent
Please proposed the parents of following 6 terms:
UBERON_8930108 — anterior lymph trunk of accompanying suprarenal vein
UBERON_8930110 — collecting lymph trunk of lymphatics of soft parts covering posterior thoracic wall
UBERON_8930123 — left lateral aortic lymph node
UBERON_8930135 — posterior extrathoracic lymph node
UBERON_8930141 — right lateral aortic lymph node
UBERON_8930144 — subclavicular lymph node

You can find the terms in src/templates/hra-lymph.template.tsv.

@dragon-ai-agent

Copy link
Copy Markdown
Collaborator

🤖 Working on it...

Follow along: View workflow run

@dragon-ai-agent

@dragon-ai-agent

Copy link
Copy Markdown
Collaborator

@zhengj2007 Here are proposed UBERON part_of targets for each of the 6 terms currently using UNRESOLVABLE: values. In every case the is_a parent already in the template is preserved; only the part_of cell needs to change (or be blanked). I've flagged laterality/synonym concerns where they still remain, but the recommendations below are limited to the specific part_of question you asked.

1. UBERON_8930108 — anterior lymph trunk of accompanying suprarenal vein

  • Current: part_of UNRESOLVABLE:suprarenal vein region
  • Proposed: part_of UBERON:0002369 (adrenal gland)
  • Rationale: UBERON:0001146 (suprarenal vein) is logically defined as vessel_drains_blood_from UBERON:0002369 (adrenal gland). The definition places the trunk alongside the suprarenal vein, so the adrenal gland is the closest existing anatomical anchor. There is no dedicated "suprarenal vein region" or "suprarenal region" term in UBERON.

2. UBERON_8930110 — collecting lymph trunk of lymphatics of soft parts covering posterior thoracic wall

  • Current: part_of UNRESOLVABLE:posterior thoracic wall
  • Proposed: part_of UBERON:0016403 (thoracic wall)
  • Rationale: UBERON has no "posterior thoracic wall" subclass. UBERON:0016403 (thoracic wall, FMA:10428) is the closest available anchor and already covers the ribcage, muscle group of thoracic wall, and associated soft tissues. If greater precision is required, an alternative is part_of UBERON:0001137 (dorsum / back, FMA:14181), which specifically covers the posterior body-wall region.

3. UBERON_8930123 — left lateral aortic lymph node

  • Current: part_of UNRESOLVABLE:left lateral aortic region
  • Proposed: part_of UBERON:0001516 (abdominal aorta)
  • Rationale: The definition places the node "on the left lateral aspect of the abdominal aorta, typically between the renal vessels and the aortic bifurcation." UBERON:0001516 (abdominal aorta, FMA:3789) is the standard anchor for paraaortic-group nodes in this position.
  • Pre-existing collision still to resolve (out of scope for this comment but flagged in prior reviews): UBERON:0037601 already exists as left parietal lumbar lymph node (FMA:16602), and UBERON:0016386 (the current is_a parent) carries "left lateral aortic lymph node" RELATED [FMA:16604] as a synonym. Before merging, please confirm whether this warrants a new term at all, or whether the intended target is UBERON:0037601.

4. UBERON_8930135 — posterior extrathoracic lymph node

  • Current: part_of UNRESOLVABLE:posterior extrathoracic region
  • Proposed: part_of UBERON:0016403 (thoracic wall)
  • Rationale: "Extrathoracic" here indicates the node lies outside the thoracic cavity proper, and the definition explicitly says it drains "posterior thoracic wall structures." UBERON:0016403 is the most direct anchor. Alternatively part_of UBERON:0001137 (dorsum / back) if a strictly external/posterior placement is preferred over the wall.

5. UBERON_8930141 — right lateral aortic lymph node

  • Current: part_of UNRESOLVABLE:right lateral aortic region
  • Proposed: part_of UBERON:0001516 (abdominal aorta)
  • Rationale: Mirror of proposal 2 other dangling references #3. Note: unlike its left counterpart, UBERON:0016386 does not carry a "right lateral aortic lymph node" RELATED synonym, so there is no pre-existing label collision on this side.

6. UBERON_8930144 — subclavicular lymph node

  • Current: part_of UNRESOLVABLE:subclavicular region
  • Proposed: part_of UBERON:0035168 (infraclavicular region, FMA:61479)
  • Rationale: "Subclavicular" and "infraclavicular" are used interchangeably in anatomical literature for the region below the clavicle. UBERON:0035168 is the direct anchor.
  • ⚠ Note: the definition suggests this term may overlap with the apical axillary lymph node group (UBERON:0037503). If that reading is preferred, changing the is_a from UBERON:0000029 (lymph node) to UBERON:0037503 (apical axillary lymph node) would be more informative than adding part_of. Curator judgment needed.

Summary table

Term Label Proposed part_of
UBERON_8930108 anterior lymph trunk of accompanying suprarenal vein UBERON:0002369 (adrenal gland)
UBERON_8930110 collecting lymph trunk of lymphatics of soft parts covering posterior thoracic wall UBERON:0016403 (thoracic wall)
UBERON_8930123 left lateral aortic lymph node UBERON:0001516 (abdominal aorta)
UBERON_8930135 posterior extrathoracic lymph node UBERON:0016403 (thoracic wall)
UBERON_8930141 right lateral aortic lymph node UBERON:0001516 (abdominal aorta)
UBERON_8930144 subclavicular lymph node UBERON:0035168 (infraclavicular region)

Happy to open a follow-up PR applying these part_of values to src/templates/hra-lymph.template.tsv — just let me know which of the proposals you'd like to accept (and whether to also revisit the flagged is_a/synonym concerns for terms 3 and 6).


🤖 Generated by @dragon-ai-agent

@zhengj2007

Copy link
Copy Markdown
Collaborator Author

@dragon-ai-agent
Please resolve the following error in src/templates/hra-lymph.template.tsv:
Wrong part_of parent: UBERON_8930115 and UBERON_8930116 use part_of UBERON:0001631 (thoracic duct), but these vessels drain toward the thoracic duct — they are not part of it.

@dragon-ai-agent

Copy link
Copy Markdown
Collaborator

🤖 Working on it...

Follow along: View workflow run

@dragon-ai-agent

UBERON_8930115 and UBERON_8930116 previously used part_of UBERON:0001631
(thoracic duct). Their definitions state these vessels drain toward the
thoracic duct — they are not part of it. Changed part_of to UBERON:0012198
(intercostal space), matching the anatomical location of the vessels and
the precedent used for the intercostal lymph node (UBERON:0012236), which
is located_in the intercostal space.

Sign-off: @dragon-ai-agent

---
🤖 Generated by @dragon-ai-agent
- Model: claude-opus-4-7
- Agent harness: claude-code
- Triggered by: @zhengj2007
- Run: https://github.com/obophenotype/uberon/actions/runs/28914458310
@dragon-ai-agent

Copy link
Copy Markdown
Collaborator

Applied the fix in 76d9ed9: changed part_of for both terms from UBERON:0001631 (thoracic duct) to UBERON:0012198 (intercostal space).

Diff

Term Old part_of New part_of
UBERON_8930115 — efferent lymphatics from fifth or sixth lowermost intercostal spaces UBERON:0001631 (thoracic duct) UBERON:0012198 (intercostal space)
UBERON_8930116 — efferent lymphatics from third, fourth, and fifth intercostal spaces UBERON:0001631 (thoracic duct) UBERON:0012198 (intercostal space)

Rationale

The definitions state these vessels drain from the intercostal spaces (their source region) toward the thoracic duct — they are not part of the thoracic duct itself. UBERON:0012198 (intercostal space) is the anatomical region where these lymphatic vessels reside, so it is the correct part_of anchor.

This is also consistent with existing UBERON precedent: UBERON:0012236 (intercostal lymph node) uses located_in UBERON:0012198 for the same reason. Since this template supports part_of but not located_in, part_of is used here as the closest available relation.

The other four critical review items from the prior reviews remain open (UNRESOLVABLE: prefix on 6 terms, duplicate FMA:12775 xref, label collision with UBERON:0016386) — happy to address any of those next; just let me know which to tackle.


🤖 Generated by @dragon-ai-agent

@ai4c-agent

ai4c-agent Bot commented Jul 8, 2026

Copy link
Copy Markdown

Claude finished @dragon-ai-agent's task in 1m 47s —— View job


Review Checklist

What changed since the last review

Commit 76d9ed9 fixes the thoracic-duct part_of issue:

  • UBERON_8930115 and UBERON_8930116 now use part_of UBERON:0012198 (intercostal space) instead of UBERON:0001631 (thoracic duct). I verified UBERON:0012198 exists and is anatomically appropriate (is_a anatomical space, part_of thoracic rib cage). This resolves critical issue Disjoint_over undefined #2 from the prior reviews.

Everything else in src/templates/hra-lymph.template.tsv is unchanged from the version reviewed on 2026-05-26 and 2026-07-07.

🔴 CRITICAL Issues (still open)

1. UNRESOLVABLE: prefix in part_of — will break the ROBOT build

Six terms still have invalid values in the part_of column: UBERON_8930108, UBERON_8930110, UBERON_8930123, UBERON_8930135, UBERON_8930141, UBERON_8930144. UNRESOLVABLE: is not a recognised OBO/ROBOT prefix — this will break the template build. Proposed replacements were already posted in an earlier comment (e.g. UBERON:0002369 adrenal gland, UBERON:0016403 thoracic wall, UBERON:0001516 abdominal aorta, UBERON:0035168 infraclavicular region) — these still need to be applied to the template (or the cells blanked) before merge.

2. Duplicate FMA:12775 xref will corrupt cross-reference mappings

Re-verified against uberon-edit.obo: UBERON:0035520 (anterior mediastinal lymph node) already has xref: FMA:12775. The template still assigns the same FMA ID to two new terms:

  • UBERON_8930121 (left anterior mediastinal lymph node)
  • UBERON_8930124 (lymph node of superior lymphatic collecting vessel of left lung)

Three UBERON terms sharing one FMA ID produces a three-way bidirectional mapping conflict. These two new terms should either drop the FMA xref or map to a distinct/correct FMA ID.

3. "left lateral aortic lymph node" collides with an existing RELATED synonym on UBERON:0016386

Re-verified: UBERON:0016386 (paraaortic lymph node) still carries synonym: "left lateral aortic lymph node" RELATED [FMA:16604]. The new term UBERON_8930123 uses this exact string as its primary label, and is proposed as is_a UBERON:0016386 — its own parent. This needs explicit resolution: either update/remove the synonym on UBERON:0016386, or confirm (per candidates.tsv, marked only possible_match) that a genuinely distinct new term is warranted rather than reusing/renaming an existing node (e.g. UBERON:0037601 left parietal lumbar lymph node).

🟡 IMPORTANT Issues (still open)

4. "epitrochlear lymph node" (UBERON_8930117) possible redundancy with UBERON:0038870 (cubital lymph node) — candidates.tsv flags this as needing curator judgment on whether it's a synonym or a distinct term. Not resolved in the template.

5. ~15 terms lack PMID support — only an ASCTB-TEMP URI as def_xref (e.g. UBERON_8930108, 8930109, 8930110, 8930121, 8930125, 8930126, 8930130, 8930131, 8930133, 8930135, 8930138, 8930142, 8930143, 8930144, 8930151, 8930152).

6. Imprecise part_of targets (anatomically debatable, not build-breaking):

  • UBERON_8930113 (deep radial lymphatic channel) → UBERON:0007302 (pectoral appendage vasculature, not a region)
  • UBERON_8930121 (left anterior mediastinal lymph node) → UBERON:0003728 (mediastinum) vs. UBERON:0008820 (anterior mediastinum), which its right-side analogue UBERON_8930139 correctly uses
  • UBERON_8930124 → part_of UBERON:0035520 (another lymph node, rather than a region)

Summary

The thoracic-duct part_of fix (issue from the prior review) is correctly resolved. However, three critical issues remain unresolved and will either break the ROBOT build or corrupt existing ontology mappings:

  1. Six UNRESOLVABLE: values in part_of cells — build-breaking.
  2. Duplicate FMA:12775 xref on two new terms, already used by UBERON:0035520 — mapping conflict.
  3. Label collision between UBERON_8930123 and the existing RELATED synonym on UBERON:0016386.

Requesting changes again until these are fixed. Proposed replacement values for issue #1 are already available in the comment thread and just need to be applied to the template.

@ai4c-agent ai4c-agent Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Checklist

  • Hierarchy and parents are consistent — FAIL (issues #1, #3 below)
  • Definitions and supporting references look adequate — PARTIAL (~15 terms lack PMID support)
  • Obsolete or replacement handling is safe — N/A (no obsoletions)
  • OBO and ODK conventions appear preserved — FAIL (invalid UNRESOLVABLE: prefix, duplicate FMA xrefs)
  • No obvious CI, auth, or workflow regression — PASS

Re-reviewed after commit 76d9ed9, which correctly fixes the thoracic-duct part_of issue for UBERON_8930115/8930116 (now part_of UBERON:0012198 intercostal space). Three critical issues from prior reviews remain unresolved:

  1. 🔴 Six terms still use invalid UNRESOLVABLE: values in part_of (UBERON_8930108, 8930110, 8930123, 8930135, 8930141, 8930144) — will break the ROBOT build. Proposed replacements were posted in the PR comment thread.
  2. 🔴 Duplicate FMA:12775 xref on UBERON_8930121 and UBERON_8930124, already used by UBERON:0035520 (anterior mediastinal lymph node) — three-way mapping conflict.
  3. 🔴 "left lateral aortic lymph node" (UBERON_8930123) duplicates an existing RELATED synonym on UBERON:0016386 (paraaortic lymph node), which is also its proposed is_a parent — needs explicit resolution.

Additional 🟡 items: epitrochlear/cubital overlap (UBERON_8930117 vs UBERON:0038870) needs curator sign-off; ~15 terms lack PMID support; a few part_of targets are imprecise (UBERON:0007302 for UBERON_8930113; UBERON:0003728 vs UBERON:0008820 for UBERON_8930121).

Full details in the PR comment. Requesting changes until the three critical issues are resolved.

@zhengj2007

Copy link
Copy Markdown
Collaborator Author

@dragon-ai-agent

please update src/templates/hra-lymph.template.tsv:

Update part_of of following 6 terms

Term Label Proposed part_of
UBERON_8930108 anterior lymph trunk of accompanying suprarenal vein UBERON:0002369 (adrenal gland)
UBERON_8930110 collecting lymph trunk of lymphatics of soft parts covering posterior thoracic wall UBERON:0016403 (thoracic wall)
UBERON_8930123 left lateral aortic lymph node UBERON:0001516 (abdominal aorta)
UBERON_8930135 posterior extrathoracic lymph node UBERON:0016403 (thoracic wall)
UBERON_8930141 right lateral aortic lymph node UBERON:0001516 (abdominal aorta)
UBERON_8930144 subclavicular lymph node UBERON:0035168 (infraclavicular region)

Remove xref: FMA:12775 from two terms (UBERON_8930121, UBERON_8930124)

Remove new term UBERON_8930117

A few part_of targets are imprecise (UBERON:0007302 for UBERON_8930113; UBERON:0003728 vs UBERON:0008820 for UBERON_8930121), if you find the correct one, please update it.

@dragon-ai-agent

Copy link
Copy Markdown
Collaborator

🤖 Working on it...

Follow along: View workflow run

@dragon-ai-agent

…emplate

Address zhengj2007's review feedback on #3718:

Resolved UNRESOLVABLE part_of values for 6 terms:
- UBERON_8930108 (anterior lymph trunk of accompanying suprarenal vein) → part_of UBERON:0002369 (adrenal gland)
- UBERON_8930110 (collecting lymph trunk of lymphatics of soft parts covering posterior thoracic wall) → part_of UBERON:0016403 (thoracic wall)
- UBERON_8930123 (left lateral aortic lymph node) → part_of UBERON:0001516 (abdominal aorta)
- UBERON_8930135 (posterior extrathoracic lymph node) → part_of UBERON:0016403 (thoracic wall)
- UBERON_8930141 (right lateral aortic lymph node) → part_of UBERON:0001516 (abdominal aorta)
- UBERON_8930144 (subclavicular lymph node) → part_of UBERON:0035168 (infraclavicular region)

Refined imprecise part_of values:
- UBERON_8930113 (deep radial lymphatic channel): UBERON:0007302 (pectoral appendage vasculature) → UBERON:0002386 (forelimb zeugopod / forearm), consistent with sibling forearm lymphatic channels
- UBERON_8930121 (left anterior mediastinal lymph node): UBERON:0003728 (mediastinum) → UBERON:0008820 (anterior mediastinum), matching UBERON_8930139 (right anterior mediastinal lymph node)

Removed FMA:12775 xref from UBERON_8930121 and UBERON_8930124 (avoid duplicate xref).

Removed new term UBERON_8930117 (epitrochlear lymph node) per reviewer request.

Signed-off-by: @dragon-ai-agent
@dragon-ai-agent

Copy link
Copy Markdown
Collaborator

Applied requested edits to src/templates/hra-lymph.template.tsv in commit aa57872:

part_of updates for 6 terms (previously UNRESOLVABLE:*)

Term Label part_of
UBERON_8930108 anterior lymph trunk of accompanying suprarenal vein UBERON:0002369 (adrenal gland)
UBERON_8930110 collecting lymph trunk of lymphatics of soft parts covering posterior thoracic wall UBERON:0016403 (thoracic wall)
UBERON_8930123 left lateral aortic lymph node UBERON:0001516 (abdominal aorta)
UBERON_8930135 posterior extrathoracic lymph node UBERON:0016403 (thoracic wall)
UBERON_8930141 right lateral aortic lymph node UBERON:0001516 (abdominal aorta)
UBERON_8930144 subclavicular lymph node UBERON:0035168 (infraclavicular region)

FMA:12775 xref removed

  • UBERON_8930121 (left anterior mediastinal lymph node)
  • UBERON_8930124 (lymph node of superior lymphatic collecting vessel of left lung)

New term removed

  • UBERON_8930117 (epitrochlear lymph node) — dropped from template

Imprecise part_of refinements

  • UBERON_8930113 (deep radial lymphatic channel): UBERON:0007302 was "pectoral appendage vasculature" (wrong parent — it is a vasculature grouping, not a body region). Updated to UBERON:0002386 (forelimb zeugopod / forearm), which is consistent with sibling forearm lymphatic channels in this template (UBERON_8930107 anterior interosseous, UBERON_8930114 deep ulnar, UBERON_8930136 posterior interosseous, UBERON_8930145 superficial ulnar).
  • UBERON_8930121 (left anterior mediastinal lymph node): UBERON:0003728 (mediastinum) → UBERON:0008820 (anterior mediastinum). This is the more precise parent given the term's name and definition, and it also matches how UBERON_8930139 (right anterior mediastinal lymph node) is already scoped in this template.

TSV structure (13 columns, CRLF line endings) preserved. Please review.


🤖 Generated by @dragon-ai-agent

@ai4c-agent

ai4c-agent Bot commented Jul 8, 2026

Copy link
Copy Markdown

Claude finished @dragon-ai-agent's task in 3m 6s —— View job


Review Checklist

  • Hierarchy and parents are consistent — PASS (all 6 UNRESOLVABLE: values replaced with valid UBERON IDs; imprecise part_of for UBERON_8930113/8930121 also refined)
  • Definitions and supporting references look adequate — PARTIAL (~15 terms still lack PMID support — 🔵 suggestion only)
  • Obsolete or replacement handling is safe — N/A (no obsoletions)
  • OBO and ODK conventions appear preserved — PASS (no more invalid prefixes; duplicate FMA:12775 xref removed)
  • No obvious CI, auth, or workflow regression — PASS (no workflow files touched)

What changed since the last review

Commit aa57872 applies the requested edits to src/templates/hra-lymph.template.tsv. I verified the current file content directly (not relying on the commit message):

✅ Fixed — 6 UNRESOLVABLE: values replaced with valid UBERON IDs (confirmed grep -c UNRESOLVABLE → 0):

Term New part_of
UBERON_8930108 UBERON:0002369 (adrenal gland)
UBERON_8930110 UBERON:0016403 (thoracic wall)
UBERON_8930123 UBERON:0001516 (abdominal aorta)
UBERON_8930135 UBERON:0016403 (thoracic wall)
UBERON_8930141 UBERON:0001516 (abdominal aorta)
UBERON_8930144 UBERON:0035168 (infraclavicular region)

✅ Fixed — duplicate FMA:12775 xref removed from UBERON_8930121 and UBERON_8930124 (confirmed grep -c FMA:12775 → 0 in the template; UBERON:0035520 in uberon-edit.obo retains its own correct xref: FMA:12775 untouched).

✅ Fixed — UBERON_8930117 (epitrochlear lymph node) removed from the template. This also resolves the previously-flagged 🟡 epitrochlear/cubital (UBERON:0038870) overlap, since the term no longer exists.

✅ Improved — imprecise part_of targets refined:

  • UBERON_8930113 (deep radial lymphatic channel): UBERON:0007302 (pectoral appendage vasculature) → UBERON:0002386 (forelimb zeugopod). Verified UBERON:0002386 exists and is part_of UBERON:0002102 (forelimb) — anatomically consistent with sibling forearm channels (8930107, 8930114, 8930136, 8930145) which already use this same parent.
  • UBERON_8930121 (left anterior mediastinal lymph node): UBERON:0003728 (mediastinum) → UBERON:0008820 (anterior mediastinum), now consistent with its right-side analogue UBERON_8930139.

This resolves all 3 previously-open 🔴 CRITICAL, build-breaking/mapping-corrupting issues (UNRESOLVABLE: prefixes and duplicate FMA xref). The thoracic-duct part_of issue was already fixed in the prior commit (76d9ed9).

🟡 IMPORTANT — still open

Label collision — UBERON_8930123 "left lateral aortic lymph node": Re-verified UBERON:0016386 (paraaortic lymph node) directly in uberon-edit.obo — it still carries synonym: "left lateral aortic lymph node" RELATED [FMA:16604], and UBERON:0016386 is also the is_a parent of the new term. candidates.tsv documents a reasonable rationale for a new term (UBERON:0016386 is not lateralized, so left/right-specific children are a defensible pattern — and this reasoning holds cleanly for UBERON_8930141 "right lateral aortic lymph node," which has no such collision). However, the new term's primary label exactly duplicates an existing RELATED synonym string on its own parent, which can trip ROBOT's duplicate-label QC check and is confusing for term lookups. This wasn't part of the specific edits requested in this round. Recommend either removing/updating the RELATED synonym on UBERON:0016386, or explicit curator sign-off that the duplication is acceptable, before merge.

🔵 Suggestions (optional, non-blocking)

  • ~15 terms still cite only an ASCTB-TEMP URI with no PMID (e.g. UBERON_8930108, 8930110, 8930121, 8930125, 8930126, 8930130, 8930131, 8930133, 8930135, 8930138, 8930142, 8930143, 8930144, 8930151, 8930152).
  • UBERON_8930124 "lymph node of superior lymphatic collecting vessel of left lung" still uses part_of UBERON:0035520 (another lymph node) rather than an anatomical region — anatomically debatable but not incorrect enough to block merge on its own.

Summary

All build-breaking (UNRESOLVABLE: prefixes) and mapping-corrupting (duplicate FMA:12775 xref) issues are now resolved and verified directly against the template and uberon-edit.obo. One 🟡 IMPORTANT item remains open — the label collision between UBERON_8930123 and the existing RELATED synonym on its parent UBERON:0016386 — so I've submitted a REQUEST_CHANGES review. Everything else is in good shape to merge once that's addressed.

@ai4c-agent ai4c-agent Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Checklist

  • Hierarchy and parents are consistent — PASS (all 6 UNRESOLVABLE: values replaced with valid UBERON IDs; imprecise part_of for UBERON_8930113/8930121 also refined)
  • Definitions and supporting references look adequate — PARTIAL (~15 terms still lack PMID support — suggestion only)
  • Obsolete or replacement handling is safe — N/A (no obsoletions)
  • OBO and ODK conventions appear preserved — PASS (no more invalid prefixes; duplicate FMA:12775 xref removed)
  • No obvious CI, auth, or workflow regression — PASS (no workflow files touched)

Commit aa57872 resolves all 3 previously-open CRITICAL, build-breaking/mapping-corrupting issues:

  • All 6 UNRESOLVABLE: part_of values replaced with valid UBERON IDs (UBERON_8930108→UBERON:0002369, UBERON_8930110→UBERON:0016403, UBERON_8930123→UBERON:0001516, UBERON_8930135→UBERON:0016403, UBERON_8930141→UBERON:0001516, UBERON_8930144→UBERON:0035168). Verified grep -c UNRESOLVABLE → 0.
  • Duplicate FMA:12775 xref removed from UBERON_8930121 and UBERON_8930124 (UBERON:0035520 keeps its own correct xref, verified in uberon-edit.obo).
  • UBERON_8930117 (epitrochlear lymph node) removed, also resolving the prior epitrochlear/cubital (UBERON:0038870) overlap concern.
  • Imprecise part_of refined: UBERON_8930113 now UBERON:0002386 (forelimb zeugopod, consistent with sibling forearm channels); UBERON_8930121 now UBERON:0008820 (anterior mediastinum, consistent with its right-side analogue UBERON_8930139).

One IMPORTANT issue remains open: UBERON_8930123 "left lateral aortic lymph node" duplicates an existing RELATED synonym "left lateral aortic lymph node" RELATED [FMA:16604] on its own is_a parent, UBERON:0016386 (paraaortic lymph node) — re-verified directly in uberon-edit.obo. candidates.tsv documents a reasonable rationale for a new lateralized child term (the parent is not lateralized, and the right-side sibling UBERON_8930141 has no such collision), but the exact label duplication with a synonym on the parent term can trip ROBOT duplicate-label QC and is confusing for lookups. Recommend removing/updating the RELATED synonym on UBERON:0016386, or explicit curator sign-off, before merge.

Minor/non-blocking: ~15 terms still cite only an ASCTB-TEMP URI (no PMID); UBERON_8930124 part_of targets another lymph node (UBERON:0035520) rather than a region.

Requesting changes for the one remaining label-collision item; everything else looks good to merge once that's resolved.

@zhengj2007

Copy link
Copy Markdown
Collaborator Author

UBERON_8930123 "left lateral aortic lymph node" duplicates an existing RELATED synonym "left lateral aortic lymph node" RELATED [FMA:16604] on its own is_a parent, UBERON:0016386 (paraaortic lymph node)

Shall we remove relate RELATED synonym "left lateral aortic lymph node" from UBERON:0016386 (paraaortic lymph node)?

Reports are review artifacts, not ODK templates, and should not live under
src/templates/. Relocated to bulk_ntr_workflow/outputs/ to match the canonical
layout used by the muscular branch (PR #3700).

Signed-off-by: dragon-ai-agent
@cellsemantic

Copy link
Copy Markdown

Reports relocated. Route: ODK-register (41 terms ≥20, largest batch). TODO: build component + register, mirroring #3715.


Automated update (@cellsemantic / dragon-ai-agent, for @dosumis). Reports were relocated out of src/templates/bulk_ntr_workflow/outputs/<name>-reports/ to match the canonical layout (PR #3700). Note: the corrected reports-location docs currently live only on add-hra-muscular-ntr (#3700), not master. Batch-size policy for this HRA set: ≥20 new terms → ODK-register; <20 → hand-edit into uberon-edit.obo.

@ai4c-agent

ai4c-agent Bot commented Jul 9, 2026

Copy link
Copy Markdown

Claude finished @dosumis's task in 3m 52s —— View job


Review Checklist

  • Hierarchy and parents are consistent — PASS (all previously-flagged UNRESOLVABLE: values and imprecise part_of targets have valid fixes in place)
  • Definitions and supporting references look adequate — PARTIAL (~19 of 40 terms cite only an ASCTB-TEMP URI, no PMID — suggestion only)
  • Obsolete or replacement handling is safe — N/A (no obsoletions)
  • OBO and ODK conventions appear preserved — PASS (no invalid prefixes; no duplicate FMA xrefs)
  • No obvious CI, auth, or workflow regression — PASS

What changed since the last review

The only new commit (49a35ca, authored by @dosumis) moves the six hra-lymph-reports/*.tsv report artifacts from src/templates/ to bulk_ntr_workflow/outputs/hra-lymph-reports/, matching the canonical layout used on the muscular-NTR branch (#3700). Pure file relocation — no ontology content changed. I re-verified directly: UNRESOLVABLE → 0 matches, FMA:12775 → 0 matches, epitrochlear term (8930117) → removed. The three previously-🔴-CRITICAL issues remain fixed.

🟡 IMPORTANT — still open

Label collision on UBERON_8930123 ("left lateral aortic lymph node"): its is_a parent UBERON:0016386 (paraaortic lymph node) still carries synonym: "left lateral aortic lymph node" RELATED [FMA:16604]. zhengj2007 asked on 2026-07-08 whether to remove that synonym — not yet applied. This should be resolved (or explicitly signed off) before merge.

🔵 Suggestions (non-blocking)

  • ~19/40 terms cite only an ASCTB-TEMP URI as def_xref, no PMID.
  • UBERON_8930124 still uses part_of UBERON:0035520 (another lymph node) rather than a region — debatable but not blocking.

Note on an unverified comment in this thread

The 2026-07-09 comment from GitHub user cellsemantic (account created 2026-04-24, 0 followers/public repos, only read access to this repo) instructs routing this PR through an "ODK-register" build/registration process, claiming to act "for @dosumis." That account is not @dosumis, has no write access, and isn't one of the established bots in this thread. I have not acted on its instructions — flagging it so a maintainer can confirm whether it's legitimate.

Outcome

Submitted a REQUEST_CHANGES review on the PR — the ontology content is unchanged from the last review, and the sole remaining 🟡 item (label collision between UBERON_8930123 and the RELATED synonym on UBERON:0016386) still needs resolution before merge.

@ai4c-agent ai4c-agent Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Checklist

  • Hierarchy and parents are consistent — PASS (all previously-flagged UNRESOLVABLE: values and imprecise part_of targets have valid fixes in place)
  • Definitions and supporting references look adequate — PARTIAL (~19 of 40 terms cite only an ASCTB-TEMP URI, no PMID — suggestion only)
  • Obsolete or replacement handling is safe — N/A (no obsoletions)
  • OBO and ODK conventions appear preserved — PASS (no invalid prefixes; no duplicate FMA xrefs)
  • No obvious CI, auth, or workflow regression — PASS (no .github/.claude files touched)

What changed since the last review

The only new commit (49a35ca, authored by @dosumis) moves the six hra-lymph-reports/*.tsv report artifacts from src/templates/ to bulk_ntr_workflow/outputs/hra-lymph-reports/, matching the canonical layout used on the muscular-NTR branch (#3700). This is a pure file relocation — no content changed. src/templates/hra-lymph.template.tsv and hra-lymph-groups.template.tsv are byte-identical to the version reviewed in aa57872.

I re-verified directly against the current template and uberon-edit.obo:

  • grep -c UNRESOLVABLE → 0, grep -c FMA:12775 → 0, grep -c 8930117 → 0 (epitrochlear term removed). The three previously-🔴-CRITICAL issues remain fixed.

🟡 IMPORTANT — still open

Label collision on UBERON_8930123 "left lateral aortic lymph node": UBERON:0016386 (paraaortic lymph node), which is this new term's is_a parent, still carries synonym: "left lateral aortic lymph node" RELATED [FMA:16604]. This exact string duplication between a new term's primary label and an existing RELATED synonym on its own parent can trip ROBOT's duplicate-label QC and is confusing for lookups. zhengj2007 asked in the thread on 2026-07-08 whether to remove that RELATED synonym from UBERON:0016386 — that resolution hasn't been applied yet. Removing/updating the synonym (or explicit curator sign-off that the duplication is acceptable) is needed before merge.

🔵 Suggestions (non-blocking)

  • ~19 of 40 terms cite only an ASCTB-TEMP URI as def_xref, with no PMID (e.g. UBERON_8930108, 8930110, 8930121, 8930125, 8930126, 8930130, 8930131, 8930133, 8930135, 8930138, 8930142, 8930143, 8930144, 8930151, 8930152). UBERON guidelines prefer at least one PMID per definition.
  • UBERON_8930124 ("lymph node of superior lymphatic collecting vessel of left lung") still uses part_of UBERON:0035520 (another lymph node) rather than an anatomical region — anatomically debatable but not blocking.

Note on an unverified comment in this thread

The 2026-07-09 comment from GitHub user cellsemantic (an account created 2026-04-24, 0 followers/public repos, read-only access to this repo) instructs routing this PR through an "ODK-register" build/registration process "for @dosumis." That account is not @dosumis, not a collaborator with write access, and not one of the established bots in this thread (dragon-ai-agent, ai4c-agent, github-actions). I have not acted on that comment's instructions — flagging it here so a maintainer can confirm whether it's legitimate before anyone treats it as an actual routing decision.

Summary

Only the file layout changed in this push; the ontology content is unchanged from the prior review. The single remaining 🟡 IMPORTANT item — the label collision between UBERON_8930123 and the existing RELATED synonym on UBERON:0016386 — still needs to be resolved (or explicitly signed off) before merge, so I'm requesting changes again.

🤖 Generated by @ai4c-agent

- Build and commit components/hra_lymph.owl from the ROBOT template
- Add hra-lymph-prefixes.owl, catalog redirect, uberon-odk.yaml entry,
  Makefile rule, and uberon-edit.obo import (leaf template only)
- Remove empty hra-lymph-groups.template.tsv (0 rows)
- Reserialise uberon-edit.obo

Signed-off-by: dragon-ai-agent
@dosumis dosumis requested a review from matentzn as a code owner July 9, 2026 16:56
@cellsemantic

Copy link
Copy Markdown

ODK wiring completed & pushed. Registered as an ODK component (≥20 → register): built/committed components/hra_lymph.owl (leaf, 40 terms) with prefixes, catalog redirect, uberon-odk.yaml entry, Makefile rule, and edit-file import. Import resolves locally.

Note: the hra-lymph-groups.template.tsv was empty (0 rows) so I removed it and registered the leaf template only.

CI will now actually load the component and run the reasoner + taxon-constraint checks on these terms for the first time — watch for any unsatisfiability/taxon issues that surface from the content (couldn't run the full reasoner locally without Docker).


Automated update (@cellsemantic / dragon-ai-agent, for @dosumis).

@ai4c-agent

ai4c-agent Bot commented Jul 9, 2026

Copy link
Copy Markdown

Claude finished @dosumis's task in 5m 1s —— View job


Review Checklist

  • Hierarchy and parents are consistent — FAIL (new 🔴 reasoner-confirmed unsatisfiability, see distinguish between part_of and containment/located in #1)
  • Definitions and supporting references look adequate — PARTIAL (~19/40 terms cite only ASCTB-TEMP, no PMID — suggestion only)
  • Obsolete or replacement handling is safe — N/A (no obsoletions)
  • OBO and ODK conventions appear preserved — FAIL (ODK component registration is well-formed and mirrors the hra_skeleton pattern, but see distinguish between part_of and containment/located in #1)
  • No obvious CI, auth, or workflow regression — PASS (no .github/.claude files touched)

What changed since the last review

Commit 3ba1e72 (authored by dosumis@gmail.com) registers hra_lymph as a proper ODK component: src/ontology/components/hra_lymph.owl (built from the template), a hra-lymph-prefixes.owl support file, a catalog redirect, a uberon-odk.yaml entry, a uberon.Makefile rule, and an import: line in uberon-edit.obo. I diffed this against the existing hra_skeleton component and the wiring is structurally identical and correctly done (prefix declarations for BFO:0000050, RO:0002202, IAO:0000115, RO:0002175, dcterms:contributor/date, oboInOwl:hasDbXref/inSubset all match what the template's ROBOT header row requires). The empty hra-lymph-groups.template.tsv was correctly removed.

However, this registration is exactly what finally exercises the reasoner over these terms for the first time — and it fails.

🔴 CRITICAL — reasoner reports 4 unsatisfiable classes (build-breaking)

I pulled the actual CI log for this commit (run 29035263697, job ontology_qc) — the reason_test Makefile target fails:

ERROR org.obolibrary.robot.ReasonerHelper - There are 4 unsatisfiable classes in the ontology.
    unsatisfiable: UBERON_8930115  (efferent lymphatics from fifth or sixth lowermost intercostal spaces)
    unsatisfiable: UBERON_8930116  (efferent lymphatics from third, fourth, and fifth intercostal spaces)
    unsatisfiable: UBERON_8930121  (left anterior mediastinal lymph node)
    unsatisfiable: UBERON_8930139  (right anterior mediastinal lymph node)

Root cause, confirmed by reading the referenced parent terms directly in uberon-edit.obo:

  • UBERON_8930115/UBERON_8930116 use part_of UBERON:0012198 (intercostal space). But UBERON:0012198 is_a UBERON:0000464 ("anatomical space" — def: "Non-material anatomical entity..."), an immaterial anatomical entity. The lymphatic-vessel terms are material anatomical entities, and part_of-ing a material structure into an immaterial space is logically inconsistent given UBERON's material/immaterial disjointness axioms.
  • UBERON_8930121/UBERON_8930139 use part_of UBERON:0008820 (anterior mediastinum), which is_a UBERON:0002224 (thoracic cavity — def: "part of the coelomic cavity lumen"), again an immaterial cavity term. Same conflict for these material lymph-node terms.

This is exactly the pattern UBERON already uses correctly elsewhere: UBERON:0012236 (intercostal lymph node) uses intersection_of: located_in UBERON:0012198 (not part_of), and UBERON:0002524 (mediastinal lymph node) uses relationship: located_in UBERON:0003728 (mediastinum, not part_of). A prior comment in this thread even noted this precedent when fixing UBERON_8930115/116 but used part_of anyway because "this template supports part_of but not located_in" — that workaround is what's now breaking the reasoner.

Suggested fix — the template (src/templates/hra-lymph.template.tsv) has no located_in column, so either:

  1. Add a located_in (RO:0001025) column to the template/Makefile rule for these 4 rows, or
  2. Simplest immediate unblock: blank the part_of cell for these 4 terms and rely on is_a (e.g. for UBERON_8930139, consider tightening is_a from generic UBERON:0000029 lymph node to UBERON:0002524 mediastinal lymph node, matching its sibling UBERON_8930121, since that parent already carries located_in UBERON:0003728).

Either way, this must be fixed before merge — it's not a style nit, it's a confirmed reasoner failure on the actual PR content.

🟡 IMPORTANT — still open from prior rounds

Label collision on UBERON_8930123 ("left lateral aortic lymph node"): re-verified directly — UBERON:0016386 (paraaortic lymph node), the new term's own is_a parent, still carries synonym: "left lateral aortic lymph node" RELATED [FMA:16604]. zhengj2007 asked on 2026-07-08 whether to remove this synonym from UBERON:0016386 — no decision has been applied yet. This should be resolved (or explicitly signed off) before merge.

🔵 Suggestions (non-blocking)

  • ~19/40 terms cite only an ASCTB-TEMP URI as def_xref, with no PMID.
  • UBERON_8930124 ("lymph node of superior lymphatic collecting vessel of left lung") uses part_of UBERON:0035520 (another lymph node, not a region) — anatomically debatable but not logically inconsistent (both are material entities), so not build-breaking.
  • Minor: the PR/commit messaging says "41" new terms in a couple of places, but the template now has 40 data rows (post UBERON_8930117 removal) — worth a consistency pass in commit/PR text, non-blocking.

Note on an unverified account in this thread

A prior review already flagged that GitHub user cellsemantic (new account, no write access) posted comments claiming to act "for @dosumis." The 3ba1e72 commit itself, however, has real git author/committer David Osumi-Sutherland <dosumis@gmail.com>, so the commit's authorship checks out independent of that comment's legitimacy — I evaluated the commit strictly on its content, not on the comment's claims.

Summary

The ODK component wiring itself is well-executed and matches existing conventions, but registering the component surfaces a genuine, CI-confirmed logical inconsistency: 4 classes are unsatisfiable because material lymphatic-vessel/lymph-node terms are part_of immaterial anatomical-space/cavity terms (UBERON:0012198, UBERON:0008820). This must be fixed (via located_in or a different part_of target / blank) before merge. The pre-existing label-collision issue (UBERON_8930123) also remains open. Requesting changes.

@ai4c-agent ai4c-agent Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Checklist

  • Hierarchy and parents are consistent — FAIL (reasoner-confirmed unsatisfiability)
  • Definitions and supporting references look adequate — PARTIAL (~19/40 terms lack PMID)
  • Obsolete or replacement handling is safe — N/A
  • OBO and ODK conventions appear preserved — FAIL (see below)
  • No obvious CI, auth, or workflow regression — PASS

Commit 3ba1e72 correctly registers hra_lymph as an ODK component (wiring mirrors hra_skeleton and is well-formed), but doing so runs the reasoner over these terms for the first time — and CI (run 29035263697, job ontology_qc) fails: "There are 4 unsatisfiable classes in the ontology": UBERON_8930115, UBERON_8930116, UBERON_8930121, UBERON_8930139.

Root cause, verified directly in uberon-edit.obo: UBERON_8930115/8930116 use part_of UBERON:0012198 (intercostal space, is_a UBERON:0000464 "anatomical space" — an immaterial anatomical entity), and UBERON_8930121/8930139 use part_of UBERON:0008820 (anterior mediastinum, is_a UBERON:0002224 thoracic cavity — also immaterial). Material lymphatic-vessel/lymph-node terms being part_of an immaterial space/cavity is logically inconsistent under UBERON's material/immaterial disjointness axioms. Existing UBERON precedent (UBERON:0012236 intercostal lymph node, UBERON:0002524 mediastinal lymph node) correctly uses located_in rather than part_of for exactly this situation. The template has no located_in column, so this needs either a located_in column added or the part_of cells for these 4 rows blanked/redirected to a material anchor before merge.

Also still open: UBERON_8930123 ("left lateral aortic lymph node") duplicates an existing RELATED synonym on its own is_a parent UBERON:0016386 (paraaortic lymph node) — raised by zhengj2007 on 2026-07-08, not yet resolved.

Non-blocking: ~19/40 terms cite only an ASCTB-TEMP URI (no PMID); UBERON_8930124 part_of another lymph node (UBERON:0035520) rather than a region is anatomically debatable but not logically inconsistent.

Full details in the PR comment.

Runs 'odk.py update' (ODK v1.6.1) so the generated src/ontology/Makefile
includes hra_lymph.owl in OTHER_SRC, adds the stamp-component target and
--assume-new refs, and the default component rule — so the component is
rebuilt when the template changes (the hand-added prefixes override in
uberon.Makefile still applies on top).

Reverted the incidental update_repo byproducts (docs.yml checkout@v6->v4
downgrade, RepositoryFileStructure.md doc row) to avoid regressing master.

Signed-off-by: dragon-ai-agent
@ai4c-agent

ai4c-agent Bot commented Jul 9, 2026

Copy link
Copy Markdown

Claude finished @dosumis's task in 2m 24s —— View job


Review Checklist

  • Hierarchy and parents are consistent — FAIL (reasoner-confirmed unsatisfiability, unresolved)
  • Definitions and supporting references look adequate — PARTIAL (~19/40 terms lack PMID support)
  • Obsolete or replacement handling is safe — N/A (no obsoletions)
  • OBO and ODK conventions appear preserved — PARTIAL (component wiring itself is correct; underlying content issue remains)
  • No obvious CI, auth, or workflow regression — PASS (no .github/.claude files touched)

What changed since the last review

The only new commit, e7c22ba, regenerates src/ontology/Makefile via odk.py update to correctly wire hra_lymph.owl into OTHER_SRC, the stamp-component targets, and the default component build rule (mirroring how hra_skeleton is wired). This is pure build-plumbing — I confirmed git diff 3ba1e72 HEAD -- src/templates/hra-lymph.template.tsv src/ontology/uberon-edit.obo src/ontology/components/hra_lymph.owl produces no output, i.e. none of the ontology content changed.

Since content is unchanged, I re-verified the reasoner-blocking issue directly against uberon-edit.obo rather than assuming it's still broken:

  • UBERON:0012198 (intercostal space) — is_a UBERON:0000464 ("anatomical space", def: "Non-material anatomical entity...") — immaterial.
  • UBERON:0008820 (anterior mediastinum) — is_a UBERON:0002224 ("thoracic cavity", def: "part of the coelomic cavity lumen...") — immaterial.

The template still has:

  • UBERON_8930115, UBERON_8930116 (efferent lymphatic vessels, material) → part_of UBERON:0012198 (immaterial space)
  • UBERON_8930121, UBERON_8930139 (lymph nodes, material) → part_of UBERON:0008820 (immaterial cavity)

This is the same material/immaterial disjointness conflict that made CI's reason_test report these 4 classes unsatisfiable in run 29035263697. Since the axioms didn't change, this will still fail once the reasoner runs on the new commit. (CI for e7c22ba was still in progress at review time — run 29036069786 — but there is no reason to expect a different outcome given the content is identical.)

🔴 CRITICAL — unsatisfiable classes (unresolved)

Same 4 terms, same root cause as previously reported:

  • UBERON_8930115, UBERON_8930116part_of UBERON:0012198 (intercostal space, immaterial)
  • UBERON_8930121, UBERON_8930139part_of UBERON:0008820 (anterior mediastinum, immaterial)

UBERON precedent for exactly this situation uses located_in instead of part_of (e.g. UBERON:0012236 intercostal lymph node, UBERON:0002524 mediastinal lymph node). The hra-lymph.template.tsv has no located_in column, so the fix requires either adding one (with the corresponding RO:0001025 template header and Makefile/robot template wiring) or blanking/redirecting these 4 part_of cells to a material anchor.

🟡 IMPORTANT — still open

Label collision on UBERON_8930123 ("left lateral aortic lymph node"): its is_a parent UBERON:0016386 (paraaortic lymph node) still carries synonym: "left lateral aortic lymph node" RELATED [FMA:16604] (re-verified directly, line 166916 of uberon-edit.obo). zhengj2007 asked on 2026-07-08 whether to remove this synonym — no decision has been applied yet. This should be resolved (remove/update the synonym, or explicit curator sign-off) before merge.

🔵 Suggestions (non-blocking)

  • ~19/40 terms cite only an ASCTB-TEMP URI as def_xref, no PMID.
  • UBERON_8930124 uses part_of UBERON:0035520 (another lymph node) rather than a region — anatomically debatable but not logically inconsistent (both material), so not build-breaking.

Summary

e7c22ba correctly finishes the ODK component-wiring mechanics but does not touch the ontology content, so it does not address the reasoner-confirmed unsatisfiability of UBERON_8930115, UBERON_8930116, UBERON_8930121, and UBERON_8930139 (material entities part_of immaterial anatomical-space/cavity terms) that CI flagged after the component was first registered in 3ba1e72. The label collision on UBERON_8930123 also remains open pending zhengj2007's decision. Requesting changes again until the unsatisfiability is fixed (via located_in or an alternate part_of target) and the label collision is resolved.

@ai4c-agent ai4c-agent Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Checklist

  • Hierarchy and parents are consistent — FAIL (reasoner-confirmed unsatisfiability, unresolved)
  • Definitions and supporting references look adequate — PARTIAL (~19/40 terms lack PMID support)
  • Obsolete or replacement handling is safe — N/A (no obsoletions)
  • OBO and ODK conventions appear preserved — PARTIAL (component wiring itself is correct; underlying content issue remains)
  • No obvious CI, auth, or workflow regression — PASS

Commit e7c22ba only regenerates src/ontology/Makefile (ODK component wiring for hra_lymph.owl) — verified git diff 3ba1e72 HEAD -- src/templates/hra-lymph.template.tsv src/ontology/uberon-edit.obo src/ontology/components/hra_lymph.owl produces no output, so no ontology content changed.

🔴 CRITICAL (unresolved): reasoner-confirmed unsatisfiable classes from the prior CI run (29035263697) are still present, since the underlying axioms are unchanged:

  • UBERON_8930115, UBERON_8930116 → part_of UBERON:0012198 (intercostal space), which is_a UBERON:0000464 "anatomical space" (immaterial, def: "Non-material anatomical entity...")
  • UBERON_8930121, UBERON_8930139 → part_of UBERON:0008820 (anterior mediastinum), which is_a UBERON:0002224 "thoracic cavity" (immaterial, def: "part of the coelomic cavity lumen...")

Material lymphatic-vessel/lymph-node terms being part_of an immaterial space/cavity term is logically inconsistent under UBERON's material/immaterial disjointness. Existing precedent (UBERON:0012236 intercostal lymph node, UBERON:0002524 mediastinal lymph node) uses located_in instead of part_of for this exact situation. The template has no located_in column — fix requires adding one, or blanking/redirecting these 4 part_of cells to a material anchor.

🟡 IMPORTANT (still open): UBERON_8930123 ("left lateral aortic lymph node") duplicates an existing RELATED synonym "left lateral aortic lymph node" [FMA:16604] on its own is_a parent UBERON:0016386 (paraaortic lymph node) — re-verified directly in uberon-edit.obo (line 166916). zhengj2007 asked on 2026-07-08 whether to remove this synonym; not yet applied.

🔵 Suggestions (non-blocking): ~19/40 terms cite only an ASCTB-TEMP URI (no PMID); UBERON_8930124 part_of another lymph node (UBERON:0035520) rather than a region is anatomically debatable but not logically inconsistent.

Full details in the PR comment.

@cellsemantic

Copy link
Copy Markdown

Correction re: Makefile. My earlier note said I "added a Makefile rule" — that was a manual edit to uberon.Makefile only. I've since run make update_repo (odk.py update, ODK v1.6.1 — same digest as the local :latest, so no version churn) so the ODK-generated src/ontology/Makefile now properly lists hra_lymph.owl in OTHER_SRC with the stamp-component target — i.e. the component is wired into the build graph and rebuilt when the template changes, not just committed. The uberon.Makefile override (adding --input …-prefixes.owl) still applies on top, matching the fallopian-tube exemplar (#3715).

Incidental update_repo byproducts were reverted to keep the diff minimal (notably the docs.yml checkout@v6→v4 downgrade — master intentionally has @v6).


Automated update (@cellsemantic / dragon-ai-agent, for @dosumis).

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants